2010-08-11 52 views
5

我在各種網站上看到開發人員如何通過指定類似於以下內容的查詢字符串來編輯他們的css/javascripts文件:如何在<HEAD>部分中對文件進行版本控制?

<head> 
    <link rel="stylesheet" href="css/style.css?v=1"> 
    <script src="js/helper.js?v=1"> 
</head> 

這是怎麼做到的?這是一個好習慣嗎?我一直在尋找,但顯然,我不是在尋找合適的條款。如果重要,我正在使用ASP.NET。

編輯::我剛注意到(通過Firebug)如果我「版本化」我的文件(?v = 1),它們將始終加載並始終覆蓋緩存。有辦法嗎?

提前致謝。

回答

4

它們沒有真正的版本。我們這樣做是因爲某些瀏覽器不會總是正確地請求樣式表(他們甚至不會檢查最後一次修改),所以爲了強制他們提出新的請求,可以在HTML文件中引用它的數字。這是一種黑客,但它的工作原理。

+1

這很有趣。你能詳細說明哪些瀏覽器有問題嗎?如果您使用電子標籤代替上次修改日期或與上次修改日期結合使用,您會得到相同的行爲嗎? – 2010-08-11 17:42:02

+0

這主要是一個緩存問題。如果瀏覽器下載'style.css',然後頁面稍後請求,瀏覽器很可能會使用它已經下載的版本。但是,如果它看到'style.css?v = 1'而不是'style.css',它會將其視爲另一個文件並下載新版本。 – 2010-08-11 17:44:32

+0

沒錯,但是當從服務器請求文件時,瀏覽器應該提供存儲在其緩存中的文件的最後修改日期和/或電子標籤。這使服務器有機會返回HTTP304(未修改)而不是整個文件。我想知道更多關於何時和爲什麼這個機制失敗。 – 2010-08-11 17:47:26

2

這有助於在需要時進行緩存,並在您不需要時強制下載。文件基於它們的路徑被緩存。所以如果路徑相同,那麼它可以從緩存中取出。但是,如果它們不同,因此是新版本,那麼它不會使用緩存,而是應該取出新文件。至少我是這樣使用的。

1

他們這樣做是爲了讓瀏覽器的緩存更加可靠。您可以手動添加版本,並在每次更改文件時增加該版本。這種方式瀏覽器認爲它有一個新的文件,並下載它肯定。

我不知道如何在ASP.NET中自動執行此操作,例如Ruby on Rails檢查文件上最後更改的時間戳,並將其作爲版本號添加到文件中。我相信你可以在ASP.NET中做類似的事情。

+0

我只注意到(通過Firebug),如果我「版本」我的文件(?v = 1),他們將永遠加載,並將始終覆蓋緩存。有沒有辦法解決這個問題? – rebelliard 2010-08-11 20:46:04

相關問題