利用客戶端緩存對網(wǎng)站進(jìn)行優(yōu)化的原理分析第2/2頁
更新時(shí)間:2008年09月04日 11:06:16 作者:
你的網(wǎng)站在并發(fā)訪問很大并且無法承受壓力的情況下,你會(huì)選擇如何優(yōu)化?
復(fù)制代碼 代碼如下:
1 //默認(rèn)緩存的秒數(shù)
2 int secondsTime = 100;
3
4 //判斷最后修改時(shí)間是否在要求的時(shí)間內(nèi)
5 //如果服務(wù)器端的文件沒有被修改過,則返回狀態(tài)是304,內(nèi)容為空,這樣就節(jié)省了傳輸數(shù)據(jù)量。如果服務(wù)器端的文件被修改過,則返回和第一次請求時(shí)類似。
6 if (request.Headers["If-Modified-Since"] != null && TimeSpan.FromTicks(DateTime.Now.Ticks - DateTime.Parse(request.Headers["If-Modified-Since"]).Ticks).Seconds < secondsTime)
7 {
8 //測試代碼,在這里會(huì)發(fā)現(xiàn),當(dāng)瀏覽器返回304狀態(tài)時(shí),下面的日期并不會(huì)輸出
9 Response.Write(DateTime.Now);
10
11 response.StatusCode = 304;
12 response.Headers.Add("Content-Encoding", "gzip");
13 response.StatusDescription = "Not Modified";
14 }
15 else
16 {
17 //輸出當(dāng)前時(shí)間
18 Response.Write(DateTime.Now);
19
20 //設(shè)置客戶端緩存狀態(tài)
21 SetClientCaching(response, DateTime.Now);
22 }
23
24 #region SetClientCaching..
25 /// <summary>
26 /// 設(shè)置客戶端緩存狀態(tài)
27 /// </summary>
28 /// <param name="response"></param>
29 /// <param name="lastModified"></param>
30 private void SetClientCaching(HttpResponse response, DateTime lastModified)
31 {
32 response.Cache.SetETag(lastModified.Ticks.ToString());
33 response.Cache.SetLastModified(lastModified);
34 //public 以指定響應(yīng)能由客戶端和共享(代理)緩存進(jìn)行緩存。
35 response.Cache.SetCacheability(HttpCacheability.Public);
36 //是允許文檔在被視為陳舊之前存在的最長絕對時(shí)間。
37 response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));
38 //將緩存過期從絕對時(shí)間設(shè)置為可調(diào)時(shí)間
39 response.Cache.SetSlidingExpiration(true);
40 }
41 #endregion
如果你的緩存是基于文件的方式,如XML或http中的.ashx處理,也可以使用下面的基于文件方式的客戶端緩存:
復(fù)制代碼 代碼如下:
1 #region SetFileCaching..
2 /// <summary>
3 /// 基于文件方式設(shè)置客戶端緩存
4 /// </summary>
5 /// <param name="fileName"></param>
6 private void SetFileCaching(HttpResponse response, string fileName)
7 {
8 response.AddFileDependency(fileName);
9 //基于處理程序文件依賴項(xiàng)的時(shí)間戳設(shè)置 ETag HTTP 標(biāo)頭。
10 response.Cache.SetETagFromFileDependencies();
11 //基于處理程序文件依賴項(xiàng)的時(shí)間戳設(shè)置 Last-Modified HTTP 標(biāo)頭。
12 response.Cache.SetLastModifiedFromFileDependencies();
13 response.Cache.SetCacheability(HttpCacheability.Public);
14 response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));
15 response.Cache.SetSlidingExpiration(true);
16 }
17 #endregion
上圖所使用的工具是在IE下運(yùn)行的HttpWatchPro,在Firefox下可以使用FireBug+YSlow進(jìn)行測試.
YSlow是建立在FireBug基礎(chǔ)上運(yùn)行的一個(gè)小工具,它可以對你的網(wǎng)頁進(jìn)行分析為什么緩存,并給出評分和緩慢的原因.這個(gè)工具來自Yahoo的研發(fā)團(tuán)隊(duì),所以規(guī)則也是Yahoo制定的.
結(jié)論
我們已經(jīng)看了如何使用客戶端緩存減少帶寬和計(jì)算的方法,如前所述,如果能正確合理的利用各種不同的緩存,他們會(huì)給你帶來很多的好處.我希望本文已為你當(dāng)下或?qū)砘赪eb的項(xiàng)目提供了精神食糧,并正確地在底層利用Last-Modified和ETag響應(yīng)頭去優(yōu)化你的項(xiàng)目。
相關(guān)文章
PHP基于方差和標(biāo)準(zhǔn)差計(jì)算學(xué)生成績的穩(wěn)定性示例
這篇文章主要介紹了PHP基于方差和標(biāo)準(zhǔn)差計(jì)算學(xué)生成績的穩(wěn)定性操作,涉及PHP數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-07-07PHP計(jì)算個(gè)人所得稅示例【不使用速算扣除數(shù)】
這篇文章主要介紹了PHP計(jì)算個(gè)人所得稅,結(jié)合實(shí)例形式分析了php自定義函數(shù)不使用速算扣除數(shù)計(jì)算個(gè)人所得稅的相關(guān)操作技巧,涉及數(shù)組遍歷、數(shù)值運(yùn)算的簡單使用,需要的朋友可以參考下2018-03-03Discuz 5.0 中讀取純真IP數(shù)據(jù)庫函數(shù)分析
Discuz 5.0 中讀取純真IP數(shù)據(jù)庫函數(shù)分析...2007-03-03php基礎(chǔ)知識(shí):類與對象(2) 自動(dòng)加載對象
php基礎(chǔ)知識(shí):類與對象(2) 自動(dòng)加載對象...2006-12-12