HTML静态网站能尽可能的减轻服务器的负载,加快网站访问速度,提高网页的收录量和引擎关键字排名,但对于内容多的网站,大批量生成HTML时会导致服务器在生成时无法访问,而在添加时生成的内容页却因为后续内容的添加还得时不时生成一下,这可是个麻烦事
我在/网站时,实现以了下功能,所有静态内容页定时自动生成一次,如一个新闻页,可以定为三天自动生成一次,每三天一旦有客户访问,系统即会判断是不是三天前的老内容,如果是即在后台悄无声息的自动更新一次!如 引用代码为:
ChannelID=1&ID=6399&ht=898868&jt=600其中
ChannelID=1代表新闻模型生成
ID=6399 表示新闻ID
ht=898868 上次生在时间 -- 本月1号0时0分到上次生成秒数
jt=600 间隔生成时间,表示每600秒即自动生成一次
--------以下是具体做法
1 在需要自成的内容页模板中,添加JS引用,如下
--------jt=86400代表1天生成一次,你可以改成别的数字
2 根目录新建文件夹 asp2html ,在里面新建文件 autohtml.asp 内容如下
-------------------以下为ASP代码---------------------------
Response.Buffer=true
Dim KSCls
Set KSCls = New RefreshHtmlSave
KSCls.Kesion()
Set KSCls = Nothing
Class RefreshHtmlSave
Private KS,KSRObj,ht,jt,ChannelID,ItemName,Table,f,ReturnInfo,FsoHtmlList
Private Sub Class_Initialize()
Set KS=New PublicCls
Set KSRObj=New Refresh
End Sub
Private Sub Class_Terminate()
Call CloseConn()
Set KSRObj=Nothing
Set KS=Nothing
End Sub
Public Sub Kesion()
Server.ScriptTimeOut=9999
ht = int(Request("ht")) '上次生成时间数 本月1号0时0分到上次生成秒数
jt = int(Request("jt")) '间隔生成的时间 '600=10分钟,86400=1天,259200=3天 604800=7天,864000=10天,1296000=15天,最大为=2592000=30天
ChannelID = Request("ChannelID") '按频道处理
Application("auto_htmltime")=0
if not(IsNumeric(ChannelID)) or not(IsNumeric(Request("ID"))) or not(IsNumeric(ht)) or not(IsNumeric(jt)) then
response.end:Exit Sub
else
Application.Lock
Application("auto_htmltime")=int(day(Date)*86400+timer)-ht '本月1号0时0分到现在所经过的秒数-上次生成秒数
Application.UnLock
end if
Table=KS.C_S(ChannelID,2)
ItemName=KS.C_S(ChannelID,3)
if int(Application("auto_htmltime"))>jt or int(Application("auto_htmltime"))<0 then
If KS.C_S(ChannelID,7)<>1 and KS.C_S(ChannelID,7)<>2 Then Exit Sub
Call RefreshContent
end if
End Sub
'生成内容页的处理过程
Sub RefreshContent()
Dim NowNum, R_Sql, R_RS, TotalNum,ID,UpdateSql
Dim StartDate, EndDate, FolderID, RefreshTotalNum,StartID,EndID
NowNum = 0
RefreshTotalNum=1
ID=KS.G("ID")
R_Sql="Select * From " & Table &" where Verific=1 and ID =" & id
If DataBaseType=1 Then
Dim Cmd : Set Cmd = Server.CreateObject("ADODB.Command")
Set Cmd.ActiveConnection=conn
Cmd.CommandText="KS_TSql"
Cmd.CommandType=4
CMD.Prepared = true
Cmd.Parameters.Append cmd.CreateParameter("@SQL",202,1,8000,R_Sql)
Set R_RS=Cmd.Execute
Set Cmd=Nothing
Else
Set R_RS=Conn.Execute(R_Sql)
End If
If R_RS.EOF And R_RS.BOF Then
Response.Flush
R_RS.Close:Set R_RS=Nothing
Exit Sub
Else
Dim DocXML:Set DocXML=KS.arrayToXml(R_RS.GetRows(1),R_RS,"row","root")
Set KSRObj.Node=DocXml.DocumentElement.SelectSingleNode("row")
KSRObj.ModelID=ChannelID
KSRObj.ItemID = KSRObj.Node.SelectSingleNode("@id").text
If KS.C_S(ChannelID,7)<>0 Then KSRObj.RefreshContent()
End If
R_RS.Close:Set R_RS=Nothing
End Sub
End Class
%>
-------------------ASP代码结束--------------------------
3 重新生成新闻页,即可发现页面中多了一个JS引用,你可以先把jt=86400改成10,即10秒自动生成一次,测试生成效果
{$getlasthtmltime} -------------这是一个本人写的自定义函数,在函数文件中添加一个即可,我的方法如下:
打开KS_CLS文件夹中的Kesion.Label.CommonCls.asp文件,找到
'=======网站通用参数开始===============
这一行,在下面的行中添加一行,如下
case "getlasthtmltime" echo int(day(Date)*86400+timer)
同样的道理,无论是新闻内,下载页,还是其它的,都可以用这个方法实现自动定期生成