10

我正在 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

当我在生产服务器上运行它时,我从提琴手那里得到了整个 js 包的以下信息。

Bytes Received:  999,396    

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

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

4

2 回答 2

12

您在这里看到的很可能是来自FileExtensionReplacementList.

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

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

此文件选择“魔术”是通过FileExtensionReplacementListon控制的BundleCollection

在下一个版本 (RTM) 中,此列表中的粒度会更细一些,因为通常开发人员会希望确定何时应该使用它们,即

list.Add("min", OptimizationMode.WhenEnabled);
list.Add("debug", OptimizationMode.WhenDisabled);
于 2012-06-29T22:57:40.020 回答
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;      
于 2012-06-26T21:27:58.530 回答