静态页转换平台(StaticPol)-静态页生成终极解决方案(转)
靜態頁轉換平臺(StaticPol)-靜態頁生成終極解決方案(轉)
from? http://www.cnblogs.com/pbwf/我本身非常不喜歡寫文字材料,但是這個東西相信是很多人都需要的,把心得寫出來和大家分享一下,也好讓大家都努力PP,以助于盡快完善這個東東,早日貼出來供大家下載使用。
??? 為什么要生成靜態頁?
這個問題咱們就不多說了,他的優點只有一個,大大提高網站性能,對于數據量大、訪問量大的網站不采用靜態頁輸出的解決方案,恐怕真受不了了。缺點就不說了,一大堆...。不過單這一個優點就值得我們研究一番。下面咱們討論一下靜態頁生成方案的常規處理方式和 StaticPol 靈活的處理方式,對他們進行一個比較。
??? 說他是一個平臺的理由:
常規方式:在每個程序中為靜態頁生成寫相應的模塊(程序),執行對應的更新,而且一般都是手動更新(首頁、分類頁、信息頁),好麻煩,即使是定時更新,也要寫相應的程序來執行。
StaticPol:他雖然獨立運行于 Asp.Net 下,但是可以為 Asp、PHP、Asp.Net、JSP 等任何一種語言編寫的程序提供相應的靜態頁生成服務,為其提供相應的靜態頁解決方案。
??? 說他是終極解決方案的理由:
常規方式:要么是寫程序批量更新,要么就是在添加、修改或刪除的時候進行更新。前者就不多說了,簡直一個垃圾處理方式,但是還是很多人在使用,后者還好些,但是程序就很死板,任何的一點配置上的變動都要涉及到程序的改動。
StaticPol:靜態頁的生成和更新都是發生在用戶訪問時(用戶不訪問則不生成,因為生成了也沒有意義),并且頁面的更新是通過策略來控制的,無需人工進行參與,也就是說你只要定義好更新策略就可以,剩下的就由 StaticPol 來幫你完成。用戶訪問時生成可以節省大量的IO操作資源,策略管理更新可以達到幾乎和動態管理功能同步的境界,所以我稱之為終極解決方案。
??? 好了,下面就開始簡單介紹一下 StaticPol 的執行原理吧:
StaticPol 主要由兩個 aspx 文件組成。
Index.aspx : 用于處理 404 錯誤頁的處理。
UpdateStaticFile.aspx : 用于實施對生成頁面的策略更新。
Web.config : 存儲系統的配置信息,靜態更新策略信息。
下面就是我的官方站靜態更新策略的部分配置信息:
?<!--
?靜態頁生成策略
?MakeFilePath?: 靜態頁地址的規則
?LookFor???: 用于生成該靜態頁的動態頁面地址的規則
?UpdatePolicy?: 該頁生成的規則
??????◎ None???: 無操作
??????◎ Handwork??: 手動(和系統最后更新時間進行比較)
??????◎ Timespan??: 時間差
?LastUpdateTime?: 本策略使用的最后更新時間(只有 UpdatePolicy 為 Handwork 時才有效)
?UpdateTimeUrl?: 從指定 Url 上獲取本策略使用的最后更新時間(只有 UpdatePolicy 為 Handwork 時才有效)
?TimeSpan??: 更新的時間差(單位 分鐘,只有 UpdatePolicy 為 Timespan 時才有效)
?-->
?<StaticPolConfig>
??<Rules>
???<PolRule Remark="首頁">
????<MakeFilePath>~/([-_,A-Za-z0-9]+)\.html</MakeFilePath>
????<LookFor>~/$1.aspx</LookFor>
????<UpdatePolicy>Timespan</UpdatePolicy>
????<TimeSpan>10</TimeSpan>
???</PolRule>?
???<PolRule Remark="信息頁">
????<MakeFilePath>~/Index/Catalog(\d+)/(\d+)\.html</MakeFilePath>
????<LookFor>~/Index/Catalog$1/$2.aspx</LookFor>
????<UpdatePolicy>Handwork</UpdatePolicy>
????<UpdateTimeUrl>~/Index/Catalog$1/$2.aspx/LastUpdateTime</UpdateTimeUrl>
???</PolRule>
???<PolRule Remark="其他頁">
????<MakeFilePath>~/Index/([-_,A-Za-z0-9]+)\.html</MakeFilePath>
????<LookFor>~/Index/$1.aspx</LookFor>
????<UpdatePolicy>Handwork</UpdatePolicy>
????<LastUpdateTime>2005-9-25 10:50:30</LastUpdateTime>
???</PolRule>
??</Rules>
?</StaticPolConfig>
??? 下面就來介紹一下他的執行過程,我們以IIS為例,首先自定義網站的 404 錯誤頁為StaticPol 中那個Index.aspx,這樣接著我們訪問這個地址 http://www.seaskyer.net/Index.html ,這個文件默認首次訪問肯定是不存在的,IIS會自動轉交給404錯誤頁進行處理,也就是剛才設定的那個 Index.aspx 頁面,這個時候他開始檢測策略配置中是否有匹配的路徑,檢測到第一個就符合,于是http://www.seaskyer.net/Index.html?是匹配地址 http://www.seaskyer.net/Index.aspx 的,在 404 錯誤頁中就會處理下載 http://www.seaskyer.net/Index.aspx 中的內容并保存回靜態路徑 ~/Index.html,很顯然目錄就是網站的根目錄下,然后使用腳本 window.location.reload(),此時文件 Index.html 是已經存在的了,就直接訪問那個靜態頁文件了,不在進行 404 錯誤頁處理了。此后再有用戶訪問時就直接訪問的是那個靜態頁 Index.html 了。
??? 從配置中我們還可以看出他是每 10 分鐘更新一次的,那么他是通過什么方式進行的自動更新的呢?
原理也很簡單,在生成那個靜態頁的同時,我們還在那個頁面中插入了一段腳本,如:<script language="javascript" src="/StaticPol/UpdateStaticFile.aspx?requestedPath=/Index.html"></script> ,前面已經提到過,UpdateStaticFile.aspx 這個文件就是專門用來處理對生成頁面的策略更新的,那他又是如何更新的呢。同樣的道理,通過傳遞過來的參數值requestedPath,可以得到處理的頁面,然后檢測是否有符合更新的策略,通過傳遞過來的路徑檢測到第一個策略就符合該路徑,通過檢測文件 Index.html 的修改時間和當前時間進行比較,如果大于 10 分鐘就會重新獲取內容完成頁面的更新,只要是在 10 分鐘之內就不會更新。
??? 其他的基本上都是這個原理,說的也許還不太詳細,等抓些圖再貼些代碼上來就OK了,今天就先寫到這里,以后補上。
目前我的官方站:http://www.seaskyer.net/ (海天人) 就是采用的這個方案。大家可以去看看這個演示。
有的時候下下來的代碼都不知道放哪里了.在這備注一下:)
D:\StaticPol
轉載于:https://www.cnblogs.com/lxinxuan/archive/2006/09/05/495181.html
總結
以上是生活随笔為你收集整理的静态页转换平台(StaticPol)-静态页生成终极解决方案(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: anaconda3下opencv安装
- 下一篇: hdu2570(贪心)