asp.net 頁面靜態化


當網站流量變大,網站響應變慢的時候,頁面靜態化可以簡單而且有效的縮短響應時間,大大提高網站的吞吐量,當然我指的是cms這類更新不是很頻繁的應用。事實上,

在asp.net實現這一點, 是非常簡單的。 我們知道,在asp.net中有IhttpModule接口。Ihttpmodule可以簡單理解為一個可以在 執行像.aspx,或者mvc中control/action 前,添加我們自定義的操

作的東西。(Ihttpmodule詳細,可以去Fish li的博客,相當好)

我們只需要編寫這么一個HttpModule就可以了,

當用戶第一次請求asp.net處理時, 我們可以在ihttpmodule中攔截到這個請求, 然后獲取到這次請求應該返回的html代碼, 然后我們返回這些html給用戶, 並保存剛才我們獲取到的html到文件內,

當用戶下次請求時, 我們只需要直接返回我們已經保存的html文件即可。 如此反復,這樣就達到了靜態話的目地。 如下圖:

image

畫的不好,但是基本就是這么個意思。 就是這么個意思,我利用了幾個晚上編寫了一個這樣的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晚,歡迎重新下載試用。


免責聲明!

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



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