静态化是有很大好处的。最值得称道的应该是加快下载速度,更利于搜索引擎的抓取,这两点对一个企业网站来说应该比较重要吧。
一般的静态化是通过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优化作用,但是对访问速度来说,是一点提高都没有的,而且还有可能降低访问速度。