2013-03-25 38 views
1

我想通過確保所有的CSS/JS被瀏覽器緩存來加快我的網站加載時間,正如Google的PageSpeed工具所推薦的。但我想確保訪問者擁有最新的CSS/JS文件,如果它們已更新並且緩存現在包含舊代碼。如何爲我的CSS/JS設置緩存標題,但確保訪問者始終擁有最新版本?

從我迄今爲止的研究中,在CSS/JS網址的末尾添加類似「?459454」的內容非常受歡迎。但是不會強迫訪問者的瀏覽器每次都重新下載CSS/JS文件?

有沒有辦法設置瀏覽器緩存的文件,但確保瀏覽器知道緩存文件的更新版本?

+0

這個問題在這裏也被回答:http://stackoverflow.com/questions/118884/what-is-an-elegant-way-to-force-browsers-to-reload-cached-css-js-files – pedromanoel 2013-05-31 12:22:10

回答

1

就像你說的那樣,將查詢字符串附加到資源的URL,但只在內容不同時更改,或者在部署新版本時更改。

+0

這是我的猜想。我必須在部署新代碼之前手動更改附加字符串,並且如果該文件已更改,請僅更改附加字符串。我想我可以通過git after-build hooks以某種方式實現自動化? – 2013-03-25 21:32:09

+0

部署時,寫出標籤/ sha並使用它。或md5文件內容並使用它,它是自動的,但不知道如何高性能。 – catchamonkey 2013-03-25 21:54:53

2

版本號將工作,但你也可以附加文件的哈希的文件名與您的web框架或資產構建腳本:

<script src="script-5054a101c8b164cbfa570d97fe23cc0d.js"></script> 

這樣一來,一旦你的HTML改變以反映這個新版本,瀏覽器將只下載並緩存腳本的更新版本。

0

在CSS/JS網址末尾添加類似「?459454」的內容很受歡迎。但是不會強迫訪問者的瀏覽器每次都重新下載CSS/JS文件?

沒有也不會強迫他們每次下載,但是也有很多中間代理那裏它忽略緩存內容的查詢字符串的 - 因此很多工具(包括mod_pagespeed這確實自動URL重寫基於文件內容合併,以及許多其他很酷的技巧)將版本信息移動到路徑/文件名中。

如果你只有.htaccess類型的訪問,那麼你可以去掉版本信息直接映射到一個文件,或使用腳本404重定向器(但這可能只是一個好主意,如果你在後面緩存反向代理)。

3

如果您使用的是Apache,可以使用mod_pagespeed(以前由symcbean提到)自動執行此操作。

如果你還使用ModPagespeedLoadFromFile指令,它會工作得最好,因爲一旦它檢測到資源在磁盤上發生了變化,它將立即創建一個新的URL,但是如果沒有,它會正常工作(它將使用緩存到期時間當它獲取資源重寫它時返回)。

如果您使用的是nginx,您可以使用ngx_pagespeed。

如果您使用IIS,則可以使用IISpeed,它不是Google產品,我不知道它是完整的功能集。

相關問題