ASP MVC。尽管我们使用捆绑包,但有些用户会使用旧脚本

时间:2017-02-14 13:52:46

标签: asp.net asp.net-mvc

我们有一个ASP MVC 5应用程序。我们使用默认启用优化的捆绑包。但是我们多次听到用户说他们会收到错误,我们认为这些错误是由旧版本的用户脚本引起的。他们的浏览器以某种方式从缓存中获取脚本,尽管我们编辑了脚本文件和包应该更新。问题的最糟糕部分是我们无法模仿或重现这个问题。我们不知道怎么做。我们已经尝试对脚本进行测试更改,例如添加一些&#34; console.log(&#39; test&#39;)&#34;为了看到,如果浏览器采用缓存版本,但一切正常,<script src="....?v='hash'">末尾的哈希值发生了变化,浏览器从第一次开始采用了最新版本。我应该提一下,我们的网站是单页面应用程序。不知道,也许它与这个问题有某种关系。 你遇到过这种问题吗?

1 个答案:

答案 0 :(得分:1)

这里没有足够的信息来给出明确的答案。捆绑器检测文件中的更改,并将重新生成捆绑包以及该捆绑包的链接,其中包含更新的查询字符串参数。由于查询字符串是URI的一部分,此时它被认为是完全不同的资源,浏览器应该再次获取它,因为从技术上讲,没有可用的缓存。 发生的唯一合乎逻辑的原因是,没有更新包含指向该包的链接的HTML。如果您使用OutputCache或以其他方式缓存HTML文档,则会发生这种情况。如果客户端的浏览器正在积极地缓存HTML文档,它也可以发生。遗憾的是,您无法做到这一点,因为客户端浏览器最终可以控制缓存内容或缓存内容的时间。

那就是说,鉴于这是一个单页应用程序,它很可能还包括cache manifest。此清单通常包含HTML文件本身,并且浏览器不会重新提取清单中的任何文件,除非清单本身已更新。