2013-01-24 39 views
1

我試圖確定緩存我的JavaScript和CSS文件的最佳方式。可靠的文件緩存

有這樣做的幾種方法:

  1. 使用DateExpiresCache-Control
  2. 使用ETag
  3. 緩存永遠和更改文件名時,文件更改
  4. 追加HTML格式的文件名查詢字符串,最後一個模式時間或文件內容的MD5

我的印象是最後一個方法(4)是最可靠的,會導致最少的不必要的請求,但我的朋友剛剛告訴我,有時查詢字符串方法是不可靠的,你實際上需要改變文件名。

是否有任何缺點將HTTP標頭永久設置爲高速緩存,並在最後一次編碼時間使用查詢字符串,或者是否有其他方法更有利的情況?

回答

1

我是方法4的忠實粉絲,但我使用會話Id。因此,進入我的網站的用戶將在每個會話中加載一次(如果訪問者保持非活動狀態超過20分鐘或者他關閉了瀏覽器窗口,則會話通常會死亡)。

在Asp.net,我使用的語法:

<script src="js/DetalhesCurso.js?<%=Session.SessionID%>"></script> 
+0

爲什麼在上次mod時間使用會話ID?每次他們回到網站時,他們都會要求文件,而不是隻在文件發生變化時。 – mpen

+0

這樣做相對安全,並且在服務器上並不沉重;你對長時間的腳本緩存感到舒服,這總是很痛苦的...... –

1

你的第三種方法是最可靠的。 Some CDNs/proxies ignore the query string altogether, and just serve the same cached file regardless of the query string value

AmazonAzure支持它,但其他人可能不支持。

請注意,在方法#3中您不需要實際上必須更新文件名本身。您可以使用一些URL重寫來始終獲取相同的文件。你只需要更新你的HTML。

+0

所以(4)在使用CDN時僅僅是不可靠的?我認爲這取決於*瀏覽器*在請求文件時認爲它改變了?如果Expires頭部設置正確,瀏覽器甚至不會請求它? – mpen

+0

@Mark - True,但是當您更改查詢字符串並且瀏覽器* does *請求新副本時,CDN可能會提供緩存。此外,這與您是否親自使用CDN /代理無關。它可能是一些緩存,無論是由ISP或本地網絡或其他... –