MVC 5 JavaScript缓存

use*_*648 5 javascript caching web-config asp.net-mvc-5

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

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

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

我目前正在引用JavaScript文件,如下所示:

@section Scripts{
    <script src="~/Scripts/filename.js"></script>
}
Run Code Online (Sandbox Code Playgroud)

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

我该如何解决这种情况?

Ros*_*Nab 5

MVC Bundling为这个问题提供了解决方案。

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

bundles.Add(
    new ScriptBundle("~/bundles/filename")
        .Include("~/Scripts/filename.js"));
Run Code Online (Sandbox Code Playgroud)

那么在你看来:

@section Scripts{
    @Scripts.Render("~/bundles/filename")
}
Run Code Online (Sandbox Code Playgroud)

为什么这有帮助

Release构建中,捆绑包中的所有 Javascript 文件都将从包含其内容散列的唯一 URL 提供。这意味着如果 Javascript 文件在构建之间发生变化,那么捆绑包的 URL 将发生变化,因此浏览器将下载新版本。

该捆绑包还将在未来 1 年提供一个 Expires HTTP 标头 - 提高站点对未来用户访问/页面请求的响应速度。它可以安全地执行此操作,因为当包内容更改时 URL 也会更改。

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

有关更详细的说明,请参阅链接文章中有关“捆绑缓存”的部分。