2012-11-12 103 views
1

我有javascript文件麻煩的最新版瀏覽器被緩存,即使我用緩存只有JavaScript文件

FileETag MTime Size 

htaccess的檢查修改的時間和大小,看它是否是最新版本。我目前包括JavaScript文件,像這樣:

<script src="/code.js" type="text/javascript"></script> 

我試圖SVN版本信息添加到該文件調用,像這樣:

<script src="/code.js?svn=123" type="text/javascript"></script> 

,但我無法找到一個防彈的方法來做到這一點,因爲我無法通過文件名(任何建議)獲得修訂,即使我添加了修訂版,HTML也正在被Smarty預編譯和緩存。

所以我想過使用模板沒有緩存塊,但我還沒有嘗試過這種方法。由於文件只編譯一次,會有什麼不同嗎?

所以基本上我只是收集如何強制瀏覽器只緩存最新版本的文件的想法。理想的解決方案是通過htaccess實際上工作,不像FileETag,因爲使用它,你總是必須按CTRL + F5才能獲得最新版本。

回答

2

將緩存驅動程序添加到文件路徑中是最好的方法。你可以做到這一點通過?辦法像你在這裏,或將其添加到路徑,如文件:後/static/123/code.js

您添加到期集流器10年後的未來,你是好去。所以你的問題是如何生成網址中的數字。也許你可以改變你的部署腳本,以便在部署時取代該數字,這樣你就不需要關心版本號

另一個想法是計算js文件的md5哈希,並將其用於路徑。

+0

我沒有想到散列文件內容的唯一標識符,好想法! – donkapone

+1

雖然?方法迫使某些瀏覽器(至少Firefox)總是向服務器發送請求,而不管截止日期如何。通常會有一個短暫的NOT MODIFIED迴應,但仍然存在。另外,使用上次修改的日期作爲緩存攔截器已足夠,並且比MD5更容易獲取。 –

+0

好的想法以及修改的日期ID,但我經常部署,部署更改所有的文件,所以顛覆​​號碼添加或內容散列仍然是我的方式,否則我會毀了每個用戶的'每次部署時緩存。現在的問題是,如何通過htaccess或其他方式將哈希添加到請求中,而不是通過代碼?這是否可能? – donkapone