[ASP.NET]使用IIS的網頁壓縮

[ASP.NET]使用IIS的網頁壓縮

在網頁開發上,由於AJAX的概念興起,Javascript的應用變的愈來愈廣泛,是面上的Javascript libraries也愈來愈多了,而這些Javascript的使用帶來了高操作性與部分刷新的優點,但相對的也將使用者第一次開啟網頁的下載流量提升了很多,已jQuery為例,最簡單的jQuery的js檔就約40-50k,對網路狀況不好的使用者來說,是太多了。

而如果我們使用 aspx、asp等動態網頁進行設計,這些網頁的內容會隨著使用者的不同而改變,因此cache的效果並不會特別好,一個複雜的ERP表單,光是網頁的原始碼量可能就高達200kb也說不定,當一次刷新的流量高達200kb時,在Internet的環境下,相信怎麼跑也很難跑的順暢。

若js的引用與網頁的複雜度都是目前所必需,那我們只有另闢蹊徑來解決效能的問題,兩年前在網路上找尋到以下的設定方式,透過IIS進行網頁內容的壓縮,壓縮的效果非常好,200kb的網頁,經過壓縮後約只剩下40kb,所以我們也一直沿用至今。

該壓縮是透過Gzip這個元件來進行,將IIS所response文件進行壓縮,傳到client端後再由client進行解壓縮,整個過程我們的程式都不用修正,算是非常的方便,以下是如何設定網頁的壓縮:

 

【IIS6.0的設定】

1. 開啟Internet 服務管理員-->網站-->內容-->服務。在 HTTP壓縮框中勾選 "壓縮應用程式檔案(Compress application files)" 和 "壓縮靜態檔案(Compress static files)",如下圖所示:
image

2. 接下來配置 GZip 元件,在網際網路資訊服務(IIS)管理員,點擊網頁服務延伸-->增加一個新的網頁服務延伸,在 "新增網頁服務延伸" 框中輸入延伸名稱 "IIS Compression",選擇"需要的檔案" 為 C:\WINDOWS\system32\inetsrv\gzip.dll,並設定為 "允許",若無啟動此功能,則所設定之參數並不會產生效用.如下圖所示:
image

3. 停用IIS相關服務,與IIS執行相關的服務共有三個HTTP SSL、IIS Admin、World Wide Web Publishing,請將這三個服務都停止。

4. 打開 C:\Windows\System32\inetsrv\MetaBase.xml,在修改前請先備份(切記),這個檔案很大,找到下面一段內容:

HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="0"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="FALSE"
HcDynamicCompressionLevel="0"
HcFileExtensions="htm html txt"
HcOnDemandCompLevel="0"
HcPriority="1"
HcScriptFileExtensions="asp dll exe" />
===========================================================
<IIsCompressionScheme Location="/LM/W3SVC/Filters/Compression/gzip"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="1"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcDynamicCompressionLevel="0"
HcFileExtensions="htm html txt"
HcOnDemandCompLevel="0"
HcPriority="1"
HcScriptFileExtensions="asp dll exe" /> 

各參數所代表的意義

  • HcDoDynamicCompression:是否壓縮動態文件
  • HcDoStaticCompression、HcDoOnDemandCompression:是否壓縮靜態文件
  • HcDynamicCompressionLevel、HcOnDemandCompLevel:表示需要的壓縮率,數字越小壓縮率越低
  • HcScriptFileExtensions:要壓縮的動態文件副檔名
  • HcFileExtensions:要壓縮的靜態文件副檔名

找到以上的資訊後,請分別將兩段的屬性更改為:

  • HcDynamicCompressionLevel="10"
  • HcFileExtensions="htm html txt css js "
  • HcScriptFileExtensions="asp dll exe aspx"

5. 儲存 C:\Windows\System32\inetsrv\MetaBase.xml,如果發生無法存檔的問題,請檢查前一步驟中是否有正確的將三個服務停止。

6. 重新啟動步驟3中停用的三個服務。

7. 開啟系統進行測試。

 

 

【IIS7.0的設定】

上面複雜的設定在IIS7.0就簡單多囉,有GUI的畫面可以使用整個感覺就很優:

1.找到IIS-->Compression

image

2.設定壓縮細節

image

  • Enable dynamic content compression:壓縮動態檔案如aspx、asp等...
  • Enable static content compression:壓縮靜態檔案如htm、js、css等...
  • Only compress files larger than(in bytes):只有在檔案超過多大時才壓縮...
  • Per application pool disk space limit(in MB):壓縮後的檔案會被cache住,設定其cache的最大容量...

網頁壓縮的設定在IIS7.0預設是啟用的,而且設定起來比IIS6.0簡單很多,而既然微軟敢將此功能作為預設值,我想也是對其架構有一定的把握度吧。

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。