2012-06-26 50 views
10

我正在MVC4中實現綁定和縮小支持,看起來好像它使我的JavaScript文件比未捆綁/縮小的文件更大。我正在使用nuget中的最新版本(預發佈選項)。我在RegisterBundles類中設置了以下包。爲什麼MVC4捆綁和縮小使我的文件更大?

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") 

加載到我_Layout.cshtml當我加起來在提琴手收到在調試模式下這些腳本的字節數,我得到以下

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)和服務器(提琴手報告的大小999kb)下載js文件並將其放入kdiff時,它們是二進制相同的。當我查看Chrome的開發人員工具網絡選項卡時,本地服務器下載379kb,但「Parser」值爲975kb。這是什麼解析器值。難道是有一些IIS壓縮設置沒有在我的服務器上設置,但是在我的本地IIS服務器上?我注意到的唯一區別是,在我的開發機器上運行的IIS Express是8.0,服務器是IIS 7.5。

回答

12

最有可能的是你在這裏看到的是一些調試/發佈「魔力」是來自FileExtensionReplacementList

讓我們以jQuery爲例。通常在腳本文件夾中,您會看到每個文件的兩個副本,即jquery-1.6.2.jsjquery-1.6.2.min.js

默認的優化會使用min.js版本時debug=false,並且使用常規jquery-1.6.2.jsdebug=true,因爲通常這使得調試更容易(無捆綁,無捆綁的縮小)。

通過BundleCollection上的FileExtensionReplacementList來控制此文件選項'magic'。

在下一版本(RTM),將會有更多的粒度在這份名單中,因爲通常開發者想要的目標時,它們應該被使用,即

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

注意:Hao是ASP.NET捆綁/縮小的首席開發人員 – RickAndMSFT

+2

如果我正確理解答案,那麼我想我的問題是爲什麼Jquery的縮小比ASP.net更嚴格嗎? – PlTaylor

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;  
+0

我會先試試這個早上的事情......但爲什麼它會讓它更大?這是令我困惑的部分。 – PlTaylor

+0

你對b1.transforms.Add(新的JsMinify())是正確的;修復了我的問題,並且總下載量小於未縮小文件的總和。 EnableOptimizations = true;只需關閉調試程序並捆綁並縮小本地開發盒上的所有內容就像在服務器上一樣。 – PlTaylor

+0

好吧,當我用EnableOptimizations = true在我的開發箱上運行它時,它將js文件捆綁並縮小爲388,447字節,這與我的預期相當。當我將它部署到我的服務器上時,沒有代碼更改,它是999,350字節。怎麼會這樣? – PlTaylor