當我更新服務器上的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