利用HTTP Cache來最佳化網站

來源:互聯網
上載者:User

對於網站來說,速度是第一位的。使用者總是討厭等待,面對載入的Video和頁面,是非常糟糕的使用者體驗。所以如何利用Cache來最佳化網站,值得深入研究。

什麼是緩衝?

緩衝是一個到處都存在的用空間換時間的例子。通過使用多餘的空間,我們能夠擷取更快的速度。使用者在瀏覽網站的時候,瀏覽器能夠在本地儲存網站中的圖片或者其他檔案的副本,這樣使用者再次訪問該網站的時候,瀏覽器就不用再下載全部的檔案,減少了下載量意味著提高了頁面載入的速度。

下面這個圖例說明了瀏覽器和伺服器之間如何進行互動。

緩衝的缺點

緩衝非常有用,但是也帶來了一定的缺陷。當我們的網站發生了更新的時候,比如說Logo換了,瀏覽器本地仍儲存著舊版本的Logo,那麼瀏覽器如何來確定使用本地檔案還是使用伺服器上的新檔案?下面來介紹幾種判斷的方法。

Caching Method 1:Last-Modified

伺服器為了通知瀏覽器當前檔案的版本,會發送一個上次修改時間的標籤,例如:

Last-modified: Fri, 16 Mar 2007 04:00:25 GMT

File Contents (could be an image, HTML, CSS, Javascript...)

這樣瀏覽器就知道他收到的這個檔案建立時間,在後續的請求中,瀏覽器會按照下面的規則進行驗證:

1、瀏覽器:Hey,我需要logo.png這個檔案,如果是在  Fri, 16 Mar 2007 04:00:25 GMT 之後修改過的,請發給我。

2、伺服器:(檢查檔案的修改時間)

3、伺服器:Hey,這個檔案在那個時間之後沒有被修改過,你已經有最新的版本了。

4、瀏覽器:太好了,那我就顯示給使用者了。

在這種情況下,伺服器僅僅返回了一個304的回應標頭,減少了響應的資料量,提高了響應的速度。

Caching Method 2: ETag

通常情況下,通過修改時間來比較檔案是可行的。但是在一些特殊情況,例如伺服器的時鐘發生了錯誤,伺服器時鐘進行修改,夏時制DST到來後伺服器時間沒有及時更新,這些都會引起通過修改時間比較檔案版本的問題。

ETag可以用來解決這種問題。ETag是一個檔案的唯一標誌符。就像一個雜湊或者指紋,每個檔案都有一個單獨的標誌,只要這個檔案發生了改變,這個標誌就會發生變化。

伺服器返回ETag標籤:

ETag: ead145f

File Contents (could be an image, HTML, CSS, Javascript...)

接下來的訪問順序如所示:

1、瀏覽器:Hey,我需要Logo.png這個檔案,有沒有不匹配“ead145f”這個串的

2、伺服器:(檢查ETag...)

3、伺服器:Hey,我這裡的版本也是"ead145f",你已經是最新的版本了

4、瀏覽器:好,那就可以使用本機快取了

如同 Last-modified 一樣,ETag 解決了檔案版本比較的問題。只不過 ETag 的層級比 Last-Modified 高一些。

Caching Method 3:Expires

緩衝一個檔案,並且與伺服器確認版本的方式非常好,但是仍有一個缺點,我們必須串連伺服器。每次使用前都進行一次比較,這種方法很安全,但還不是最好的。我們可以使用 Expiration Date 來減少這種請求。

就像我們用牛奶來煮麥片一樣,每次喝之前都要檢查一下牛奶是否安全。但是如果我們知道牛奶的到期時間,我們就可以在到期之前,直接使用而不用再送去檢查。一旦超過了到期時間,我們再去買一份新的回來。伺服器返回的時候,會帶上這份資料的到期時間:

Expires: Tue, 20 Mar 2007 04:00:25 GMT

File Contents (could be an image, HTML, CSS, Javascript...)

這樣,在到期之前,我們就避免了和伺服器之間的串連。瀏覽器只需要自己判斷手中的材料是否到期就可以了,完全不需要增加伺服器的負擔。

Caching Method 4:Max-age

Expires的方法很好,但是我們每次都得算一個精確的時間。max-age 標籤可以讓我們更加容易的處理到期時間。我們只需要說,這份資料你只能用一個星期就可以了。

Max-age 使用秒來計量,下面是一些常用的單位:

1 days in seconds = 86400

1 week in seconds = 604800

1 month in seconds = 2629000

1 year in seconds = 31536000

額外的標籤

緩衝標籤永遠不會停止工作,但是有時候我們需要對已經緩衝的內容進行一些控制。

     Cache-control: public 表示緩衝的版本可以被Proxy 伺服器或者其他中間伺服器識別。

     Cache-control: private 意味著這個檔案對不同的使用者是不同的。只有使用者自己的瀏覽器能夠進行緩衝,公用的Proxy 伺服器不允許緩衝。

     Cache-control: no-cache 意味著檔案的內容不應當被緩衝。這在搜尋或者翻頁結果中非常有用,因為同樣的URL,對應的內容會發生變化。

注意:有些標籤只是在支援HTTP/1.1的瀏覽器上可用,如果想要瞭解更多,那麼推薦RFC2616以及Cache docs。

參考資料:

1、How to Optimize Your Site with HTTP Caching

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.