【问题标题】:ASP MVC. Some users get old scripts, despite that we use bundlesASP MVC。尽管我们使用捆绑包,但一些用户得到了旧脚本
【发布时间】:2017-02-14 13:52:46
【问题描述】:

我们有一个 ASP MVC 5 应用程序。我们使用默认启用优化的捆绑包。但是我们已经多次从用户那里听到,他们得到错误,我们认为这是由旧版本的用户脚本引起的。他们的浏览器以某种方式从缓存中获取脚本,尽管事实上我们已经编辑了应该更新的脚本文件和包。问题最糟糕的部分是我们无法模仿或重现这个问题。我们不知道怎么做。我们已经尝试对脚本进行测试更改,例如添加一些“console.log('test')”行,以便查看浏览器是否采用缓存版本,但一切正常,@ 末尾的哈希987654321@ 已更改,浏览器从第一次开始采用最新版本。我应该提到,我们的网站是一个单页应用程序。不知道,也许它与问题有某种关系。 你有遇到过这样的问题吗?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

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

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

    【讨论】:

    • 我们没有在任何地方使用OutputCache。我在几个浏览器中检查了“脚本 URI 末尾的查询字符串未更新”场景,一切正常,更新正常。如果有什么变化,我会阅读有关缓存清单和写入的信息
    • 嗯,你已经说过它对来说很好用。受影响的用户在受到影响时,由于某种原因没有获得更新的 HTML。不幸的是,由于短暂的性质,这样的事情通常很难追踪或解释。您可以查看 HTML 文档的发送无缓存标头。这将导致它始终被请求,即使它可以被临时缓存,但至少它可能会阻止它在不应该被缓存时被缓存(参见:stackoverflow.com/questions/49547/…)。
    • 但这很奇怪,因为我们用我们的用户使用的相同浏览器进行了测试(一些用户来自我们的非技术团队)。我已经读过关于 no-cache 的文章,但这不适合我们 :( 我们的页面有几兆字节,我们不希望用户每次都下载它们
    • 嘘。几兆字节的 HTML 文档?如果确实如此,您需要考虑其中的一些因素。您可以在外部加载模板等。您的主文档应该只是一个将所有内容连接起来的骨架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多