WebResourceCompression壓縮模塊以及.Net 程序脫離.net framework框架運行

轉]:http://whx.tzgt.gov.cn/newOperate/html/1/11/112/8931.html

在介紹之前,先簡單說一說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> 配置節中加入以下語句:
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>< add name="WebResourceCompression" type="WebResourceCompression.WebResourceCompressionModule"/>

0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>< add name="PageCompressionModule" type="Compression.PageCompressionModule,Compression.PageCompressionModule"/>

  < 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並且查看頁面體積如下圖:
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" height=104 src="http://www.cnblogs.com/images/cnblogs_com/aspxcn/d2.jpg" width=355 border=0>

同時查看fiddler2看看實際接收的流量
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" height=420 src="http://www.cnblogs.com/images/cnblogs_com/aspxcn/d1.jpg" width=746 border=0>
通過上圖可以看到,實際接收與查看屬性的體積都是一樣65452字節,並且fiddler2檢測到頁面是no compression

跟着我們打開啓用壓縮的compress.aspx並查看頁面體積如下圖(與nocompress.aspx頁面體積基本一樣,只有2字節的誤差):
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" height=76 src="http://www.cnblogs.com/images/cnblogs_com/aspxcn/d4.jpg" width=275 border=0>

再看看fiddler2實際接收到的流量
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" height=407 src="http://www.cnblogs.com/images/cnblogs_com/aspxcn/d3.jpg" width=777 border=0>
壓縮的效果終於看到了,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

優點:使用簡單
缺點:僅支持ASP.NET2.0或以上版本,不能壓縮除axd外的其它資源!

二、PageCompression壓縮模塊
    與之前的模塊不同,這個模塊是專門用來壓縮aspx頁面的,啓用這個壓縮模塊之後,aspx頁面將會被實時壓縮,一般100K的頁面能被壓縮到25K左右,此模塊適用於只需要對頁面進行壓縮的項目!

使用:解壓後將Compression.PageCompressionModule.dll放到網站項目的BIN目錄,並且在Web.config < httpModules> 配置節中加入以下語句:
優點:使用簡單
缺點:僅支持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

另:
[轉]:http://www.xoyozo.com.cn/xsdn/archive/Let-.Net-program-run-without-.Net-Framework.aspx
.Net 框架目前逐步在普及了,仍然有很多人在尋找如何讓.NET程序脫離.NET框架的方法。
    現成的工具有 Xenocode 的postbuidle或者vas,還有 Salamander .NET Linker .另外還有 MaxToCode 作者以前做的 framework linker. 以及一些支持註冊表模擬和文件模擬的打包工具molebox,thinstall等.
   最後還有某網友(應其要求隱去網名) 兜售的一個實現方法.

    Xenocode的是使用了一個虛擬機環境,模擬框架需要的註冊表信息和文件信息.Xenocode號稱的生成native代碼功能實際上就是指的這個功能.我測試了幾個程序打包,兼容性似乎不怎麼好. 不知道是不是因爲機器上已經安裝了框架的原因。

    Jason做的 framework linker,以前我也使用過, 他的實際上是利用了Remotesoft的內核文件,然後自己實現了一個loader。好像是使用的早期的內核文件,兼容性也不太好。

    Salamander .Net Linker ,Remotesoft的一個產品,沒有可以下載的,但是其兼容性似乎很不錯。移動的飛信軟件就利用了它的核心。

   某網友的方法似乎是利用remotesoft的核心和飛信的框架,因爲他並沒有免費公開方法,從他給出的樣例可以看到有remotesoft的核心文件以及飛信的框架程序。

    這裏要介紹的方法是直接利用飛信的框架來實現脫離 .Net framework運行。
    首先下載一個飛信的程序安裝。在安裝目錄中會有 VMDotNet 目錄。這個就是.Net框架虛擬環境需要的文件。直接把整個目錄提取出來。

     如何利用這個虛擬環境運行 自己的 .Net 程序呢?
很簡單,一個命令行搞定。在 VMDotNet 目錄裏面會找到一個 FetionVM.exe 。這個是虛擬環境的loader。
使用方法: FetionVM.exe pathtoyoureexe
就是直接把你的 .Net 程序 作爲命令行參數傳遞給 FetionVM.exe 就可以在這個虛擬環境中執行你的。net程序了。
    最好再自己寫一個啓動程序,首先檢查系統是否安裝了。Net框架,如果有直接運行。沒有調用虛擬環境運行。
    這個啓動程序飛信也有,如果不想自己寫就直接拿飛信安裝目錄中的 Feition.exe,但是這樣的話 你自己的.Net程序的名字必須叫 FeitionFX.exe 。把它和Feition.exe 放在同一目錄下,直接執行 Feition.exe 即可。
    另外,如果你對。Net程序使用了加密保護,需要注意一下,目前市面上的大部分。Net加密工具加密後的程序集不能在這個虛擬環境中運行的。 這個東西除了能實現脫離 。net框架運行外,還有另外一個副作用--讓.net程序運行在指定版本的 。net 框架中(雖然機器上安裝了。net框架,仍然可以讓。net程序在這個虛擬框架下運行)。

   前面介紹了讓.Net程序脫離.net framework框架 運行的方法 ,但是有些朋友應用中還是遇到了一些問題,主要時需要自己提取框架程序以及應用的dll問題。這裏介紹一個偷懶提取方式。
我們可以利用 Remotesoft linker的試用版來提取,試用版的獲取

    http://www.remotesoft.com/linker/try.html

   試用版提取時可以用 mdeploy 方式或者 native 方式。如果時 mdeploy 方式,比較簡單,直接提取出來了基本能用了。他提取的是你係統當前的 框架環境。也就是你安裝了 .Net 3.0那麼提取出來的核心文件也就是 3.0的。
   提取完後會有一個 exe文件和 rsm 文件,你只需要用fetion框架裏面的 fetionvm.exe替換這裏生成的exe文件即可。
實際上這個文件是一個預先寫好了的模板程序,自己可以修改一下資源屬性,就OK了。
   native 模式提取出來的虛擬框架目錄結構和 fetion的那個一樣的。把文件複製到fetion的框架裏面覆蓋。然後自己可以改改 fetionvm.srm文件,這個文件在前面已經還原出他的代碼了。這樣就省去了自己提取dll文件的麻煩。

文章轉載自:http://www.cnblogs.com/scottckt/archive/2007/12/14/995258.html

http://blog.csdn.net/wlwqw/archive/2007/09/17/1788113.aspx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章