青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

We do not always find visible happiness in proportion to visible virtue

夢幻白樺林

SHARE

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  14 Posts :: 58 Stories :: 62 Comments :: 0 Trackbacks

公告

常用鏈接

留言簿(5)

搜索

  •  

最新隨筆

最新評論

閱讀排行榜

介紹

        你的網站在并發訪問很大并且無法承受壓力的情況下,你會選擇如何優化? 
        很多人首先會想從服務器緩存方面著手對程序進行優化,許多不同的服務器緩存 方式都有他們自己的特點,像我曾經參與的一些項目中,根據緩存的命中率不同使用過 Com+/Enterprise Libiary Caching/Windows服務,靜態文件等方式的服務器端緩存和 HTTP Compression技 術,但客戶端緩存往往卻被人們忽略了,即使服務器的緩存讓你的頁面訪問起來非常地快,但她依然需要依賴瀏覽器下載并輸出,而當你加入客戶端緩存時,會給你 帶來非常多的好處.因為她可以對站點中訪問最頻繁的頁進行緩存充分地提高 Web 服務器的吞吐量(通常以每秒的請求數計算)以提升應用程序性能和可伸縮性。 
        一個在線購物調查顯示,大多數人愿意去商店排隊,但在在線購物時卻不愿意等待。Websense調查公司稱多達70%的上網者表示不愿意在頁面讀取上超過10秒鐘。超過70%的人會因為中途速度過慢而取消當前的訂單。

      基礎知識

        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" 

        如果ETag沒改變,則返回狀態304然后不返回,這也和Last-Modified一樣。本人測試Etag主要在斷點下載時比較有用。
        

      Last-Modified和Etags如何幫助提高性能?

        聰明的開發者會把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和一個空的響應體。


      示例代碼

        下面的例子描述如何使用服務器端代碼去操作客戶端緩存: 
       
  //默認緩存的秒數
  int secondsTime = 100;
   
  
//判斷最后修改時間是否在要求的時間內
  
//如果服務器端的文件沒有被修改過,則返回狀態是304,內容為空,這樣就節省了傳輸數據量。如果服務器端的文件被修改過,則返回和第一次請求時類似。
  if (request.Headers["If-Modified-Since"!= null && TimeSpan.FromTicks(DateTime.Now.Ticks - DateTime.Parse(request.Headers["If-Modified-Since"]).Ticks).Seconds < secondsTime)
  {
      
//測試代碼,在這里會發現,當瀏覽器返回304狀態時,下面的日期并不會輸出
      Response.Write(DateTime.Now);
 
     response.StatusCode 
= 304;
     response.Headers.Add(
"Content-Encoding""gzip");
     response.StatusDescription 
= "Not Modified";
  }
  
else
  {
     
//輸出當前時間
     Response.Write(DateTime.Now);
 
     
//設置客戶端緩存狀態
     SetClientCaching(response, DateTime.Now);
  }
 
  
#region SetClientCaching..
  
/// <summary>
  
/// 設置客戶端緩存狀態
  
/// </summary>
  
/// <param name="response"></param>
  
/// <param name="lastModified"></param>
  private void SetClientCaching(HttpResponse response, DateTime lastModified)
  {
     response.Cache.SetETag(lastModified.Ticks.ToString());
     response.Cache.SetLastModified(lastModified);
     
//public 以指定響應能由客戶端和共享(代理)緩存進行緩存。
     response.Cache.SetCacheability(HttpCacheability.Public);
     
//是允許文檔在被視為陳舊之前存在的最長絕對時間。
     response.Cache.SetMaxAge(new TimeSpan(7000));
     
//將緩存過期從絕對時間設置為可調時間
     response.Cache.SetSlidingExpiration(true);
  }
#endregion



        如果你的緩存是基于文件的方式,如XML或http中的.ashx處理,也可以使用下面的基于文件方式的客戶端緩存: 
        
 #region SetFileCaching..
  
/// <summary>
  
/// 基于文件方式設置客戶端緩存
  
/// </summary>
  
/// <param name="fileName"></param>
  private void SetFileCaching(HttpResponse response, string fileName)
  {
     response.AddFileDependency(fileName);
      
//基于處理程序文件依賴項的時間戳設置 ETag HTTP 標頭。 
     response.Cache.SetETagFromFileDependencies();
     
//基于處理程序文件依賴項的時間戳設置 Last-Modified HTTP 標頭。
     response.Cache.SetLastModifiedFromFileDependencies();
     response.Cache.SetCacheability(HttpCacheability.Public);
     response.Cache.SetMaxAge(
new TimeSpan(7000));
     response.Cache.SetSlidingExpiration(
true);
 }
 
#endregion
 

        使用后的效果如下圖所示:


上圖所使用的工具是在IE下運行的HttpWatchPro,在Firefox下可以使用FireBug+YSlow進行測試.
YSlow是建立在FireBug基礎上運行的一個小工具,它可以對你的網頁進行分析為什么緩存,并給出評分和緩慢的原因.這個工具來自Yahoo的研發團隊,所以規則也是Yahoo制定的.

      結論

        我們已經看了如何使用客戶端緩存減少帶寬和計算的方法,如前所述,如果能正 確合理的利用各種不同的緩存,他們會給你帶來很多的好處.我希望本文已為你當下或將來基于Web的項目提供了精神食糧,并正確地在底層利用Last- Modified和ETag響應頭去優化你的項目。 

        
        

參考資料:

301永久重定向實現方式及302重定向

理解ASP.NET與客戶端緩存之HTTP協議 

如何利用客戶端緩存對網站進行優化?

原文地址:http://www.cnblogs.com/lion.net/archive/2007/09/24/904717.html

posted on 2007-09-25 13:23 colys 閱讀(420) 評論(0)  編輯 收藏 引用 所屬分類: C#.Net

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线观看天堂一区二区三区| 国产精品成人免费| 久久午夜羞羞影院免费观看| 国产一区二区黄色| 麻豆免费精品视频| 亚洲精美视频| 亚洲一卡二卡三卡四卡五卡| 国产精品成人aaaaa网站| 亚洲一区三区电影在线观看| 久久久久国产精品一区三寸| 亚洲成人在线观看视频| 欧美日韩国产精品成人| 亚洲一区中文字幕在线观看| 久久在线免费| 9久re热视频在线精品| 国产精品极品美女粉嫩高清在线 | 欧美不卡视频| 一本一本久久a久久精品综合妖精| 欧美手机在线视频| 欧美一区免费视频| 91久久精品视频| 午夜视频在线观看一区二区三区| 久久久久久久久久久久久女国产乱| 夜夜夜久久久| 久久久精品国产免大香伊| 亚洲国产精品精华液2区45| 欧美人成在线| 欧美影院一区| 亚洲精品欧美激情| 久久久www| 夜夜嗨av色一区二区不卡| 一本色道久久综合亚洲精品不| 美女精品在线| 99这里只有久久精品视频| 国产欧美日韩在线视频| 欧美激情一区在线| 久久精品一区二区三区中文字幕| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久精品99| 亚洲影院免费观看| 亚洲福利在线观看| 久久精品夜夜夜夜久久| 一级成人国产| 在线欧美电影| 国产欧美日韩一区| 美女视频黄a大片欧美| 亚洲欧美日韩在线综合| 亚洲美女视频在线免费观看| 久久久综合免费视频| 亚洲一区在线观看视频 | 久久久免费观看视频| 一区二区不卡在线视频 午夜欧美不卡在 | 在线播放不卡| 欧美精品18+| 国产精品久久久久高潮| 久久视频在线看| 亚洲一区中文| 99国产一区| 亚洲精品黄色| 亚洲高清视频的网址| 欧美高清不卡| 免费观看不卡av| 久久先锋资源| 久久深夜福利| 快播亚洲色图| 欧美国产乱视频| 韩国自拍一区| 国产欧美精品一区aⅴ影院| 欧美三级特黄| 欧美调教视频| 欧美午夜三级| 欧美午夜激情小视频| 欧美日韩中文在线| 欧美视频你懂的| 欧美婷婷在线| 国产精品视频一| 国产精品久久久久久久久久久久| 欧美视频不卡| 国产精品一区二区你懂的| 国产精品一区视频网站| 国产三级精品在线不卡| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧美日韩综合aⅴ视频| 亚洲第一精品电影| 在线高清一区| 亚洲精品国久久99热| 亚洲激情网站| 一区二区日韩精品| 亚洲欧美欧美一区二区三区| 亚洲欧美日韩国产一区二区| 久久久久久尹人网香蕉| 9国产精品视频| 亚洲图中文字幕| 校园激情久久| 久久综合国产精品台湾中文娱乐网| 另类激情亚洲| 亚洲看片一区| 亚洲欧美日韩精品综合在线观看| 欧美一级久久| 欧美国产极速在线| 欧美日韩亚洲成人| 久久成人免费日本黄色| 亚洲国产高清在线| 亚洲精品在线电影| 在线一区欧美| 亚洲欧美中文字幕| 欧美成ee人免费视频| 国产精品成人一区| 怡红院av一区二区三区| 日韩一级大片在线| 久久av一区二区三区漫画| 欧美.www| 亚洲一区免费看| 久久亚洲影院| 国产精品video| 亚洲第一色中文字幕| 亚洲一区二区三区在线视频| 久久国产福利| 亚洲精品国产品国语在线app| 一区二区三区四区国产精品| 久久不射中文字幕| 欧美va亚洲va香蕉在线| 国产精品美女www爽爽爽| 在线观看视频一区| 亚洲欧美在线播放| 亚洲国产国产亚洲一二三| 亚洲专区一区| 欧美美女视频| 美国十次成人| 先锋影音久久| 免费欧美电影| 国产嫩草影院久久久久| 亚洲精品国精品久久99热一| 欧美在线观看日本一区| 亚洲人午夜精品免费| 欧美网站在线观看| 亚洲国产精品激情在线观看| 亚洲欧美国产不卡| 亚洲精品一区二区三区婷婷月| 欧美一区免费视频| 国产精品视频观看| 亚洲社区在线观看| 亚洲麻豆一区| 欧美激情一区二区三区高清视频| 黄色精品一区二区| 久久riav二区三区| 亚洲一区二区免费看| 欧美日韩在线免费观看| 亚洲破处大片| 免费成人av在线| 久久久久久高潮国产精品视| 国产丝袜一区二区三区| 欧美日韩一区二区在线 | 久久精品国产免费观看| 一本一本久久| 欧美日本亚洲韩国国产| 亚洲精品一区二区三区av| 久久一区二区三区国产精品 | 一本久久知道综合久久| 亚洲二区免费| 欧美高清视频在线观看| 亚洲人体偷拍| 欧美黄色小视频| 免费观看日韩| 亚洲免费观看高清在线观看| 亚洲高清免费视频| 亚洲人成网站在线播| 欧美视频在线观看一区| 亚洲黄页一区| 亚洲高清一区二| 欧美高清视频www夜色资源网| 亚洲黄色在线看| 亚洲国产一二三| 欧美视频一区二区三区四区| 亚洲香蕉成视频在线观看| 亚洲视频观看| 国产私拍一区| 欧美高清自拍一区| 欧美精品在线免费播放| 亚洲一级黄色片| 亚洲一区一卡| 狠狠入ady亚洲精品经典电影| 欧美jizzhd精品欧美巨大免费| 欧美国产日本| 亚洲欧美综合另类中字| 久久久久久久999| 国产精品日韩精品欧美在线| 亚洲一区在线免费观看| 免费日韩av| 亚洲欧美综合国产精品一区| 国产欧美日本| 久久精品国产亚洲a| 国产日韩欧美综合在线| 久久精品午夜| 免费中文日韩| 亚洲欧美日韩精品久久久久| 久久精品国产精品亚洲综合| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美在线影院| 亚洲精品久久在线|