使用ASP.NET MVC4 jquery/javascript包

Bac*_*tnz 32 asp.net asp.net-mvc jquery asp.net-mvc-4 bundling-and-minification

当我使用标准MVC4模板创建我的项目时,包含了大量的javascript,例如:jquery-obtrusive,jquery-validate,knockout,整个jQuery UI.

这有多少值得保留,丢掉多少钱?我注意到当你创建一个强类型的控制器时,create.cshtml视图生成了调用:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)

这个文件到底是做什么的?我应该保留吗?我应该引用最初在BundleConfig.cs中定义的所有这些JS文件吗?或者我可以不打扰..?

Nop*_*ope 95

这个文件到底是做什么的?

jqueryval 不是文件,它是对包的引用.

MVC4中的捆绑包是捆绑在一起的捆绑包,样式或其他文件的集合.

您将BundleConfig.cs在该App_Start文件夹中有一个文件,其中包含将哪个文件添加到哪个包中的设置.

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.unobtrusive*",
            "~/Scripts/jquery.validate*"));
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到~/bundles/jqueryval的那样,捆绑包的虚拟路径组合了其中指定的文件.所以稍后当你看到这个:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)

以上内容将包括该引用下捆绑的脚本.

我应该保留吗?我应该引用最初在BundleConfig.cs中定义的所有这些JS文件吗?

对于jqueryval捆绑包,您可能会发现包含的不显眼和验证脚本非常有用.

它们是脚本,负责管理不显眼的验证,保持DOM的美观和清洁.

如果您不需要或想要使用不显眼的验证,则可以将捆绑包移除.如果您这样做,那么我相信您还需要更新您的web.config,设置必填字段false以确保您的项目不会查找文件,类似于:

<add key="ClientValidationEnabled" value="false" />
<add key="UnobtrusiveJavaScriptEnabled" value="false" />
Run Code Online (Sandbox Code Playgroud)

本文非常好地解释了使用突出和不显眼验证之间的好处和确切区别:Brad Wilson:ASP.NET MVC 3中不显眼的客户端验证

一般来说,我认为只包括你需要的东西是好的.如果您不需要捆绑包中指定的所有文件,请删除这些文件,将捆绑包全部排除在一起或创建自己的自定义捆绑包.

试错.如果删除它们并在浏览器调试器控制台中找到随机异常,请尝试重新添加一些文件/包.


通常,捆绑也适用于样式表:

bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
            "~/Content/themes/base/jquery.ui.core.css",
            "~/Content/themes/base/jquery.ui.resizable.css",
            "~/Content/themes/base/jquery.ui.selectable.css",
            "~/Content/themes/base/jquery.ui.accordion.css",
            "~/Content/themes/base/jquery.ui.autocomplete.css",
            "~/Content/themes/base/jquery.ui.button.css",
            "~/Content/themes/base/jquery.ui.dialog.css",
            "~/Content/themes/base/jquery.ui.slider.css",
            "~/Content/themes/base/jquery.ui.tabs.css",
            "~/Content/themes/base/jquery.ui.datepicker.css",
            "~/Content/themes/base/jquery.ui.progressbar.css",
            "~/Content/themes/base/jquery.ui.theme.css"));
Run Code Online (Sandbox Code Playgroud)

对开发人员的好处是只需引用单个包而不是几个文件.

客户端的好处是浏览器必须执行多少单独的加载来获取脚本/ css文件.

例如,如果您在视图中有5个文件引用,则客户端浏览器将单独下载所有5个文件,并且每个浏览器中有一个限制可以同时下载多少文件.这意味着如果客户端连接速度较慢,则可以在加载文件之前等待几秒钟.

但是,如果您将所有5个文件配置为单个捆绑包,则浏览器仅下载1个文件,即捆绑的文件.

此外,捆绑包被缩小(或捆绑包中的文件),因此您不仅可以节省下载脚本所需的时间,还可以节省下载大小.

在测试时,请注意在调试模式下没有区别,您需要处于发布模式或BundleConfig.csRegisterBundles方法底部的文件中启用bundle表的优化.

BundleTable.EnableOptimizations = true;
Run Code Online (Sandbox Code Playgroud)

您不必使用捆绑包,您仍然可以自由引用单个脚本/ css文件.它确实可以让您在需要时更轻松.

  • @IanCampbell:没有他们不显眼的验证将无法正常工作.如果这是您不需要或不想要的东西,那么您可以将其删除并在web.config中禁用.我猜它默认包含在内,因为它被认为是你最想要使用的功能.除了干净的DOM之外的好处,以及使用突出和不显眼的验证之间的确切区别在本文中得到了很好的解释:[**Brad Wilson:ASP.NET MVC 3**中不显眼的客户端验证](http:// bradwilson. typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html).我现在也更新了答案. (2认同)