簡體   English   中英

強制瀏覽器僅在更改后才重新加載css / js

[英]Forcing the browser to reload css/js only if they have changed

關於我的問題,有很多關於SO的問題和答案[我希望瀏覽器永遠緩存js / css。 在新發行版中,如果某些js / css文件已更新,則瀏覽器應重新加載並緩存它們。]

這個解決方案對我來說似乎最合適: 什么是強制瀏覽器重新加載緩存的CSS / JS文件的優雅方法?

但是,只有一件事我無法弄清楚。 該解決方案利用了last_modified_time。 但是,我不允許使用它。 我需要使用其他機制。

有什么選擇? 是否有可能在構建過程中預先計算版本並通過構建腳本在jsps中更新(替換)它們(在部署之前,這樣就不會在運行時計算版本號)? 為此目的有任何現有工具嗎? 我使用Java / Jsp。

我們總是用

file.css?[deploytimestamp]

這樣,將為客戶端的每個部署緩存CSS文件。 我們的小型javascript也是如此。 這是您的選擇嗎?

這可能不是最好的方法,但這就是我現在正在做的事情:

  1. 我所有的js / css都有一個[source control = svn]修訂版號
  2. 我的jsp中的引用類似於/ foo / path1 / path2 / xyz000000 / foo。
  3. 構建步驟1-生成css | js文件及其修訂號的映射
  4. 構建步驟2-用svn版本的哈希值替換jsps中的xyz000000引用
  5. url重寫器中的規則用於定向所有/ foo / path1 / path2 / xyz <767678> / foo。 到/foo/path1/path2/foo。[js|css]
  6. 無限緩存css | js文件
  7. 只要有提交,修訂號就會更改,.jsp中的引用也會更改

部署后為每個css文件生成一個md5-hash。 使用此哈希代替CSS網址中的時間戳。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM