如何确保缓存的JavaScript和CSS文件得到重新加载?

7

请问如何确保用户在更新我的Web应用程序后获得最新版本的文件?

我应该在脚本和CSS文件的结尾添加动态字符串?version=random,并随着更新而更改它吗?还是有其他通用策略?

谢谢,Boda Cydo。

4个回答

4

是的,你提到的方法非常常见且可靠。

我个人使用文件的Subversion修订号,但你可以使用任何对你有意义的内容,甚至是文件的最后更新时间戳。

StackOverflow使用SVN修订号:

<script type="text/javascript" src="http://sstatic.net/so/js/master.js?v=6180">
</script> 

纯属好奇,这个 SVN 版本号怎么访问? - skaffman

4
原来,Squid不会缓存带有GET参数的文件。如果你想要Squid缓存该文件,你需要使用像script.2010-02-14.js这样的东西。
“但是哪个更好:mylogo.1.2.gif还是mylogo.gif?v=1.2?为了获得流行代理服务器的缓存效果,请避免使用查询字符串进行版本控制,而是通过修改文件名本身来进行版本控制。”
参考链接:http://webcache.googleusercontent.com/search?q=cache:JhDnwSNN-BEJ:www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/+http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/&cd=1&hl=en&ct=clnk&gl=us&client=opera&source=www.google.com

1

我通常在图片、CSS文件和Javascript文件的名称末尾加上?mtime,其中mtime是文件的最后修改时间。

你也可以使用版本号,每当文件更改时递增。这对于像jQuery这样有官方发布的库非常有效,但对于自己网站的文件而言,这种方法往往比所需的更繁琐。当然,在这种情况下仍然可以使用版本号,但我倾向于认为这是不必要的繁琐(需要维护的另一项内容)。


0

正如你所提到的,将查询字符串添加到样式表/脚本URL中是一种巧妙的技巧,可以控制缓存版本何时“失效”。

与其添加随机字符串,我通常使用文件系统中相关文件的最后修改日期。为了提高酷炫度,您可以将日期转换为数字形式,并在构建URL时以十六进制格式进行格式化 :-)

<script type="text/javascript" src="script.js?v=1750493C88"></script>
<link rel="stylesheet" type="text/css" href="style.css?v=1750493C88" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接