Asp.net mvc 4 为什么MVC4捆绑和缩小会使我的文件变大?
我正在MVC4中实现绑定和缩小支持,它似乎使我的javascript文件比没有绑定/缩小的文件更大。我正在使用nuget中提供的最新版本(上的预发布选项)。我在RegisterBundles类中设置了以下包Asp.net mvc 4 为什么MVC4捆绑和缩小会使我的文件变大?,asp.net-mvc-4,asp.net-optimization,Asp.net Mvc 4,Asp.net Optimization,我正在MVC4中实现绑定和缩小支持,它似乎使我的javascript文件比没有绑定/缩小的文件更大。我正在使用nuget中提供的最新版本(上的预发布选项)。我在RegisterBundles类中设置了以下包 bundles.Add(new ScriptBundle("~/bundles/baseJS").Include( "~/Scripts/jquery-1.7.1.js", "~/Scripts/jquery.c
bundles.Add(new ScriptBundle("~/bundles/baseJS").Include(
"~/Scripts/jquery-1.7.1.js",
"~/Scripts/jquery.cookie.js",
"~/Scripts/jquery-ui-1.8.11.js",
"~/Scripts/bootstrap.js",
"~/Scripts/jquery.pjax.js",
"~/Scripts/kendo/2012.1.515/js/kendo.all.min.js",
"~/Scripts/jquery.jstree.js",
"~/Scripts/jquery.unobtrusive-ajax.js",
"~/Scripts/jquery.validate.js",
"~/Scripts/jquery.validate.unobtrusive.js",
"~/RIS.Scripts/PostJson.js"));
我正在使用
@Scripts.Render("~/bundles/baseJS")
当我在调试模式下为这些脚本添加在Fiddler中接收到的字节时,我得到以下结果
Name Size(bytes)
jquery 98013
jquery cookie 1455
jquery ui 124704
bootstrap 52378
pjax 8138
kendo.all 219751
jstree 55045
unobtrusive-ajax 2492
validate 13323
validate-unobtrusive 5138
postjson 634
Total 581071
当我在我的生产服务器上运行它时,我从fiddler那里得到了关于整个js包的以下信息
Bytes Received: 999,396
这是怎么回事?大多数文件在某种程度上都被缩小了,但它的大小不应该是我的有效负载的两倍
其他细节-
当我从本地dev box(fiddler报告大小为379kb)和服务器(fiddler报告大小为999kb)下载js文件并将它们放入kdiff时,它们是二进制相同的。当我查看Chrome的开发者工具网络选项卡时,本地服务器下载379kb,但“解析器”值是975kb。这个解析器值是什么。是否有某些IIS压缩设置未在我的服务器中设置,但在本地IIS服务器上设置?我注意到的唯一区别是,我在我的开发机器上运行的IIS Express是8.0,服务器是IIS 7.5。您可以使用绑定选项,但缩小是通过
BundleTable.EnableOptimizations=true
设置和一些尚未使用的“转换”选项来完成的。请参阅CssMinify和JsMinify
大致如下:
var b1 =new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-1.*");
b1.Transforms.Add(new JsMinify());
bundles.Add(b1);
-及-
BundleTable.EnableOptimizations = true;
您在这里看到的很可能是来自
FileExtensionReplacementList
的调试/发布“魔力”
让我们以jQuery为例。通常在脚本文件夹中,您会看到每个文件的两个副本,即jquery-1.6.2.js
和jquery-1.6.2.min.js
默认情况下,当debug=false
时,优化将使用min.js
版本,当debug=true
时,优化将使用常规的jquery-1.6.2.js
,因为这通常使调试更容易(无捆绑和捆绑的缩小)
此文件选择“魔术”通过BundleCollection
上的FileExtensionReplacementList
控制
在下一个版本(RTM)中,这个列表中会有更多的粒度,因为开发人员通常会希望确定何时应该使用这些粒度,即
list.Add("min", OptimizationMode.WhenEnabled);
list.Add("debug", OptimizationMode.WhenDisabled);
我早上第一件事就是试试……但为什么它会让它变大呢?这是真正让我困惑的部分。关于b1.transforms.Add(new JsMinify())的说法是正确的;这解决了我的问题,总下载量小于未缩小文件的总和。EnableOptimizations=true;只需关闭调试,并像在服务器上一样捆绑和缩小本地dev box上的所有内容;它将js文件捆绑并缩小到388447字节,这与我所期望的差不多。当我将它部署到我的服务器时,没有代码更改,它是999350字节。这怎么可能呢?据我所知,用于捆绑的内部逻辑考虑了调试和发布版本。它将根据此状态选择不同的文件。一个例子可能是发布版的.min.js,但是debug.continue的普通版本。。。跳回您关于“为什么它会使它更大”的问题,很可能是因为bundler添加了分离注释以帮助调试,我希望某种隔离逻辑可以减少脚本之间的任何冲突。我还没有深入挖掘,但这就是我“看到它”的方式。请记住,它仍然只是RC代码,可能有一些bug。注意:Hao是ASP.net捆绑/缩小的首席开发人员。如果我正确理解答案,我想我的问题是,为什么Jquery的缩小比ASP.net的要紧?