MVC 5 JavaScript 缓存 [重复]

Posted

技术标签:

【中文标题】MVC 5 JavaScript 缓存 [重复]【英文标题】:MVC 5 JavaScript Caching [duplicate] 【发布时间】:2015-05-06 15:05:56 【问题描述】:

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

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

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

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

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

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

我该如何解决这种情况?

【问题讨论】:

【参考方案1】:

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

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

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

那么在你看来:

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

为什么会有帮助

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

该捆绑包还会在未来 1 年使用 Expires HTTP 标头提供服务 - 提高网站对未来用户访问/页面请求的响应速度。它可以安全地执行此操作,因为 URL 会随着捆绑内容的变化而变化。

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

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

【讨论】:

这对我不起作用。我所有的 js 文件都捆绑在一起,它仍在使用他缓存的“动态”js 文件。我不得不将它们从包中拉出来,并在查询字符串中附加一个时间戳 @user609926 您是否在发布或调试版本中看到了这种行为?默认情况下,在调试版本中捆绑是关闭的,因此您不会获得唯一的 URL 或缓存破坏。

以上是关于MVC 5 JavaScript 缓存 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net中MVC缓存详解

ASP.NET MVC 视图 - 获取 JavaScript 的虚拟路径 [重复]

Asp.Net MVC3:使用Javascript的客户端IP地址[重复]

spring-mvc 5 j_spring_security_check 404页面错误

ASP.NET MVC 5 缓存 CSS 和 JS 文件

forEach 在javascript中同时循环遍历两个数组[重复]