靜態化是有很大好處的。最值得稱道的應該是加快下載速度,更利于搜索引擎的抓取,這兩點對一個企業網站來說應該比較重要吧。
?
一般的靜態化是通過fso組件讀取網站模板的內容,然后替換其中的特定字符,生成靜態頁面,這是個不錯的想法,如果你要自己寫一個網站,建議你用這種辦法,因為比較穩定。而且如果想以后更換網站界面也相當容易,只需修改模板而無需更改程序。這個辦法很多高手已經說得很明白了,推薦一個:
http://www.jingzhengli.cn/Blog/zjh/265.html
?
然而很不幸,很多公司的網站已經做好,而且每一頁都是html中夾雜大量asp代碼的形式,沒有模板,功能也沒有模塊化,如果想仍用以上方法進行靜態化處理,其復雜程度相當于重做一個網站。
?
提出一個簡單宜用的解決辦法。不用模板、不用修改程序,非常便捷。利用XMLHTTP對象及其方法。他的原理是將已有的asp網頁內容一次性讀取出來,然后寫到靜態頁中,實現網站的靜態化重構。
?
?
Url="http://www.rocky-glass.com/default.asp" ‘定義動態首頁
wstr = GetPage(Url) ‘把動態首頁的內容全部讀取出來
?
Set fs=Server.CreateObject("Scripting.FileSystemObject")
?
Set CrFi=fs.CreateTextFile(server.MapPath("../")&"\index.htm") ‘創建靜態首頁index.htm
CrFi.Writeline(wstr) ‘將讀取出的內容寫入靜態頁面
set CrFi=nothing ‘關閉兩個對象
set fs=nothing
?
以下兩個函數涉及到xmlhttp對象和方法的使用,如果能看懂就看,看不懂直接調用就行。
Function GetPage(url)
‘此過程的功能是實現把
asp
網頁的內容一次性讀取出來。
dim Retrieval
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False ', "", ""
.Send
GetPage = BytesToBstr(.ResponseBody)
End With
Set Retrieval = Nothing
End Function
?
Function BytesToBstr(body)
‘字符轉換
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = "utf-8" ‘如果是中文頁面請用gb2312.,英文頁面用utf-8
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
?
首頁的靜態化就完成了,生成為 index.htm 這個靜態頁,其他的頁面也可以按照這個思路進行,利用不同的后綴id值,就可以批量生成所有網頁。
?
兩點注意:1、如果是批量生成頁面要保證網速,否則程序的運行很容易超出服務器的允許時間。
????????? 2、生成英文頁面的時候,要保證原頁面上沒有漢字或其他語言,否則生成出錯。
?
這種靜態化相對比較容易,尤其是那些對那些寫的很差勁的網站進行靜態化處理。我一直用這種方法給企業靜態化處理。
有機會我會把這種方法進一步寫成類,方便各位網友調用。
?
下邊說說兩種騙人的靜態化方案,引起各位注意。
1、?框架偽靜態,這種是非常簡單而且也是非常便于識別的,它的原理比較簡單,就是做一個靜態的主框架頁面,然后把動態的內容鏈入副框架內,這個單從它的URL就可以看出眉目,如果整個網站的URL都是一樣的,那么就一定是框架偽靜態的。這種所謂的靜態化不僅達不到優化的目的,而且還不如不優化。
2、?利用組件把asp的輟顯示為htm,它主要是利用一個組件強制性的把asp文件的后輟顯示為htm,比較有名的組件是MOD REWRITE,這種東西只是在形式上讓你感覺已經靜態化了,其實仍然是執行動態網頁。識別這個也比較容易,那就是看看有沒有生成靜態頁就是了。如果沒有生成靜態頁,顯然是騙人的,因為只有動態頁才是虛擬的,從數據庫中調用數據進行顯示,而靜態頁面一定是獨立的。當然,利用這種方案可以起到seo優化作用,但是對訪問速度來說,是一點提高都沒有的,而且還有可能降低訪問速度。