網站效能最佳化-GZIP壓縮

來源:互聯網
上載者:User

GZIP壓縮其實就是將網頁內容壓縮,減少HTML代碼網路傳輸的代價,來提高Web效能。

這個請求的過程解釋一下

1:用戶端Request請求。Http_header中會根據相應的瀏覽器發送相應的編碼規則,

這表明“我”用戶端瀏覽器可以支援gzip、deflate兩種壓縮格式。

2:伺服器端接受到這個“Accept-Encodeing”,伺服器就可以採用相應的gizp、defalte,壓縮web內容,並Response。

3:用戶端瀏覽器接受到相應壓縮後的內容,根據"Content-Encoding:gzip",進行相應解壓縮,並呈現給使用者。

 

IIS6.0啟用GZIP壓縮的方法

  • 開啟Internet資訊服務(IIS)管理器,右擊"網站"->"屬性",選擇"服務"。在"HTTP壓縮"框中選中"壓縮應用程式檔案"和"壓縮靜態檔案",按需要設定"臨時目錄"和"臨時目錄的最大限制";
  • 在Internet 資訊服務(IIS)管理器,右擊"Web服務擴充"->"增加一個新的Web服務擴充...",在"建立Web服務擴充"框中輸入副檔名"HTTP Compression",添加"要求的檔案"為C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系統目錄根據您的安裝可能有所不同,選中"設定擴充狀態為允許";
  • 使用文字編輯器開啟C:\Windows\System32 \inetsrv\MetaBase.xml(建議先備份),找到Location ="/LM/W3SVC/Filters/Compression/gzip",如果需要壓縮動態檔案,則將 HcDoDynamicCompression設定為"TRUE",並在HcScriptFileExtensions中增加您要壓縮的動態檔案尾碼名,如aspx;如果需要壓縮靜態檔案,則將HcDoStaticCompression和HcDoOnDemandCompression設定為 "TRUE",並在HcFileExtensions中增加您需要壓縮的靜態檔案尾碼名,如xml、css等; HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的壓縮率,數字越小壓縮率越低;
  • 編輯完畢後儲存MetaBase.xml檔案;如果檔案無法儲存,則可能IIS正在使用該檔案。開啟"開始"->"管理工具"->"服務",停止"IIS Admin Service"後,即可儲存;
  • 最後,重新啟動IIS。可以到HTTP壓縮測試網站驗證結果。

這裡要提到的是:IIS6.0的壓縮,會對HTML、CSS等靜態檔案進行最佳化。IIS6.0會將這些壓縮好的檔案放在一個緩衝目錄中,如果沒有修改,IIS6.0將直接返回緩衝目錄中的檔案。而不是對這些檔案每次都壓縮。

通過HttpModules啟用GZIP壓縮(.NET 2.0)

主要是.NET 2.0有兩個類:GZipStream DeflateStream。Module的代碼粘貼如下(非原創)

  public sealed class CompressionModule : IHttpModule
  {

    void IHttpModule.Dispose()
    {
      // Nothing to dispose;
    }

    void IHttpModule.Init(HttpApplication context)
    {
      if (BlogSettings.Instance.EnableHttpCompression)
      {
        context.PreRequestHandlerExecute += new EventHandler(context_PostReleaseRequestState);
      }
    }

    private const string GZIP = "gzip";
    private const string DEFLATE = "deflate";

    void context_PostReleaseRequestState(object sender, EventArgs e)
    {
      HttpApplication app = (HttpApplication)sender;
      if (app.Context.CurrentHandler is System.Web.UI.Page && app.Request["HTTP_X_MICROSOFTAJAX"] == null)
      {
        if (IsEncodingAccepted(DEFLATE))
        {
          app.Response.Filter = new DeflateStream(app.Response.Filter, CompressionMode.Compress);
          SetEncoding(DEFLATE);
        }
        else if (IsEncodingAccepted(GZIP))
        {
          app.Response.Filter = new GZipStream(app.Response.Filter, CompressionMode.Compress);
          SetEncoding(GZIP);
        }
      }
            else if (app.Context.Request.Path.Contains("WebResource.axd"))
            {
                app.Context.Response.Cache.SetExpires(DateTime.Now.AddDays(30));//是.NET自己的檔案,這裡只是加緩衝時間
            }
    }

    private static bool IsEncodingAccepted(string encoding)
    {
      HttpContext context = HttpContext.Current;
      return context.Request.Headers["Accept-encoding"] != null && context.Request.Headers["Accept-encoding"].Contains(encoding);
    }   

    private static void SetEncoding(string encoding)
    {
      HttpContext.Current.Response.AppendHeader("Content-encoding", encoding);
    }

  }

什麼類型檔案應該GZIP壓縮

1:CSS,Javascript、html 靜態檔案

2:asp,aspx 動態檔案

圖片不要使用GZIP,壓縮了反而大(忘記是那篇文章提到了)

 

如何檢查網頁是否GZIP壓縮過:

1:Fiddler 軟體(我中使用的軟體),查看Content-Encoding

2:http://www.port80software.com/tools/compresscheck.asp 網站

3:自己寫一個Post,添加“Accept-Encodeing:gzip”,看返回的內容就知道啦

 

改進:

目前我們的網站aspx頁面已經啟用Gzip壓縮,但CSS,Javascript,html還沒使用。而且最好使用IIS6.0配置方式的壓縮(IIS6.0有壓縮緩衝)。

請教:

1:GZIP,Deflate 兩種有什麼區別

2:從HtmpModule代碼來看,應該是優先使用Defalte,那麼是不是如果 GZIP,Deflate同時存在優先使用Deflate。但在網站的測試中發現,Defalte壓縮比GZIP大?

參考文檔:

dudu http://www.cnblogs.com/dudu/archive/2004/12/12/76085.html

http://www.yaosansi.com/post/957.html

--=閱讀快樂=--

Google 標記: Web效能最佳化, GZIP

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.