當網站流量變大,網站響應變慢的時候,頁面靜態化可以簡單而且有效的縮短響應時間,大大提高網站的吞吐量,當然我指的是cms這類更新不是很頻繁的應用。事實上,
在asp.net實現這一點, 是非常簡單的。 我們知道,在asp.net中有IhttpModule接口。Ihttpmodule可以簡單理解為一個可以在 執行像.aspx,或者mvc中control/action 前,添加我們自定義的操
作的東西。(Ihttpmodule詳細,可以去Fish li的博客,相當好)
我們只需要編寫這么一個HttpModule就可以了,
當用戶第一次請求asp.net處理時, 我們可以在ihttpmodule中攔截到這個請求, 然后獲取到這次請求應該返回的html代碼, 然后我們返回這些html給用戶, 並保存剛才我們獲取到的html到文件內,
當用戶下次請求時, 我們只需要直接返回我們已經保存的html文件即可。 如此反復,這樣就達到了靜態話的目地。 如下圖:
畫的不好,但是基本就是這么個意思。 就是這么個意思,我利用了幾個晚上編寫了一個這樣的httpmodule。 我把他叫做statichtml。
staticHtml 他基本上需要你回答這么幾個問題。
1:哪些頁面需要緩存(IPatten接口)
2:緩存文件什么時候過期(IExpire接口)
3:緩存文件保存到哪里(IStore接口)
第一個問題,在statichtml中, 開發了,RegexPatten(系統默認) 基於正則表達式的匹配,如果匹配正則表達式,則靜態化該請求
第二個問題,statichtml中,有TimeExpire(系統默認),基於時間的過期規則
第三個問題,statichtml中,有FileStore(系統默認),和MemStore,FileStore存到文件里,MemStore存到內存里
怎么回答這幾個問題呢? 當然是使用配置文件了, 怎么配置,可以點擊這里
實際上statichtml包含這么幾個接口
IPatten 判斷請求是否要生成html緩存 ,主要方法:bool IsPatten(HttpRequest request);
IGenKey 將當前請求生成一個唯一key,主要方法:String GenKey(HttpRequest request),系統默認UrlMd5GenKey將請求url生成md5碼;
IExpire 判斷是否過期, 主要方法bool IsExpire(HttpRequest req, HtmlInfo info);
IStore html存儲容器,主要方法:void Save(String key,string html); 保存html內容,String Get(String key);獲取html, HtmlInfo Query(String key);查詢Html緩存信息
下面一個基本的配置信息:
<staticHtml>
<rule name="index">
<patten type="StaticHtml.RegexPatten,StaticHtml" pars="RegPatten=index\.aspx"/>
<store type="StaticHtml.MemStore,StaticHtml"/>
</rule>
<rule name="article">
<patten type="StaticHtml.RegexPatten,StaticHtml" pars="RegPatten=article/"/>
<store type="StaticHtml.FileStore,StaticHtml" pars="Path=~/cacheHtml_article/"/> 注意~/這個。
</rule>
</staticHtml>怎么配置請猛烈點擊這里:點擊這里
文筆不好,寫的不好,大家將就看。 點擊這里下載:staticHtml,源碼:https://github.com/tianqiq/StaticHtml
當然了,大家如果有建議,發現bug,大家可以留言給我。 也希望大家到github上面fork代碼, 並貢獻代碼, 比如將html存到memcache, 根據單個用戶生成緩存, 等等,期待大家貢
獻。謝謝。
補充:上一版本發現一些bug,現在已修正, 大家在使用的時候, 一定要注意path=~/cachehtml_article 這里~/ 一定要寫上
希望大家重新下載。 如果使用時候有問題, 歡迎大家聯系我。 歡迎提出寶貴意見和反饋。 4.1號晚。
再次修復一些bug, 歡迎大家重新下載測試, 非常希望大家到github上下載代碼,提出強烈希望大家提出意見。 下載DLL
這版本經過在網上下載一個開源的.net博客系統,小泥鰍blogs(我真不是做廣告,我就是隨便下的), 100並發的情況下,測試5個頁面,
使用靜態化與不使用靜態化,利用webserver stress tool進
行測試,大概有100倍的差距。 歡迎大家測試。靜態化還是很有優勢的。 呵呵。 4.2號晚。
修復cookie中不能有逗號的bug,增加默認直接跳過常用靜態文件。 4.4晚,歡迎重新下載試用。