今天發現 Apache 啟用了 Gzip 或 Deflate 之後,在 IE 會發生 css 檔案一直丟 cache 出來,而不去讀取目前 css 檔案的狀況。
也就是下面這種語法會沒辦法讀到更新過後的檔案:
<link rel=”stylesheet” type=”text/css” href=”common.css” />
解法的方式可以參照這篇的做法,動態產生日期碼來解決:
<link rel=”stylesheet” type=”text/css” href=”common.css?time=20060408.css” />
不過我個人的解法傾向於直接把 CSS 用 <style> </style> 放在 HTML 裡面,目前 Yahoo! 跟 Google 不論 css 或 javascript 皆不採用外部載入的方式,Yahoo! 連斷行跟多餘的空白也都拿掉了,這樣的做法應該對傳輸效率會有大幅度的提升。
10 comments On 處理 GZip 的 CSS cache
我用 mod_deflate 沒這問題ㄝ, 會不會設定或是特定版本或伺服器環境造成的問提.
archangel:
的確有可能。不過最近實在太忙了,也沒時間找原因了,先解決再說囉。^^
缺點是和內嵌式圖片一樣…不能共用之類的|||
畢竟是寫死在HTML裡面~ 😛 這樣傳輸反而差吧??
(應該是想直接替換+動態考量就會這樣寫~)
then~ 上面那個日期的給了一個很好的想法~
like href=”common.css?update=20060408.css”
數字產生用資料庫或是記憶體中最後一次的更新代號
而不是動態產生的日期值~
😛 這樣應該就可以共用+更新時自動替換了吧?? 不過要更新數值罷了~
JellyCatz:
如果善用 ASP 或 PHP 的 include 就可以達到共用的功能囉。^^
cc~ 寫的那方式是更新後~ 發覺網址不一樣而重取檔案(UpdateTime)~
而不是就主題範例所提的~ 每次都要重取檔案(nowTime)~
(CSS cahce的重複使用&兼具更新的目的)~
common.css?update=20060408.css
?後面跟參數的是GET傳值~ 得到的是實體common.css檔~ 所以傳值只是用來偽裝罷了~ 連include都可以省掉哩~
JSP也有include 😛
[而JSP也有server變數可用~ UpdateTime可存在裡面:) 就不會花資料庫or檔案資源]
我是在猜想是否是因為某些 mod 模組設定互相衝突, 先前我也發生過因為其中一個模組 ( mod_security ) 的設定問題, 導致很多程式都無法正常運作.
所以我想 Neo 可能可以花少許的時間, 先把所有的模組都暫時關閉, 再一個一個開啟. 這樣或許比較容易找出問題所在. ^^
縮行可以減少很多 K , 不過 css 跟 index 放在一起是怕外部連結的 server 掛了把yahoo 首頁搞垮.
yahoo 這種入口首頁幾乎都是動態轉靜態
所以轉靜態時當然把 css include 進來一起轉比較優啊
例如:樓上朋友提到的 cache 問題
再者,yahoo 這種入口網站跟不需要擔心 “頻寬” 問題
他只擔心完整度與穩定性 😀
“處理 GZip 的 CSS cahce”
標題有點小錯,應該是 “CSS Cache”
SpongeBob:
感謝指正,馬上改。^^