为什么MVC4捆绑和缩小使我的文件更大?

时间:2012-06-26 14:18:32

标签: 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.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"));

我正在使用

将其加载到我的_Layout.cshtml中
@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    

这里发生了什么?大多数文件在某种程度上都是缩小的,但它的大小不应该是我的有效载荷的两倍。

其他详情 -     当我从本地开发框(fiddler报告大小为379kb)和服务器(fiddler报告大小为999kb)下载js文件并将它们放入kdiff时它们是二进制相同的。当我查看Chrome的开发者工具网络选项卡时,本地服务器下载379kb,但“Parser”值为975kb。什么是解析器值。是否有一些IIS压缩设置未在我的服务器中设置但在我的本地IIS服务器上?我注意到的唯一区别是我在我的开发机器上运行的IIS Express是8.0,其中服务器是IIS 7.5。

2 个答案:

答案 0 :(得分:12)

您在这里看到的最有可能是来自FileExtensionReplacementList的一些调试/释放'魔力'。

我们以jQuery为例。通常在您的脚本文件夹中,您会看到每个文件的两个副本,即jquery-1.6.2.jsjquery-1.6.2.min.js

默认情况下,优化将在min.js时使用debug=false版本,并在jquery-1.6.2.js时使用常规debug=true,因为这通常会使调试更容易(无捆绑且无缩小捆绑)。

此文件选择“魔力”由FileExtensionReplacementList上的BundleCollection控制。

在下一个版本(RTM)中,此列表中将有更多的粒度,因为通常开发人员希望在应该使用它们时进行定位,即

list.Add("min", OptimizationMode.WhenEnabled);
list.Add("debug", OptimizationMode.WhenDisabled);

答案 1 :(得分:4)

您可以使用捆绑选项,但缩小是通过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;