針對ASP.NET頁面即時進行GZIP壓縮最佳化的幾款壓縮模組的使用簡介及應用測試!(附源碼)
在介紹之前,先簡單說一說ASP.NET服務端GZIP壓縮模組的作用及工作原理,很多人編寫網頁的時候頁面因為使用了大量的JS特效又或者放置很多大型動態廣告導致了頁面或指令碼體積龐大,通常都會使用一些壓縮公用程式本地對頁面或指令碼進行一定的壓縮後再上傳到伺服器,但這樣的壓縮公用程式一般壓縮率有限,最佳化自然也不明顯,本文章介紹的壓縮模組的作用就是對asp.net的頁面或指令碼等資源進行高強度GZIP壓縮(一般能壓縮到只有1/5的體積),而且壓縮的過程是發生在用戶端請求aspx頁面的時候由服務端進行壓縮處理後再傳送給用戶端顯示,換言之項目使用這些壓縮模組之後,所有的aspx頁面都不需要事先進行壓縮處理,而是由壓縮模組在頁面被用戶端第一次請求的時候自動在服務端後台進行壓縮處理(壓縮處理的時間很快,幾乎可以忽略不計,但壓縮後的頁面載入速度卻提升明顯)。下面就讓我介紹幾款實現這樣功能的壓縮模組:
一、WebResourceCompression壓縮模組
這個壓縮模組是專門用來即時壓縮ASP.NET2.0頁面引用的所有*.axd資源,一般aspx頁面使用了如anthem.net的ajax架構或asp.net驗證控制項都會產生axd檔案引用,這個檔案實際就是一個js指令碼,啟用這個壓縮模組後,所有的axd資源都會被GZIP壓縮後再傳送給用戶端,此模組特別適用於aspx頁面應用了ajax架構或需引用體積龐大的axd資源檔的項目!
使用:解壓後將WebResourceCompression.dll放到網站項目的BIN目錄,並且在Web.config <httpModules> 配置節中加入以下語句:
<add name="WebResourceCompression" type="WebResourceCompression.WebResourceCompressionModule"/>
優點:使用簡單
缺點:僅支援ASP.NET2.0或以上版本,不能壓縮除axd外的其它資源!
二、PageCompression壓縮模組
與之前的模組不同,這個模組是專門用來壓縮aspx頁面的,啟用這個壓縮模組之後,aspx頁面將會被即時壓縮,一般100K的頁面能被壓縮到25K左右,此模組適用於只需要對頁面進行壓縮的項目!
使用:解壓後將Compression.PageCompressionModule.dll放到網站項目的BIN目錄,並且在Web.config <httpModules> 配置節中加入以下語句:
<add name="PageCompressionModule" type="Compression.PageCompressionModule,Compression.PageCompressionModule"/>
優點:使用簡單
缺點:僅支援ASP.NET2.0或以上版本,不能壓縮除aspx頁面外的其它資源,而且啟用壓縮後,頁面引用的axd資源會無效(BUG)!
三、HttpCompress6.0壓縮模組
這是一個支援asp.net1.0/1.1/2.0(2.0以下版本不支援gzip壓縮,僅支援deflate壓縮),可以壓縮aspx頁面請求的所有類型(MimeTypes)的資源,包括圖片、js指令碼、axd、aspx頁面、css檔案等,並且能在web.config詳細自訂要壓縮那種類型的資源及不壓縮那種類型的資源、也可定義要壓縮指定的頁面或不壓縮指定的頁面,另外還有壓縮比率設定(high|normal|low)等等強大的自訂功能,不過此控制項的最嚴重問題是在asp.net2.0下啟用壓縮會導致axd檔案無效,這樣如果頁面應用了ajax架構就會導致ajax功能失效。
使用:略(與下面推薦的CompressionModule壓縮模組使用方法雷同)
優點:開放原始碼,強大的自訂功能,支援asp.net1.0/1.1/2.0版本,能壓縮多種資源!
缺點:使用複雜,asp.net2.0下啟用壓縮會導致axd檔案無效!
四、CompressionModule壓縮模組(強烈推薦)
本人推薦的一個模組,同樣可以壓縮aspx頁面請求的所有資源及支援強大自訂功能的壓縮模組,與HttpCompress6.0一樣能自訂要壓縮那種類型的資源及不壓縮那種類型的資源、也可定義要壓縮指定的頁面或不壓縮指定的頁面,並且還有開啟Cache資源的功能及指定壓縮目錄的強大功能,另外也不會像HttpCompress6.0會出現axd檔案無效的BUG,這樣此壓縮模組就能完美支援各種ajax架構!!
使用:請看後面的CompressionModule壓縮模組實際使用及效能測試!
優點:開放原始碼,強大的自訂功能,能壓縮多種資源,能完美支援各種ajax架構!
缺點:使用複雜,僅支援asp.net2.0或以上版本!
綜上所述,各種壓縮模組都能達到最佳化頁面的作用,但由於壓縮的過程是發生在伺服器一端,所以啟用這些壓縮會消耗一點點伺服器資源,不過一般來說壓縮只發生在用戶端第一次訪問頁面的時候,因為之後瀏覽器本身cache了頁面及資源的關係,再次重新整理訪問的時候就不會再佔用伺服器資源進行壓縮了,所以對於網站頁面體積龐大的開發人員來說,啟用壓縮功能絕對是物有所值的,畢竟頁面體積更小,載入就會更快!
附錄:CompressionModule壓縮模組的使用說明及效能測試!
一、使用
首先,將DC.Web.HttpCompress.dll放到網站項目的bin目錄,再按如下增加及修改項目的web.config
<configSections>
<sectionGroup name="DCWeb">
<section name="HttpCompress" type="DC.Web.HttpCompress.Configuration,
DC.Web.HttpCompress"/>
</sectionGroup>
</configSections>
<DCWeb>
<HttpCompress compressionType="GZip">
<!--設定是否啟用cachefiles功能,並指定cache目錄,如果刪掉這行配置的話就自動預設為false(不開啟cache)-->
<CacheSettings cacheFiles="true" path="cache"/>
<!--設定jspath及csspath,如果刪除掉這行配置的話就會使用預設值-->
<PathSettings jsPath="javascript" cssPath="css" />
<!--配置要壓縮何種類型的資源,這裡設定只壓縮html,即只有aspx頁面及*.axd資源會被壓縮,其它的資源(片,CSS等)將不被壓縮!例:如果要壓縮gif,請添加<add mime="image/gif"/>,壓縮jpg則添加<add mime="image/jpeg"/>-->
<IncludedMimeTypes>
<add mime="text/html" />
</IncludedMimeTypes>
<!--配置不壓縮何種類型資源請使用:
<ExcludedMimeTypes>
<add mime="text/html" />
</ExcludedMimeTypes>
注意:ExcludedMimeTypes及IncludedMimeTypes只需要配置一個就可以,如果像上面那樣配置ExcludeMimeTypes的話,則表明除html類型的資源外,其它資源都會被壓縮-->
<ExcludedPaths>
<!--設定不啟用壓縮的頁面路徑,下面設定了nocompress目錄下的default.aspx頁面將不會啟用壓縮功能,但其它頁面則正常啟用壓縮-->
<add path="~/NoCompress/Default.aspx" />
</ExcludedPaths>
</HttpCompress>
</DCWeb>
<!-- The js.axd and css.axd must be enabled to allow javascript and css
compression -->
<httpHandlers>
<!--如果不需要使用到此功能的話可刪掉此配置節-->
<add verb="*" path="js.axd,css.axd"
type="DC.Web.HttpCompress.CompressionHandler,DC.Web.HttpCompress"/>
</httpHandlers>
<!-- The compression module must be enabled for the WebResource.axd to be
compressed -->
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/>
<!--設定啟用壓縮模組的參數-->
<add name="HttpCompressModule"
type="DC.Web.HttpCompress.HttpModule,DC.Web.HttpCompress"/>
</httpModules>
配置好後,壓縮模組就可以正常工作了!
小提示:如果web.config配置了
<CacheSettings cacheFiles="true" path="cache"/>
那麼項目下就必須存在cache這個目錄,否則的話會出錯,如果項目不想增加這個目錄,只需要將這個配置節刪掉即可!
二、實際應用的效能測試
跟蹤軟體:fiddler2
本次測試使用本人開發的DotNetTextBox線上編輯器控制項作為頁面載體,共有兩個一模一樣的頁面分別為compress.aspx(啟用壓縮)及nocompress.aspx(不啟用壓縮)
首先開啟不啟用壓縮的nocompress.aspx並且查看頁面體積如:
同時查看fiddler2看看實際接收的流量
通過可以看到,實際接收與查看屬性的體積都是一樣65452位元組,並且fiddler2檢測到頁面是no compression
跟著我們開啟啟用壓縮的compress.aspx並查看頁面體積如(與nocompress.aspx頁面體積基本一樣,只有2位元組的誤差):
再看看fiddler2實際接收到的流量
壓縮的效果終於看到了,fiddler2檢測到實際接收到的流量只有17277位元組,並且右下角顯示頁面採用的是GZIP Encoding,壓縮後的頁面體積只有原來的1/4!!!
1)前面進行的CompressionModule使用及效能測試執行個體的:
/Files/aspxcn/CompressSample.rar
2)CompressionModule壓縮模組在Asp.Net Ajax中應用的執行個體下載:
/Files/aspxcn/ajaxsample.rar
3)CompressionModule壓縮模組的完整源碼:
/Files/aspxcn/CompressionModule.rar
如果您還需要本人前面提到的其它幾款壓縮模組及源碼,可以訪問本人網站,裡面有本文所有的壓縮模組及源碼高速下載:
http://www.aspxcn.com.cn/default.aspx?uid=108
轉自:http://www.itpub.net/thread-1068495-1-1.html