4

有很多與我的問題相關的問題和答案[我希望瀏覽器永久緩存js/css。在一個新的版本,如果有些JS/CSS文件已經更新,瀏覽器應該重新加載並緩存]強制瀏覽器只有在更改後才能重新加載css/js

該解決方案似乎最適合我。 What is an elegant way to force browsers to reload cached CSS/JS files?

然而,有一件事我無法弄清楚。 解決方案使用last_modified_time。但是,我不能使用它。我需要使用其他一些機制。

有什麼選擇?是否有可能通過構建腳本在構建和更新(替換)jsps期間預先計算版本(部署之前,以便在運行時不計算版本號)?任何現有的工具爲此目的?我使用Java/Jsp。

+0

有點煩人的解決方案,但您可以將修訂號保存在文件中,並通過PHP將其動態添加到css文件名。但是每當你想強制用戶realod CSS時,你都需要編輯這個文件。 – neworld 2012-08-16 12:38:01

+1

「但是,我不能使用它」爲什麼? – GolezTrol 2012-08-16 12:39:39

+0

@GolezTrol因爲一些遺留的構建過程。部署中所有文件的上次修改時間更改無關緊要。 – 2012-08-16 12:42:02

回答

2

它可能不是最好的方式,但是這就是我現在所做的:

  1. 我的js的全部/ CSS有[源控制= SVN]版本號
  2. 參考我的JSP是/ foo/path1/path2/xyz000000/foo。
  3. 生成步驟1 - 生成地圖的CSS | JS文件及其版本號
  4. 生成步驟2 - 與SVN版本的哈希值替換的JSP xyz000000引用
  5. 在URL重寫規則指示所有/富/ path1/path2/xyz < 767678>/foo。到/foo/path1/path2/foo.[js|css]
  6. 無限緩存的CSS | js文件
  7. 每當有提交,版本號變化等做以.jsp
引用
2

我們總是用

file.css?[deploytimestamp] 

這樣的CSS文件緩存在客戶端每次部署。我們縮小的javascript也是一樣。這是你的選擇嗎?

+1

這是可能的,但我不希望js/css被重新加載,如果它沒有跨部署更改。 – 2012-08-16 12:44:14

+0

它不會。 'file.css?v = 1'會被緩存並且不會被重新載入,然後將其更改爲v = 2並且將'file.css?v = 2'緩存一次,然後從緩存中使用(直到再次更改版本...) ) – stackunderflow 2012-08-29 07:49:08

+0

@DuncanNZ - 但這不是David所建議的 - 他追加部署的時間戳而不是版本。 – UpTheCreek 2013-04-15 10:28:30

1

部署後生成每個css文件的md5哈希值。使用這個散列而不是css的url中的時間戳。

file.css?[hash of file.css contents] 

在部署後計算哈希值並將其存儲以獲得某些性能可能是明智之舉。您可以將它們存儲在數據庫中,甚至可以將它們存儲在網站代碼中包含的單獨文件中的PHP數組中。

相關問題