你的**在併發訪問很大並且無法承受壓力的情況下,你會選擇如何優化?
很 多人首先會想從伺服器快取方面著手對程式進行優化,許多不同的伺服器快取方式都有他們自己的特點,像我曾經參與的一些專案中,根據快取的命中率不同使用過 com+/enterprise libiary caching/windows服務,靜態檔案等方式的伺服器端快取和
1) 什麼是」last-modified」?
在瀏覽器第一次請求某乙個url時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有乙個last-modified的屬性標記此檔案在服務期端最後被修改的時間,格式類似這樣:
last-modified: fri, 12 may 2006 18:53:33 gmt
客戶端第二次請求此url時,根據 http 協議的規定,瀏覽器會向伺服器傳送 if-modified-since 報頭,詢問該時間之後檔案是否有被修改過:
if-modified-since: fri, 12 may 2006 18:53:33 gmt
如 果伺服器端的資源沒有變化,則自動返回 http 304 (not changed.)狀態碼,內容為空,這樣就節省了傳輸資料量。當伺服器端**發生改變或者重啟伺服器時,則重新發出資源,返回和第一次請求時類似。從而 保證不向客戶端重**出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。
2) 什麼是」etag」?
http 協議規格說明定義etag為「被請求變數的實體值」 (
參見 —— 章節 14.19)。 另一種說法是,etag是乙個可以與web資源關聯的記號(token)。典型的web資源可以乙個web頁,但也可能是json或xml文件。伺服器單獨負責判斷記號是什麼及其含義,並在http響應頭中將其傳送到客戶端,以下是伺服器端返回的格式:
etag: "50b1c1d4f775c61:df3"
客戶端的查詢更新格式是這樣的:
if-none-match: w/"50b1c1d4f775c61:df3"
聰 明的開發者會把last-modified 和etags請求的http報頭一起使用,這樣可利用客戶端(例如瀏覽器)的快取。因為伺服器首先產生 last-modified/etag標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回伺服器要求伺服器驗證其(客 戶端)快取。
過程如下:
1. 客戶端請求乙個頁面(a)。
2. 伺服器返回頁面a,並在給a加上乙個last-modified/etag。
3. 客戶端展現該頁面,並將頁面連同last-modified/etag一起快取。
4. 客戶再次請求頁面a,並將上次請求時伺服器返回的last-modified/etag一起傳遞給伺服器。
5. 伺服器檢查該last-modified或etag,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應304和乙個空的響應體。
下面的例子描述如何使用伺服器端**去操作客戶端快取: 1//
預設快取的秒數
2int
secondstime
=100;3
4//判斷最後修改時間是否在要求的時間內5//
如果伺服器端的檔案沒有被修改過,則返回狀態是304,內容為空,這樣就節省了傳輸資料量。如果伺服器端的檔案被修改過,則返回和第一次請求時類似。6if
(request.headers[
"if-modified-since"]
!=null
&×pan.fromticks(datetime.now.ticks
-datetime.parse(request.headers[
"if-modified-since
"]).ticks).seconds
<
secondstime)715
else
1623
24#region
setclientcaching..
25///
26///
設定客戶端快取狀態
如果你的快取是基於檔案的方式,如xml或http中的.ashx處理,也可以使用下面的基於檔案方式的客戶端快取:
1#region
setfilecaching..
2///
3///
基於檔案方式設定客戶端快取
使用後的效果如下圖所示:
上圖所使用的工具是在ie下執行的
httpwatchpro,在firefox下可以使用
firebug+
yslow進行測試.
yslow是建立在firebug基礎上執行的乙個小工具,它可以對你的網頁進行分析為什麼快取,並給出評分和緩慢的原因.這個工具來自yahoo的研發團隊,所以規則也是yahoo制定的.
我 們已經看了如何使用客戶端快取減少頻寬和計算的方法,如前所述,如果能正確合理的利用各種不同的快取,他們會給你帶來很多的好處.我希望本文已為你當下或 將來基於web的專案提供了精神食糧,並正確地在底層利用last- modified和etag響應頭去優化你的專案。
php http 快取 客戶端快取
expires 過期時間 cache control 響應頭資訊 max age 秒 快取過期時間 請求時間開始到過期時間的秒數 s maxage 秒 快取過期時間 public 標記認證內容能被快取,一般而言輸出是不能被快取的,no cache 無快取,表示直接讀取資料源,no store 強制快...
禁用客戶端快取
1 禁用客戶端快取 html asp response.expires 1 response.expiresabsolute now 1 response.cachecontrol no cache php header expires mon,26 jul 1997 05 00 00 gmt he...
客戶端快取 Client Cache
通常在伺服器端大家都已經做了很多快取的工作,asp.net cache也好memerycache也好卻總是忽略了客戶端快取。因為大家都知道不管哪個client都會快取已經訪問過的站點,但是瀏覽器快取時間都是短暫的,所以最好是自定義延長瀏覽器快取。這個時候就需要修改http頭資訊了,頭資訊中有個字段 ...