blowery.Web.HttpCompress 和 ICSharpCode.SharpZipLib 在Subtext中應用。
在上篇文章中,我推薦了High Performance Web Sites 的14條原則,昨天看到第4條--Gzip Components,聯系起 Subtext中用到的第三方組件
blowery.Web.HttpCompress 和 ICSharpCode.SharpZipLib。
Subtext中正是遵循這一原則,避免每次請求都要創建一個新的XML document ,對Rss feed進行了壓縮並緩存。
class BaseSyndicationHandler實現IHttpHandler接口功能
核心代碼分析:
protected virtual void ProcessFeed()
...{
if(RedirectToFeedBurnerIfNecessary())
return;
//請求者是FeedBurner的話處理後直接跳出 
if(IsLocalCacheOK())
...{
Send304();
return;
} 
// 本地緩存並未過期不處理,發送304狀態碼,跳出
if(!IsHttpCacheOK())
...{
Feed = BuildFeed();//創建feed,並賦予LastModifIEd等相應屬性
if(Feed != null)
...{
if(UseDeltaEncoding && Feed.ClIEntHasAllFeedItems)
...{
Send304();
return;
}
//Delta Encoding只發送小部分更改的請求,這樣可以減少發送內容
Cache(Feed);
}
} 
WriteFeed();//采用Gzip壓縮格式
}
再說一下web.config的配置(由於Subtext進行了整合,所以還是說下通用的配置)
<configSections> 
<sectionGroup name="blowery.web"> 
<section name="httpCompress" type="blowery.Web.HttpCompress.SectionHandler, blowery.Web.HttpCompress"/> 
</sectionGroup> 
</configSections> 


<blowery.web> 
<httpCompress preferredAlgorithm="gzip" compressionLevel="high"> 
<excludedMimeTypes> 
<add type="image/jpeg"/> 
<add type="image/png"/> 
<add type="image/gif"/> 
</excludedMimeTypes> 
//圖片格式已經壓縮過了,沒必要再壓縮,若壓縮,降低性能
<excludedPaths> 
<add path="NoCompress.ASPx"/> 
</excludedPaths> 
//不想被壓縮的內容 
</httpCompress> 
</blowery.web> 

<httpModules> 
<add name="CompressionModule" type="blowery.Web.HttpCompress.HttpModule, blowery.web.HttpCompress"/> 
</httpModules>
控件下載地址及說明文檔:
blowery.Web.HttpCompress :http://www.icsharpcode.Net/OpenSource/SharpZipLib/Download.ASPx
http://codedocs.rainbowbeta.com/blowery.Web.HttpCompress.Html
ICSharpCode.SharpZipLib:
http://blowery.org/code/HttpCompressionModule.Html