2017-01-06 更新
在 BundleCollection 的構造函數中添加了 3種默認規則
public BundleCollection() { BundleCollection.AddDefaultFileExtensionReplacements(this.FileExtensionReplacementList); //文件擴展名替換規則 BundleCollection.AddDefaultFileOrderings(this.FileSetOrderList);//排序規則 BundleCollection.AddDefaultIgnorePatterns(this.IgnoreList); //忽略規則 }
啟用合並壓縮功能后會忽略 *.intellisense.js ,*-vsdoc.js, *.min.js, *.min.css ,所以你在BundleConfig 配置了 *.min.js 是不會加載的。
使用 Bundle 可以將多個 JS文件或 CSS 文件合並成一個文件,並且壓縮。這樣可減少瀏覽器需下載多個文件的請求時間,同時通過移除JS/CSS文件案中空白、批注及修改JavaScript內部函數、變量名稱的壓縮手法,能有效縮小文件案體積,提高傳輸效率,提高使用者的瀏覽體驗。
基本使用
Global.asax
protected void Application_Start() { BundleConfig.RegisterBundles(BundleTable.Bundles); }
BundleConfig
public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js")); bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( "~/Scripts/bootstrap.js", "~/Scripts/respond.js")); }
視圖
@Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap")
啟用Bundle(合並壓縮)的2種方式
-
在
BundleConfig
中RegisterBundles
方法添加以下代碼public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js")); // 啟用合並壓縮 BundleTable.EnableOptimizations = true; }
-
打開
web.config
文件,設置編譯的debug=false
<system.web> <compilation debug="false" targetFramework="4.5" /> </system.web>
變化效果
合並之后減少了請求的數量,JS文件和CSS文件大小都減少了,提高了頁面的加載速度。
注意事項
-
合並壓縮后的文件默認緩存一年。如果你重復打開網頁,並且配置的文件也沒有做修改的情況下,服務器會返回一個 HTTP 304 的狀態碼,這樣瀏覽器會加載緩存中的文件。
-
圖片路徑問題,將多個CSS合並在一起后,有的時候會導致圖片加載失敗的情況
解決方法:圖片使用絕對路徑
-
在
BundleConfig
配置中配置的壓縮的文件是 a.js (未壓縮版本) ,並且在相同目錄中存在 a.min.js 文件。當你修改了 a.js 文件后,希望合並壓縮后的 JS 文件也包含修改后的內容,然而並非我們所希望的那樣,壓縮后的 JS 文件還是引用了a.min.js 中的內容,之前修改的並沒有出現在壓縮的 JS 文件中。同理,CSS也是如此。