【问题标题】:How to prevent browser from loading js from memory cache by range?如何防止浏览器按范围从内存缓存中加载js?
【发布时间】:2019-09-25 18:06:39
【问题描述】:

我昨晚在 Chrome 中打开了我的网站,然后关闭了该标签,但没有关闭浏览器。今天我无法在新选项卡中打开我的网站,因为 jQuery(不使用 CDN)遇到语法错误:输入意外结束。

无论我刷新多少次,我的网站都会出现此错误。但是硬刷新后错误没有再次发生。

这个问题最近几个月发生了很多次。

我检查了 Chrome devtool,它说我的 jquery.min.js 是从内存缓存中加载的。而且它不是一个完整的文件,只包含 jquery 库的一部分。这就是我出现语法错误的原因。

我从谷歌做了一些研究:

内存缓存的生命周期依附于渲染进程的生命周期,大致对应一个tab。

所以如果我创建一个新标签页来访问我的网站,按理说,jQuery 不应该从内存缓存中加载。

如果我在新标签页中访问网站,我希望浏览器不会再次从内存中加载我的文件。

我可以做些什么来找到问题的根源并解决它?

编辑(2019-05-13):

今天再次遇到这个错误,但幸运的是,我发现新点似乎对这个问题有帮助。

这是那个请求:

看到状态码是 206 Partial Content(来自内存缓存)。

而且我不知道为什么我的请求标头包含“范围”字段。

【问题讨论】:

    标签: google-chrome http caching http-status-codes http-content-range


    【解决方案1】:

    您无法在浏览器中检测到 newtab 并加载您的 jquery.min.js,但是您可以通过在 lib 的后缀中添加时间戳来避免从缓存中加载,如下所示。

    http://yoursite.com/lib/js/jquery.min.js?1557301884

    您可以通过两种方式实现这一目标

    • 案例:1如果您使用的是服务器端页面渲染方式(PHP、JSP),只需打印时间戳

    • 案例:2如果客户端意味着你必须做一些 javascript 的事情

    【讨论】:

    • 感谢您的帮助。但是我有这么多的库,我需要缓存它们,否则我的用户会等待太久。
    • 好的严,你分析错误“unexpected end of input”到底是哪个lib文件抛出的?
    • 是的,有时是 jquery.min.js,有时是 jquery-ui.min.js 或其他。这很奇怪。我认为关键是为什么即使我打开一个新标签页来访问,浏览器也会从内存缓存中加载库。
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多