由於 stickeraction 的關係, 貼出去的貼紙讓我的主機流量暴增, 覺得這樣下去這個月的 100G 流量一定會爆, 所以對於貼出去的貼紙做了一些處理, 讓瀏覽器快取住, 多少可以減少一些流量, 其實一開始就該做了 XD 只是沒有意識到, 完全沒有經驗 XD 而且工作上也比較沒有流量的考量, 所以這次也學到了些東西。
原本在主機上就都有設定 lighttpd, 讓圖片, js 跟 css 檔產生 etag、expire 跟 last modified … 等的 HTTP headers, 利用瀏覽器的快取機制來減少主機的流量。 不過由 PHP 產生的圖片完全沒有 cache, 今天才改了一下程式, 加上一些 header, 來減少流量的支出, 不然這個月主機流量穩爆 ~”~
由於是輸出圖片, 所以 Content-Type 是一定要的, 然後還有 Content-Length, 比較重要的就是 Last-Modified 跟 ETag 這兩個 header 了, 送出這些 header 之後, 下次在瀏覽器在 request 同一張圖片時, 瀏覽器的 request header 就會送出 If-Modified-Since 跟 If-None-Match, 所以只要我們可以取得這兩個 header, 就可以判斷是否要在送出一次圖片, 如果這兩個 header 的數值都沒變, 那麼就可以告訴瀏覽器說不用在抓圖片了阿, 就丟個 304 Not Modified 的 header 回去就可以了, 就也不用再輸出圖片了。
由於我是用 lighttpd, 所以直接對 $_SERVER 變數來存取 headers , 如果是用 apache 的話可以看看 apache_request_headers 這個函式, 取得的變數名稱跟 header 一樣, 會比較直覺一點。
不過還有一些其他的 header, 像是 expire、max-age 跟 cache-control 這還要再研究一下 ~”~ 至少要可以控制哪時候過期嘛。
3 Comments until now
expires 的公用可以參考下面網頁喔..
http://developer.yahoo.com/performance/rules.html#expires
如果你沒有想統計貼紙被讀入的次數, 那就可以加一下 long expiration ~
@tempo
感謝 :p 其實本來一開始有統計貼紙被讀的次數, 後來因為機器太小, 就放棄了 XD 現在想要控制過期時間, 有其他用途 XD
[...] 20 req/s, 是我小看了 256slice 阿 ~”~ 不過應該也是因為加了之前做的, 讓圖片快取住的功能, 才能減少一些 request [...]
Add your Comment!