我站的速度一直以來都是比較引以自豪的,據(jù)alexa統(tǒng)計,我站平均打開時間是0.274秒,全球有98%的網(wǎng)站速度比我站慢。
Average Load Time for Webkaka.com
Very Fast (0.274 Seconds), 98% of sites are slower.
這雖然更多歸功于較好的服務器性能以及比較充足的帶寬,但在網(wǎng)站服務器優(yōu)化方面也是功不可沒的。
今天要說的是服務器性能優(yōu)化策略之啟用網(wǎng)頁緩存。
網(wǎng)頁緩存包含客戶端瀏覽器緩存和服務器緩存,這里說的是服務器端網(wǎng)頁的緩存,這是服務器性能優(yōu)化的策略之一。由于本站使用的是IIS服務器,因此Apache、lighttpd等不在本文內容談及之內。
為什么要啟用服務器緩存?
有人作了形象的說明,緩存就像是一個大箱子,以頁面緩存為例,在第一位客戶訪問具有緩存機制的頁面時,iis會將該頁面地址及內容記錄下來放入大箱子中,后續(xù)的客戶在訪問該頁面時,iis直接根據(jù)該地址調出頁面內容展現(xiàn)在客戶端。這樣減好了訪問服務器的操作,提高了效率。
動態(tài)內容頁面也能緩存
我以前一直以為,只有靜態(tài)的內容頁面可以緩存,后來經(jīng)過實驗,動態(tài)內容頁面也可以緩存的。比如webkaka的網(wǎng)站速度診斷首頁,有個最近測試列表,那10個網(wǎng)址是實時從測試列表里讀出來的,但是因采用了1小時的網(wǎng)頁緩存,也就是說,這個頁面的內容,只是每小時變化一次,而不是時時刻刻都去讀數(shù)據(jù)的。
動態(tài)頁面也緩存,這樣將大大減少對服務器的讀寫操作,對服務器起了保護的作用,同時,必將大大減少服務器內存和CPU的使用率,從而提高服務器的性能。
IIS設置網(wǎng)頁內容過期時間
在Google網(wǎng)站速度優(yōu)化建議里,有一條是“使用瀏覽器緩存”技術,這個其實不是什么高深的技術,我們在IIS里便可輕松設置。
如下圖
1. 在 IIS 管理器中,單擊“HTTP 頭”選項卡。
2. 選中“啟用內容過期”復選框。
3. 單擊“立即過期”、“此時間段后過期”或“過期時間”,然后在對應的框中輸入所需的過期信息。
4. 單擊“確定”。
如何檢測你的網(wǎng)站是否啟用了緩存?
你可以到卡卡網(wǎng)的網(wǎng)站速度診斷平臺,診斷你的網(wǎng)站,然后點擊“性能優(yōu)化”標簽,再點擊“使用瀏覽器緩存”項,便可知道了。
相關知識
我們在看網(wǎng)頁的header信息時,經(jīng)常看到這幾個參數(shù):Expires、Cache-Control、Last-Modified、ETag,它們是RFC 2616(HTTP/1.1)協(xié)議中和網(wǎng)頁緩存相關的幾個字段。前兩個用來控制緩存的失效日期,后兩個用來驗證網(wǎng)頁的有效性。要注意的是, HTTP/1.0有一個功能比較弱的緩存控制機制:Pragma,使用HTTP/1.0的緩存將忽略Expires和Cache-Control頭。
Expires
Expires字段聲明了一個網(wǎng)頁或URL地址不再被瀏覽器緩存的時間,一旦超過了這個時間,瀏覽器都應該聯(lián)系原始服務器。RFC告訴我們:“由于推斷的失效時間也許會降低語義透明度,應該被謹慎使用,同時我們鼓勵原始服務器盡可能提供確切的失效時間。”
Cache-Control
Cache-Control字段中可以聲明多些元素,例如no-cache, must-revalidate, max-age=0等。這些元素用來指明頁面被緩存最大時限,如何被緩存的,如何被轉換到另一個不同的媒介,以及如何被存放在持久媒介中的。但是任何一個 Cache-Control指令都不能保證隱私性或者數(shù)據(jù)的安全性。“private”和“no-store”指令可以為隱私性和安全性方面提供一些幫助,但是他們并不能用于替代身份驗證和加密。
Last-Modified
Last-Modified和ETag是條件請求(Conditional Request)相關的兩個字段。如果一個緩存收到了針對一個頁面的請求,它發(fā)送一個驗證請求詢問服務器頁面是否已經(jīng)更改,在HTTP頭里面帶上” ETag”和”If Modify Since”頭。服務器根據(jù)這些信息判斷是否有更新信息,如果沒有,就返回HTTP 304(NotModify);如果有更新,返回HTTP 200和更新的頁面內容,并且攜帶新的”ETag”和”LastModified”。
使用這個機制,能夠避免重復發(fā)送文件給瀏覽器,不過仍然會產(chǎn)生一個HTTP請求。
ETag
既然有了Last-Modified,為什么還要用ETag字段呢?因為如果在一秒鐘之內對一個文件進行兩次更改,Last-Modified就會不正確。因此,HTTP/1.1利用Entity Tag頭提供了更加嚴格的驗證。