当我更新服务器上的css文件时,许多客户端浏览器将继续使用旧的缓存css文件加载页面一段时间。强制浏览器在更新后重新载入css
在搜索了很多帖子并将不同想法放在一起后,我想出了最简单,最便宜的方法。
凡有任何CSS文件被链接,追加href
与文件的最后修改日期的时间,像这样:
<link rel="stylesheet" type="text/css" href="main.css?t=<?=filemtime('main.css')?>" />
我使用CakePHP的,所以我在布局文件做是这样的:
<? $t = filemtime(CSS . 'main.css'); ?>
<?=$html->css("schedule.css?t={$t}") ?>
所以链接的css文件对最终的额外的标签,但它保持不变,只要文件没有被修改。这意味着浏览器可以像往常一样缓存它。然而,一旦文件被修改,链接将改变,并且浏览器不会错过节拍。
仍然使用这种方法,对于使用某些没有意图的东西,感觉有点脏。对于正在发送的“消息”是没有用的,因为消息的内容很重要,而不是识别它的存在。
这里是我的问题:
- 是否可以承认有客户看到修改后的HTML与浏览器缓存过时的样式表(或JavaScript为此事)的风险?
- 这是一个黑客或合法的解决方案?
- 有没有更好的解决方案?
对于第二个问题:不,它不是。事实上,它更像是成为一种惯例(如果还没有的话)。 – 2012-04-16 01:10:12
对于支持它的设备,您可以在清单文件上创建和管理时间(请参阅教程:http://www.html5rocks.com/en/tutorials/appcache/beginner/)。附加的时间戳被广泛使用,然而,可能是一个更好的解决方案。 – rjz 2012-04-16 01:11:50