IIS 動態與靜態壓縮


前言

我們有時候需要在頁面啟動的時候進行壓縮代碼,這時候iis已經幫助我們做好了動態壓縮代碼。

正文

靜態壓縮及動態壓縮的區別

IIS7中的HTTP壓縮分為“靜態內容壓縮”和“動態內容壓縮”,其實這兩個名字第一次接觸很費解。什么是動態內容什么又是靜態內容?實際上,准確的翻譯應該是“靜態壓縮”和“動態壓縮”。這兩個詞反應了IIS的壓縮行為。對於配置在staticTypes節中的mime類型,將會啟用靜態壓縮,也就是說,當文件第一次被請求的時候,IIS會將其壓縮,然后放入臨時文件夾中,下次再有人請求此文件時直接從臨時文件夾中取出壓縮后的版本而不用重新執行壓縮的過程。配置在dynamicTypes一節中的mime類型的http請求都將啟用動態壓縮,即每一次請求,主機都會對請求的內容——可能是存放在文件系統中的靜態文件,也可能是ISAPI返回的內容——進行壓縮,而不會對其進行緩存。這個壓縮比率因主機性能不同而會有所調整,所以我們在請求js文件的時候才會發現js文件有時壓縮有時不壓縮的情況。

顯而易見,靜態壓縮會占用一定的存儲空間,但是速度快,而動態壓縮不占用存儲空間,但是占用CPU時間,而且壓縮比不恆定。而對於經過ISAPI的請求,則不能使用靜態壓縮方式。例如對於WCF返回的內容。

開啟功能

在服務器中,我們一般都是沒有這個選項的,那么我們需要去添加這個iis中的動態壓縮。

備注:這個是從iis7開始的,前面的配置比較復雜,也就不介紹了。

配置

當開啟GZip壓縮之后,IIS並不是對所有內容都啟用了壓縮,而是有選擇的進行壓縮。

遺憾的是,我們無法直接在IIS7管理器中配置這些壓縮選項。

我們首先需要在C:\Windows\System32\inetsrv\config文件夾下找到applicationhost.config文件,打開之后找到如下一節內容:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

我們可以看到,IIS實際上是根據MIME類型來決定是否啟用HTTP壓縮的,以及壓縮比之類的選項。可以看出,圖片默認情況下是不被壓縮的,這是因為圖片的壓縮比太低了。

我們注意到,對於Javascript來說,上面對不同的mime類型配置了不同的壓縮方式。Javascript有三種常見的Mime類型,text/javascript,application/x-javascript,application/javascript。

這三種類型都是合法的,在現代瀏覽器中也不存在什么差別。但是由於IIS7中Js文件的mime類型默認被設置為application/x-javascript,也就是說對於js文件,使用的是動態內容壓縮而不是靜態內容壓縮,因此會導致js文件有時經過壓縮的,有時卻沒有壓縮。

由於js文件通常穩定之后不會再被修改了,因此建議改成靜態壓縮——即把dynamicTypes這一節中的application/x-javascript挪到靜態壓縮節中。這樣保證每次腳本都是被壓縮過返回的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM