2014-02-15 18 views
1

我看到許多網站,包括在他們的JavaScript和CSS外部資源,像這樣的事情:爲什麼有一些外部JavaScript文件?數字?

filename.js?v=3cc1b79c2abb 

和:

filename.css?v=7bbb71ecd5eb 

的 「?V = ...」 的事情在年底。 .. 這是什麼?而這對於什麼是有用的?

謝謝! Cheers :)

+1

爲了防止緩存,我認爲... – sinisake

+0

關鍵字:緩存斷路器。 – CBroe

+0

應該指出,代理服務器可能不喜歡這樣的查詢字符串。我更喜歡'/ path/to/file.js/t = 1234567'這個文件的修改時間。然後服務器使用'mod_rewrite'去除修改時間。這確保了與代理甚至舊版瀏覽器的兼容性。 –

回答

4

這些是「Cache Busting」的一種形式 - 它們強制瀏覽器下載最新版本的文件,而不是冒險從緩存中加載舊文件。

+1

+1 - 回答稍快,但您也輸入了與其他答案不同的連貫句子... –

0

這是您自己的版本/關鍵字v=7bbb71ecd5ebjscss,使用此之後,瀏覽器中將無法使用您的舊javascript和css緩存。

這意味着您的新的更新的CSS和JavaScript將被應用沒有任何緩存。

0

這是強制瀏覽器下載文件,而不是從緩存中獲取它。

例如,你有這樣的網址與CSS:styles.css?v=blablabla,但後來更改CSS和希望,必須立即看到這些變化(而不是等待,當瀏覽器的緩存將到期或強制用戶按按Ctrl + F5 )你將它改爲styles.css?v=otherblablabla之類的東西。瀏覽器將其視爲不同的網址,因此必須下載它。

這只是query string中的一個參數,並且由於url指向靜態資源,所以這些參數將被Web服務器忽略。 你也可以看到類似image.png?1392469113262的東西。這只是一個名爲1392469113262的參數,它沒有任何價值。 image.png是靜態資源,因此該參數將被服務器忽略。這些數字通常是一些時間戳,並且它通常是強制瀏覽器不緩存圖像(或任何其他資源)的最佳方式。

1

還有更深層次的東西 - 爲什麼我們需要緩存清除?我們不得不讓瀏覽器緩存資源文件。爲了達到這個目的,我們將最後修改日期設置爲一個非常古老的日期(比如1970年1月1日00:00:00.000)和到期日期。這兩件事將使瀏覽器緩存文件,以便不再從服務器請求它們。這非常有效。但是,更新應用程序時會導致問題。沒有資源會再次下載!要解決這個問題,我們配置構建工具以在資源URL末尾附加版本號唯一的版本號查詢字符串。通常使用構建時間戳或uuid或源版本庫版本號(對於像SVN這樣的版本控制工具,它爲每個提交提供唯一的版本號)作爲附加到資源URL末尾的版本號字符串。這會強制瀏覽器在應用程序更新時下載新版本。

相關問題