處理 GZip 的 CSS cache

今天發現 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! 連斷行跟多餘的空白也都拿掉了,這樣的做法應該對傳輸效率會有大幅度的提升。

20060526_01.gif
(Yahoo! 的 HTML)


20060526_02.gif
(Google 的HTML)

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:

    感謝指正,馬上改。^^

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar