2

許多代碼示例,以及由Visual Studio 2012的一個新的MVC應用程序生成BundleConfig.cs默認RegisterBundles方法,包括這樣的代碼添加常見的JavaScript文件,如jQuery來捆綁:我應該將可能已經緩存在瀏覽器中的ASP.Net中的文件捆綁在一起嗎?

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
       "~/Scripts/jquery-{version}.js")); 

在一定病例的百分比,用戶的瀏覽器將在其緩存中具有這些公共文件。所以,等待通過捆綁再次下載文件似乎是浪費。

除非瀏覽器能夠識別捆綁文件(可能與其他文件連接並縮小)已經存在,那麼看起來捆綁的使用似乎不會加快速度,反而會造成不必要的延遲。

或者我在這裏錯過了什麼?也許「常用」文件(jQuery等)已被緩存的概率很低?

回答

1

「用戶的瀏覽器將已經在其高速緩存這些共同文件」

事實並非如此。您正在引用您的本地副本,因此它只會在緩存中(如果它們之前已經訪問過您的網站),並且如果您之前沒有使用綁定,則不會被緩存。第一次下載後,是的,它會保持緩存,直到你改變腳本。

如果您想引用用戶可能緩存的版本,那麼您可以使用CDN。下面的代碼是從ASP.NET Bundling and Minification

public static void RegisterBundles(BundleCollection bundles) 
{ 
    bundles.UseCdn = true; //enable CDN support 
    var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"; 
    bundles.Add(new ScriptBundle("~/bundles/jquery", 
       jqueryCdnPath).Include(
       "~/Scripts/jquery-{version}.js")); 
} 

然後回退,如果CDN失敗:

@Scripts.Render("~/bundles/jquery") 

<script type="text/javascript"> 
    if (typeof jQuery == 'undefined') { 
     var e = document.createElement('script'); 
     e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")'; 
     e.type = 'text/javascript'; 
     document.getElementsByTagName("head")[0].appendChild(e); 
    } 
</script> 
1

我不認爲這是浪費,單獨的縮小功能應該有助於提高客戶的反應。但它確實取決於您的Web應用程序中的js,css等。瀏覽器僅限於六個同時連接。因此,如果您的網頁有六個或更少的客戶端文件,則使用ScriptBundle可能沒有意義。但是由於大多數網站都有大量的javascript和css,ScriptBundle的縮小功能使其值得。這將大大減少發送給用戶的KB數量。你可以隨時禁用它,並查看這些文件爲你的應用程序加載了多少。

相關問題