MVC 5 JavaScript Caching

MVC 5 JavaScript Caching

本文关键字:Caching JavaScript MVC      更新时间:2023-09-26

我正在编写一个MVC 5互联网应用程序,对JavaScript缓存(以及一般的缓存)有一个问题。

目前,当我更新视图中引用的JavaScript文件时,当我浏览到该视图时,会使用旧的JavaScript代码。如果我刷新浏览器,则会使用更新后的JavaScript代码。

这并不理想,因为用户可能经常浏览到具有旧JavaScript文件的视图,因此,该视图可能无法正确显示。

我目前引用的JavaScript文件如下:

@section Scripts{
    <script src="~/Scripts/filename.js"></script>
}

是否有控制缓存的web.config设置?有没有NuGet包可以帮助缓存?

我该如何解决这种情况?

MVC捆绑提供了一个解决此问题的方案。

要利用它,请将其添加到您的App_Start'BundleConfig.cs文件中:

bundles.Add(
    new ScriptBundle("~/bundles/filename")
        .Include("~/Scripts/filename.js"));

那么在你看来:

@section Scripts{
    @Scripts.Render("~/bundles/filename")
}

为什么这有帮助

Release构建中,捆绑包中的所有Javascript文件都将通过一个唯一的URL提供服务,该URL包含其内容的哈希。这意味着,如果Javascript文件在不同版本之间发生变化,那么捆绑包的URL就会发生变化,因此浏览器会下载新版本。

该捆绑包还将在未来一年内提供Expires HTTP标头,从而提高网站对未来用户访问/页面请求的响应速度。它可以安全地做到这一点,因为当捆绑包内容发生变化时,URL也会发生变化。

即使你在一个页面中只包含一个Javascript文件,我仍然会为它创建一个捆绑包——以利用缓存控制和缩小功能。

请参阅链接文章中关于"Bundle Caching"的部分,以获得更详细的解释。