asp.net-mvc - 我是否应该将可能已缓存在浏览器中的文件捆绑到 ASP.Net 中?

标签 asp.net-mvc optimization browser-cache asp.net-4.5 bundling-and-minification

许多代码示例以及 Visual Studio 2012 为新的 MVC 应用生成的 BundleConfig.cs 中的默认 RegisterBundles 方法,都包含类似这样的代码来添加常见 JavaScript 文件就像 jQuery 一样:

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

在一定比例的情况下,用户的浏览器的缓存中已经有这些常见文件。因此,等待通过捆绑再次下载文件似乎很浪费。

除非浏览器能够识别出捆绑文件(可能与其他文件连接并缩小)已经存在,否则这种捆绑的使用似乎根本不会加快速度,反而会导致不必要的延迟。

或者我在这里遗漏了什么?也许“通用”文件(jQuery 等)已经被缓存的概率很低?

最佳答案

“用户的浏览器缓存中已包含这些常见文件”

不正确。您正在引用您的本地副本,因此只有当他们之前访问过您的网站时它才会出现在缓存中...并且如果您之前没有使用捆绑,那么不会,它不会被缓存。不过,在第一次下载后,它会保持缓存状态,直到您更改脚本。

如果您想引用用户可能已缓存的版本,那么您可以使用 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> 

关于asp.net-mvc - 我是否应该将可能已缓存在浏览器中的文件捆绑到 ASP.Net 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965429/

相关文章:

jquery - JSON Post 调用错误函数

c# - 如何获取DeleteUrlCacheEntry()错误代码? (或者有关为什么特定删除不起作用的其他信息)?

c# - asp .net mvc 中的路由

jquery - 如何在我的网站上可靠地预加载和缓存我的 ajax 加载图像?

javascript - getJSON 类型错误 e 未定义

javascript - 如何处理作为 ES6 模块导入的 JavaScript 文件的缓存

php - file_get_contents() 返回缓存的页面

c - GCC double 浮点运算的特殊优化选项

php - 将一个查询分成四个以避免大量连接?

regex - 优化一个巨大的 "OR"模式