浏览器是否缓存内联Javascript,如果是,如何强制重新加载?

时间:2011-07-27 03:45:04

标签: javascript browser-cache

我们最近转向jQuery 1.6并遇到了attr()与prop()back-compat问题。在部署变更后的最初几个小时内一切都很好,然后开始为人们打破。我们很快发现了问题并更新了违规的JS,这是内联的。

不,我们遇到一些人仍有问题的情况。到目前为止,在每种情况下,我都可以通过告诉用户加载有问题的页面然后在浏览器中手动刷新它来让用户重新启动并运行。所以某些东西仍然必须缓存在某个地方。

但基本上只有两个潜在的罪魁祸首:首先,jQuery库本身,但是它在查询字符串中加载了版本号,所以我认为浏览器会在缓存中刷新它。二,内联javascript。是否有可能在浏览器中缓存它?

我们正在使用APC,apc.stat = 1因此它应该检测到PHP文件已更改。为了安全起见,我无论如何都要修改操作码缓存。

总而言之,我有两个问题:

  1. 加载jQuery时,某些浏览器是否会忽略查询字符串?
  2. 某些浏览器是否可以缓存旧版本的内联javascript?
  3. 任何其他想法也非常受欢迎。

    更新:在检查使用Firebug没有任何意外缓存的过程中,我发现了旧的jQuery库将加载的情况。这并不能解释为什么我们在部署网站之后和更新内联代码之前遇到了麻烦,但如果它解决了问题,我会接受它。

2 个答案:

答案 0 :(得分:7)

你的两个问题的答案都是否定的。 除非整个页面正在缓存。浏览器无法缓存文件的一部分,因为它必须下载它以了解它已缓存的部分,并且到那时它仍然全部下载它们。没有意义:))

您可以尝试在页面上发送一些标题,强制浏览器不要使用它的缓存副本。

答案 1 :(得分:0)

我会说你问题的答案是1)否和2)是的。

jQuery版本是不同的URL,因此除非您以某种方式直接编辑jQuery文件而不更改版本字符串,否则不存在缓存问题。

浏览器页面(包括内联javascript)将根据页面设置和浏览器设置(这是浏览器的操作)进行缓存。内联javascript不是单独缓存的,但如果网页被缓存,则内联javascript会缓存它。您为网页设置了哪种允许的缓存(在元标记中或通过http标题)?

如果需要,可以阅读有关网页缓存控制herehere主题的内容。

当您想要在浏览器中推出适用于缓存文件的升级时,规划/设计升级策略非常重要。如果做错了,可能会导致用户在缓存过期之前保留旧的内容/代码,或者更糟糕的结果是混合使用不起作用的旧/新内容/代码。

最安全的做法是在有新内容时更改源URL。然后,旧的缓存页面将无法获得新内容,因此您可以避免混合的可能性。例如,在Smugmug照片共享网站上,每当任何网站所有者将图像更新为新版本的图像时,图像URL中的版本号就会改变。然后,当显示该图像的源页面从Web服务器提供时,它包含新的图像URL,因此,无论图像的旧版本是否在浏览器缓存中,新版本图像都显示在用户。

更改所有页面的URL(尤其是顶级页面)显然并不总是切实可行,因此这些页面通常必须使用短缓存设置进行设置,因此浏览器不会长时间缓存它们,并且它们会定期刷新内容。