IIS壓縮及效能最佳化

來源:互聯網
上載者:User

IIS壓縮並不是一項新技術,但對於SharePoint網站而言,IIS壓縮能起到很大的作用。在IIS伺服器上啟用IIS壓縮功能之後,在IIS伺服器把頁面內容發送給瀏覽器之前,會在伺服器上先把內容進行壓縮,然後發送壓縮後的資料,瀏覽器接收到資料後,會自動進行解壓,然後顯示。由於在網路上傳輸的資料被壓縮了,所以可以將頁面內容更快的傳送到瀏覽器,提高頁面瀏覽速度。

雖然IIS伺服器上對頁面內容進行壓縮會耗費一定的CPU時間,但這對於現在主流伺服器CPU而言,已經不會造成什麼問題。而且這點CPU時間與節省的資料轉送時間相比,實在是太划算了。每次壓縮過一個頁面之後,IIS會將壓縮後的檔案快取到磁碟上,這樣可以避免下次再重複壓縮。

在IIS伺服器上啟用IIS壓縮雖然可以通過圖形介面的IIS管理器完成,但有些配置僅僅通過IIS管理器是做不了的,所以,我們使用IIS的一個指令碼工具來進行所有的管理和配置。下面的指令需要在伺服器上的命令提示字元中執行。

在IIS伺服器上啟用靜態檔案(.js、.css、.html之類)壓縮:
cscript C:\Inetpub\adminscripts\adsutil.vbs set w3svc/filters/compression/parameters/HcDoStaticCompression true

在IIS伺服器上啟用動態檔案(.asp之類)壓縮:
cscript C:\Inetpub\adminscripts\adsutil.vbs set w3svc/filters/compression/parameters/HcDoDynamicCompression true

在動態檔案壓縮中添加“.aspx”檔案類型(SharePoint網站所有頁面都是.aspx的),要執行兩條指令:
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3SVC/Filters/Compression/Deflate/HcScriptFileExtensions "asp" "dll" "exe" "aspx"
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3SVC/Filters/Compression/gzip/HcScriptFileExtensions "asp" "dll" "exe" "aspx"

將預設的壓縮率提高,也是兩條指令:
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel "9"
cscript C:\Inetpub\adminscripts\adsutil.vbs SET W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel "9"

啟用IIS壓縮後,到底能為我們節省多少資料轉送呢?我們可以簡單的測試一下。我們使用Microsoft Fiddle,這個好用且強大的工具。它原理上是一個代理,能讓瀏覽器通過它去擷取HTTP內容,它則自動記錄瀏覽器的訪問曆史資料。Fiddle可以在http://www.fiddlertool.com/fiddler/version.asp下載。

首先,關閉IIS壓縮,清空瀏覽器緩衝,然後在IE中訪問MOSS 2007的預設網站首頁,在Fiddle中記錄下的訪問曆史資料如下:

Request Count:     29
Bytes Sent:     11,089
Bytes Received: 676,934

這些資訊表示,瀏覽器一共請求了29項資源,伺服器一共向瀏覽器發送了676K資料。676K!這僅僅是預設的MOSS 2007網站首頁哦!

然後開啟IIS壓縮功能,再清空瀏覽器緩衝,再次訪問一下首頁,Fiddle中記錄的資訊如下:

Request Count:     29
Bytes Sent:     11,089
Bytes Received: 230,276

可以看到,僅僅通過簡單的啟用IIS壓縮功能,MOSS 2007的預設首頁所請求的資料大小就從676K減少到了230K。

轉自KB部落格: http://blog.joycode.com/kaneboy/archive/2007/09/21/108674.aspx

 

自己測試了下:

開啟壓縮前:

Request Count:  55
Bytes Sent:  30,254
Bytes Received: 550,563

壓縮後:

Request Count:  55
Bytes Sent:  30,003
Bytes Received: 307,545

550K和307K 差別好大。

 

 

HTTP 壓縮的好處:

靜態網頁採用HTTP 壓縮,大約可以減少20%的傳輸量。

使用者端使用IE 5.0瀏覽器連線到已經啟用HTTP壓縮IIS 5.0之Web伺服器,才有HTTP壓縮功能。如今,絕大多數的現代瀏覽器支援壓縮技術,但是,具體的壓縮方式取決於瀏覽器。不過你無需對此擔心,因為只有瀏覽器指示支援一種壓縮方式時,Web伺服器才會發送壓縮內容。儘管如此,瞭解一下這種處理機制和不同瀏覽器支援的壓縮類型也是一件有意義的事。

瀏覽器在要求一個網址時,會把支援的壓縮格式通過Accept-Encoding的HTTP頭提交給伺服器,IIS或其它Web伺服器則從HTTP_ACCEPT_ENCODING環境變數讀取這個資訊,這個過程無需你人為幹預,IIS在瀏覽器支援壓縮的情況下會自動對發送的內容進行合適的編碼。

下表列出了常見的瀏覽器和它們支援的編碼類別型:

瀏覽器  支援的編碼

Firefox 1.0, Mozilla 1.x, Camino  gzip, deflate

OmniWeb 5.x  bzip2, gzip, deflate

Safari  gzip, deflate

Internet Explorer  gzip, deflate

 

使用 HTTP 壓縮:

如果您的網站使用了很大的頻寬,或者您希望更加有效地使用頻寬,請考慮啟用 HTTP 壓縮。HTTP 壓縮在啟用壓縮的瀏覽器和 IIS 之間提供了更短的傳輸時間。既可以只壓縮靜態檔案,又可以同時壓縮靜態檔案和應用程式響應。如果網路頻寬受到限制,使用 HTTP 壓縮會很有用(至少對於靜態檔案來說),除非處理器利用率已經很高。

動態處理會影響 CPU 資源。對動態響應啟用壓縮後,每次請求動態響應時都會進行壓縮。這意味著並不緩衝動態響應,每次請求動態響應時,伺服器可能需要更多的 CPU 週期來壓縮和發送響應。已壓縮的靜態響應可以被緩衝,因此不會像動態響應那樣影響 CPU 資源。

HTTP 壓縮的工作原理:

IIS 在接收到請求時,將檢查瀏覽器是否允許壓縮。然後 IIS 會檢查副檔名,以確定請求的檔案是否為靜態檔案或包含動態內容。如果檔案包含靜態內容,IIS 將查看以前是否請求過該檔案並且已將該檔案以壓縮格式儲存在臨時壓縮目錄中。如果檔案沒有以壓縮格式儲存,IIS 會將未壓縮的檔案發送到瀏覽器,並在臨時壓縮目錄中添加此檔案的壓縮副本。如果檔案以壓縮格式儲存,IIS 會將壓縮過的檔案發送給瀏覽器。在瀏覽器首次請求之前,所有檔案都不壓縮。

如果檔案包含動態內容,IIS 將在產生此響應時進行壓縮並將壓縮後的響應發送給瀏覽器。不儲存此檔案的副本。

壓縮靜態檔案的效能代價較小,而且通常只壓縮一次,因為該檔案隨後被儲存在臨時壓縮目錄中。壓縮動態產生的檔案的代價要高一些,因為它們並不儲存,並且每次請求時都必須重建。在瀏覽器上展開檔案的代價非常小。壓縮檔的下載速度更快,所以對於提高使用有限頻寬的網路連接(如數據機串連)的所有瀏覽器的效能特別有好處。

預設情況下,壓縮檔的到期日是 1997 年 1 月 1 日,以防止Proxy 伺服器將緩衝的壓縮檔副本發送到未啟用壓縮的瀏覽器。這也意味著瀏覽器在下一次使用者請求時並不顯示檔案的快取複本,而是返回伺服器請求新副本。

啟用 HTTP 壓縮:

如果伺服器產生大量的動態內容,則需要考慮壓縮造成的額外處理代價是否值得付出。如果 % 處理器時間計數器已經達到或超過 80%,則不建議啟用 HTTP 壓縮。

測試 HTTP 壓縮:

要建立一個基準,請使用系統監視器記錄幾天內“處理器”對象的 % 處理器時間計數器的值。此計數器有一個總執行個體以及系統中每個處理器的單獨執行個體。(如果伺服器有多個處理器,應該同時觀察單個處理器和總的處理器情況,以發現工作量分配不平衡之處)此外,還應該記錄“網路介面”對象的發送的位元組數/秒計數器。 啟用壓縮並繼續在一段時間內記錄這些計數器的值,最好是幾天,這樣就能得到好的對比依據。 將未壓縮時的值和壓縮過的值相比較。

現在引入正題,

如何配置 Microsoft Internet Information Server 6.0 實現 HTTP 壓縮:

有很多第三方工具可以實現 HTTP 壓縮,但都是需要購買的,價格在 100 到 300 美圓不等,如: http://www.port80soft.com/ 的 HTTPZip,如果不希望額外花錢實現這一功能的話,只好自己辛苦一下,接著看吧:

1.首先備份 IIS 的設定檔,

複製 C:\Windows\system32\inetsrv\metabase.xml 到另外的備份檔案夾中.

C:\Windows\system32\inetsrv\metabase.xml 是 IIS 的核心設定檔,該檔案的完整性一但被破壞,IIS 將無法正常運行,嚴重到需要重新安裝系統.

2. 在開始菜單中啟動 Internet 資訊服務(IIS)管理器,右鍵點擊“網站”屬性,開啟“服務”選項卡,勾選“HTTP 壓縮”的兩個選項。“臨時目錄”和“臨時目錄最大容量”可根據需要自行設定。設定完成後點擊確定。

3.右鍵點擊“網站”下方的 “Web服務擴充”,添加一個新的Web服務擴充,副檔名填寫為“HTTP Compression”或其他,都可以。“要求的檔案”添加:c:\windows\system32\inetsrv\gzip.dll ,並勾選“設定擴充狀態為允許”,完成後點擊確定。

 

4.下面的步驟有些複雜,如果沒有確定的把握能理解,最好不要嘗試,右鍵點擊“Internet 資訊服務的”“本機電腦”屬性,勾選“允許直接編輯設定資料庫”並確定。

5. 在開始菜單中運行 notepad C:\Windows\system32\inetsrv\metabase.xml ,開啟metabase.xml 檔案,請在任何改動前再次確認該檔案已經備份。

6. 搜尋並找到 metabase.xml 檔案中的 <IIsCompressionScheme  片段中的 HcScriptFileExtensions,依照原有檔案的格式添加你希望進行 HTTP 壓縮的副檔名,靜態檔案HcFileExtensions可添加 JS,CSS 等; 動態檔案 HcScriptFileExtensions 可添加"ASPX""ASMX",如下:

<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"

  HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"

  HcCreateFlags="0"

  HcDoDynamicCompression="TRUE"

  HcDoOnDemandCompression="TRUE"

  HcDoStaticCompression="FALSE"

  HcDynamicCompressionLevel="9"

  HcFileExtensions="htm

   html

   js

   css

   txt"

  HcOnDemandCompLevel="10"

  HcPriority="1"

  HcScriptFileExtensions="asp

   aspx

   asmx

   dll

   exe"

 >

</IIsCompressionScheme>

<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"

  HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"

  HcCreateFlags="1"

  HcDoDynamicCompression="TRUE"

  HcDoOnDemandCompression="TRUE"

  HcDoStaticCompression="TRUE"

  HcDynamicCompressionLevel="9"

  HcFileExtensions="htm

   html

   js

   css

   txt"

  HcOnDemandCompLevel="10"

  HcPriority="1"

  HcScriptFileExtensions="asp

   aspx

   asmx

   dll

   exe"

 >

</IIsCompressionScheme>

注意“Compression/deflate”和“Compression/gzip”兩個片段都需要修改。動態壓縮等級,HcDynamicCompressionLevel 建議設定為“9”

 

7. 儲存並關閉 metabase.xml 檔案。

8. 重新啟動 IIS 服務,運行“IISReset”或重新啟動 WWW 服務。

9. 其他:

如果你的伺服器上某一個Web網站不希望啟用 IIS 壓縮,請運行以下指令碼:

cscript C:\Inetpub\AdminScripts\adsutil.vbs set w3svc/site#/root/DoStaticCompression False

cscript C:\Inetpub\AdminScripts\adsutil.vbs set w3svc/site#/root/DoDynamicCompression False

如果想增加啟用 HTTP 壓縮的檔案類型,請運行以下指令碼:

"" 中為副檔名,別忘了把原有的副檔名加上。

靜態檔案壓縮:

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "doc" "ppt" "xls"

動態檔案壓縮:

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "aspx" "asmx" "dll" "exe" "php"

CSCRIPT.EXE ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "aspx" "asmx" "dll" "exe" "php"

將site# 替換為該 Web 網站的 ID。Web 網站的 ID 是什麼到“日誌記錄屬性”中看一下日誌記錄的“記錄檔名”前面的路徑就知道了。

運行以上指令碼前務必備份,運行後再次執行“IISReset”使生效.

Fiddler2  IIS6.0壓縮

聯繫我們

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