生力軍

摘要: 針對動態頁面技術缺點,基于ASP.NET框架,提出了動態頁面靜態化的3種不同實現方案——真靜態、偽靜態、折中法。其中,偽靜態主要使用HttpModule攔截并修改HTTP請求中的URL地址;折中法主要使用HttpHandler結合靜態頁面模板生成并返回靜態頁面文件。給出了頁面靜態化實現方案選擇策略,即利用參數對動態網頁進行分類,不同的動態網頁采用不同的靜態化實現方案。
關鍵詞:ASP.NET;靜態化;HttpModule;HttpHandler;選擇策略
DOIDOI:10.11907/rjdk.171136
中圖分類號:TP301
文獻標識碼:A 文章編號:1672-7800(2017)006-0022-03
0 引言
動態網頁技術因其交互性強、數據刷新實時等特點[1],使網站開發效率和維護效率得到了大幅提升,目前互聯網上大部分網站都采用動態網頁技術構建,但其存在的問題卻不容忽視。
(1)對搜索引擎不夠友好。目前,很多搜索引擎不支持動態鏈接,在網絡上獲取頁面時,會優先獲取HTML靜態頁面內容。
(2)降低服務器性能。如果頁面訪問量比較大,動態頁面會頻繁與數據庫服務器進行交互,降低服務器性能。當前,在Web技術中,只有HTML的靜態頁面效率最高,對服務器性能要求最低[2]。
(3)暴露網站使用技術。如果動態頁面含有類似.jsp或.aspx這樣的擴展名,那么制作網站技術便一目了然,使黑客容易有針對性地對網站進行攻擊。
針對上述問題,有必要對動態頁面進行靜態化處理。目前,大多數網站都采用單一的靜態化實現方案,但是在某些情況下,服務器性能不但沒有提高,反而出現了下降。
實際上,對于不同類型的動態頁面,其靜態化實現方案應該有所區別,以最大限度提高服務器性能。本文首先分析了ASP.NET框架下不同頁面靜態化實現方案,然后將動態頁面進行分類,按照不同頁面的特點采用不同的靜態化實現方法。
1 實現方案
目前,實現頁面靜態化技術主要有以下幾種方案:
(1)真靜態。這種方案真正將動態頁面批量轉化成靜態頁面并存儲在服務器上。這種方案的優點是空間成本較低,不需要數據庫服務器。其缺點也很明顯:一旦網站規模較大,頁面的維護全部依靠手工操作,工作量巨大,維護困難。因此,這種方式只適合一些簡單的、更新頻率極低的介紹性頁面。
(2)偽靜態。這種方案其實并沒有真正將動態頁面轉化為靜態頁面,而是通過URL重寫技術,將動態頁面路徑重寫成.html靜態頁面路徑,主要實現搜索引擎友好性與網站安全性,而性能與單純的動態頁面沒有差異。這種方案適用于更新速度快而訪問量較小的動態頁面。
(3)折中法。這種方案在用戶訪問靜態頁面時,首先判斷靜態頁面在服務器上是否存在,如果存在就直接將靜態頁面返回給客戶端;如果不存在,則執行轉化操作生成靜態頁面,將該頁面發送給客戶端并保存在服務器上,下次再請求該頁面時則無需執行轉換操作。
以上3種方案在動態頁面靜態化實現中可結合使用。由于真靜態實現方式與靜態頁面制作方式相同,本文不再贅述。下面給出ASP.NET下偽靜態和折中法的實現方式。
1.1 偽靜態實現方式
偽靜態實現依賴對用戶請求的URL地址重寫。在ASP.NET框架下,可以使用框架中提供的HttpModule對HTTP請求進行攔截,對請求的地址進行驗證。如果符合重寫要求即將URL地址轉換成動態頁面形式,在服務器端對用戶請求進行重定向。具體實現步驟為:①新建一個類,實現IHttpModule接口,命名為StaticModule;②在新建類中定義一個EventHandler委托類型方法,命名為context_BeginRequest;③在context_BeginRequest方法中獲取用戶請求的原始URL;④對原始URL進行驗證(可使用正則表達式),如果驗證成功則生成真實的URL地址;⑤在服務器端將用戶請求重定向到真實的URL地址;⑥重寫IHttpModule接口中的Init方法,將context_BeginRequest方法綁定到請求處理之前觸發的事件中;⑦在web.config配置文件中注冊StaticModule。
1.2 折中法實現方式
折中法實現關鍵在于如何在靜態頁面不存在的情況下自動生成靜態頁面。在ASP.NET框架下,可以使用框架中提供的HttpHandler[3]對Http請求進行處理,提供關鍵參數,生成真實靜態頁面地址,判斷靜態頁面文件是否存在。如果存在,則直接返回靜態頁面文件,否則就生成靜態頁面文件。在生成靜態頁面文件時,為了提高生成效率,可以提前準備好靜態頁面模板,運用特殊符號標簽作為占位符,在生成頁面時只需對占位符進行替換即可。實現步驟:①制作靜態頁面模板Template.html,模板中用特殊符號(如:{$xxxx})作為內容占位符;②新建一個類,實現IHttpHandler接口,命名為StaticHandler;③重寫IHttpHandler接口中的ProcessRequest方法,在其中獲取用戶請求的URL地址,并將其轉換為真實的靜態頁面地址;④判斷上一步生成的真實靜態頁面是否存在,如果存在則直接將頁面返回,否則讀取靜態頁面模板Template.html,將模板中的占位符替換為真實數據,將文件另存為靜態頁面文件并將其返回給客戶端;⑤在web.config配置文件中注冊StaticHandler。
2 頁面靜態化實現方案選擇策略
從性能角度考慮,應該優先選擇真靜態和折中法進行頁面靜態化,特性越接近靜態頁面的動態頁面,其靜態化價值越大,即讀取頻率越高、更新頻率越低的頁面越適合靜態化。讀寫比[4]是定量參數,即進行一次靜態化操作后,下一次被靜態化前該網頁讀取的次數。網站可以根據實際需求設置讀寫比閾值(記為p)。當網頁讀寫比大于p時,靜態化對性能有提升,反之,盲目靜態化就會增加服務器的文件讀寫工作量,反而影響效率。
如圖1所示,對頁面進行分類,其中讀寫比函數f(x)=px為靜態化方案選擇的分界線,分界線之上的Ⅱ區頁面可以選擇折中法,其中寫頻率較低的Ⅰ區頁面可以考慮使用真靜態法;而分界線以下的Ⅲ區頁面就不適合頻繁讀寫的靜態網頁文件,從搜索引擎友好性和安全性考慮,更適合使用偽靜態法實現。
3 結語
本文分析了動態頁面靜態化實現方案,即真靜態、偽靜態和折中法,并給出了偽靜態和折中法在ASP.NET框架下的實現。偽靜態主要利用HttpModule對Http請求進行攔截,從而重定向頁面地址;折中法主要利用HttpHandler生成并返回真實的靜態頁面文件。3種實現方案各有特點,應根據不同的動態頁面選擇不同的實現方案。讀寫比是一個可供分類網頁的參數,讀寫比高的頁面可使用折中法實現,更新頻率極低的頁面可考慮使用真靜態法,而讀寫比低的頁面可使用偽靜態法實現。
參考文獻:
[1]趙志勤,朱永虎,林玉鳳.面向數據分析的Web頁面靜態化方法研究與實現[J].現代計算機,2014 (13):37-40.
[2]曾小燕,周統鋼.基于數據集成的頁面靜態化方法在政務網站的應用[J].電腦知識與技術,2014,10(15):3695-3696.
[3]沈陽.基于HttpHandler的頁面靜態化[J].數字技術與應用,2012 (1):50-51.
[4]白萬民,吳夫丹,白小軍.Web應用中的網頁靜態化技術研究[J].西安工業大學學報,2014,34(1):34-37.
(責任編輯:杜能鋼)