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 视图 - 获取 JavaScript 的虚拟路径 [重复]
Asp.Net MVC3:使用Javascript的客户端IP地址[重复]