2011-04-04 25 views
1

我見過其他方法,將版本號或MD5哈希附加到JS src查詢字符串。我該如何防止javascript緩存?查詢字符串方法不起作用

e.g. <script src='/script/v1/'></script> 

然而,我的JavaScript是仍然在多個瀏覽器(Chrome,火狐)得到緩存,當我把我的網站的新版本。

這似乎是,其他人已經解決了一個大問題,我似乎在做正確的事情。我怎樣才能使這個工作?

+0

你有什麼服務器? – 2011-04-04 16:54:46

+0

這些靜態文件由lighttpd提供 – marclar 2011-04-04 17:50:07

+1

然後我擔心這些文件會被緩存在服務器內存中..這是我在這個方向上的一些事情:http://redmine.lighttpd.net/wiki/1/Docs:ModMemCache – 2011-04-04 21:24:08

回答

7

我加入日誌消息,並確定查詢字符串方法工作。對不起,沒有必要的問題。

然而,在研究中,我發現值得一提的一些要點:

  1. 的一篇文章建議使用帶有附加當前時間的查詢字符串。你可能不想遵循這個建議,因爲你的文件將從永遠不會被緩存。使用源代碼控制版本號或MD5哈希會更好。
  2. 史蒂夫Souders的(的High Performance Web Sites成名)指出,某些Web代理緩存從未有任何查詢字符串。因此,版本號應嵌入到文件的路徑中,以確保您的文件在通過這些代理進行訪問時得到適當的緩存。 (http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
1

它會一直被緩存。儘管通過使用版本號(或任何其他不同的字符串),每次都會下載並使用新版本,而忽略前一版本。

http://thecrmgrid.wordpress.com/2007/10/22/prevent-caching-of-javascript-include-files-during-development/

http://davidwalsh.name/prevent-cache

+0

這就是我所說的 - 我這樣做,它不工作。我公司的每個人都經常遇到這種情況,我發誓我們不是愚蠢的。因此我的疑問和困惑。 – marclar 2011-04-04 17:47:20

+0

這是預期的行爲。儘管如此,通過在文件名後附加「?」,您可以強制下載(並緩存)新版本,避免瀏覽器緩存。 – tiagoboldt 2011-04-05 08:41:11

0

1)請確保JavaScript文件的響應報頭是正確的,包括過期,緩存控制等

2)你可能要追加該版本不是查詢參數而是文件名的一部分,例如page_v.2.js。您可以在構建時更改JavaScript文件名,例如,如果您使用的是Java。這就是我所做的。

+0

編輯我的問題,以表明這實際上是我們所做的 - 它不是查詢字符串參數,它是基於MD5哈希的唯一URL。 – marclar 2011-04-04 17:48:34

+0

將檢查到期和緩存控制設置。 – marclar 2011-04-04 17:49:14