是否缓存了.js文件?

时间:2011-09-24 09:18:28

标签: javascript caching google-chrome

我最近创建了一个网站,并对.js文件进行了更改,但是当我从FTP服务器删除.js文件并上传新文件时,新文件没有显示在网站上。我检查了网站上.js文件背后的源代码并且它不对,它显示旧文件的来源,而不是新文件的来源,即使旧文件已经消失。那是因为我的浏览器缓存了.js文件吗?

注意:我有这个来源

<meta http-equiv="cache-control" content="no-cache" />

在我的页面上阻止浏览器缓存我的页面,我知道它可以在HTML上工作,但是有了这个源,资源文件是否仍然被缓存?

我的其他页面上没有那行代码,只有我的主页,但.js文件仍然在其他页面上被引用,所以也许它是如何被缓存的?

此外,有没有办法检查您的浏览器缓存?我使用chrome。

编辑:我刚刚清除了我的浏览器缓存并重新加载了网站,文件正常运行,这意味着文件确实被缓存了。那么现在我的问题就变成了如何防止资源文件被缓存?

3 个答案:

答案 0 :(得分:15)

我不肯定no-cache meta标签是要走的路。它否定了所有缓存和类型,从而破坏了快速访问页面的目的。

此外,AFAIK,meta标记每页都有效,所以如果你有一个没有它的页面引用你的JS - 它将被缓存。

阻止JS文件(以及CSS)被缓存的广泛接受的方法是区分对它们的请求:

说,你有:

<script type=”text/JavaScript” src=”somescript.js″></script>

这个会缓存它(除非上面的元标记存在。

你想要的是在每个页面上加载上面的行看起来不同(URL-wise),如下所示:

<script type=”text/JavaScript” src=”somescript.js?some-randomly-generated-string″></script>

CSS也一样。

如果您正在使用某种JS网络 - 如果您已经为它提供了某种“无缓存”配置选项,那么它会照顾您。

当然,你也可以在纯JS中做到这一点。某种Date相关字符串是一种选择。


现在,通常情况下,您不希望否定所有缓存,因此这样做的方法是在您的URL中添加一个版本参数:

<script type=”text/JavaScript” src=”somescript.js?version=1.0.0″></script>

并从那里管理您的脚本。

修改

无需任何额外扩展。除非我非常错误,否则“Chrome开发者工具”内置于所有Chrome版本(肯定是测试版和开发版),可以通过按 Ctrl-Shift-I 进行访问。在“网络”标签中,您可以看到所有请求,内容和标题。

答案 1 :(得分:2)

是。资源仍然缓存。在我看来,避免这种情况的一个好习惯是以url?parameter = value方式对资源文件进行版本化。

例如,您应该将ulr设置为js或css文件,如下所示: &LT; ... src =“script.js?v = 1”... /&gt; &LT; ... href =“style.css?v = 1 .. /&gt; 当发生任何变化时,只需将v = 1更改为v = 2 ...

不会影响您的代码,但会让您的浏览器/代理等重新下载资源

答案 2 :(得分:0)

使用隐身镀铬实例(ctrl + shift + n)来检查来源,此模式不会使用任何缓存文件。有了这个,您可以检查您的文件是否在客户端缓存。

如果是在客户端,请确保您的服务器没有发送缓存控制标头以及JS文件。

如果它在服务器上,则存在大量可能性,可能您有反向代理,物理负载平衡器或其他类型的缓存机制。

修改(问题已更改):

使用this chrome extension检查与.js文件一起发送的标头。可能有一个缓存控制标头集,指示chrome缓存资源。

如果您使用的是apache,则可以使用.htaccess文件覆盖此行为。