2011-11-22 46 views
15

如果我決定使用javascript或css文件的last_modified_time,並在修改文件時使用它的unix時間戳作爲名稱中的關鍵字來緩存高速緩存。 以下兩種做法有什麼區別? 文件名是:my_script.js和時間戳是:1321951817使用Javascript版本來避免緩存,這些做法有所不同?

1 /文件被列爲: <script type="text/javascript" src="http://example.com/js/my_script.js?v=1321951817"></script> 因此,查詢字符串參數創建一個新的緩存每次的v改變。

2 /文件被包括作爲: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> 與每次修改的文件名改變,則重寫規則刪除時間戳和點所請求的URL,以my_script.js

3/UPDATE:ONE多個方法根據回答BELOW:文件被重新命名並且被包括爲: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> 文件名被改變並且使用NO REWRITE RULE。

問題:這兩種技術本質上是相同的,還是使用查詢字符串參數而不是直接文件名有什麼優點/缺點。

+1

您也可以使用方法2),而不使用文件名:'http:// example.com/v-1321951817/js/my_script.js'。 – user123444555621

回答

22

使用更新的查詢字符串是一個不好的解決方案。看看史蒂夫·蘇德斯對此有何評論:http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

理想的方法是重命名文件本身。 有些人更喜歡使用上次修改日期的時間戳,我認爲這是一個問題。

在現代網站開發中,您確實需要儘可能優化您的網頁,這意味着將css和javascript結合到單個文件中,並將其完成。 這意味着你在你的過程中引入了一個構建步驟,並且文件的最後修改時間總是在你最後的構建中。如果您將其設置爲您的文件名稱,那麼您實際上會一直在破壞用戶緩存,有時候您不需要。

我建議將文件重命名爲md5的內容總和。這樣,您可以隨時進行新建,但文件名只會在內容發生更改時纔會更改。這使您的文件名稱成爲內容的標識符。使用這個,你可以在你所有的靜態內容上設置一個遠期的過期標題,並且不再擔心它。

我可以推薦使用這個構建系統,因爲這個工作流程會變得很無聊。 我的公司剛剛開源,很多其他優化您的網頁的東西都是這樣做的:https://github.com/One-com/assetgraph-builder 還有很多其他的構建工具可以做到這一點。環顧四周,找到最適合您的開發設置的一個。

+0

「理想的方法是重命名文件本身。」爲什麼這會比重寫規則更好? – user123444555621

+3

不使用時間戳的另一個原因是,如果您要部署到多個服務器,最後修改日期可能會更改。使用該文件的MD5將確保它的一致性,無論您部署到何處或多少位置。 – TimE

6

你說的是你自己:在第二個例子中,你正在使用一個重寫規則,它用正則表達式檢查你正在加載的每一頁。

第一個只是愚弄瀏覽器認爲這是一個不同的文件。所以第一個是要走的路。

+1

我同意,第一個選項是要走的路。 – kamui

+0

@baklap同意你的觀點。但是,我的版本控制腳本將文件重命名,並且不使用重寫規則。那有什麼更好? – DhruvPathak