asp提高首页性能的一个技巧
简单介绍:一般一个网站的首页访问量是最大的,如果您的网站的首页打开的非常缓慢,您的客户将会陆续离开你的网站.通常我们把需要经过复杂运算或者查询数据库得出的数据缓存起来或者生成静态网页来提高web应用的性能,这次我们直接把首页的输出缓存成一个字符串,然后定时更新,即照顾了性能,又不影响首页的时效性.这里用到了一些vbs自定义类,application对象,xmlhttp对象,adodb.stream对象的一些东西,相关知识大家可以查资料了解.
最好让这个页和你要缓存的页在一个目录下,要不有些相对路径的图片就无法显示了,另外缓存有的页面会出现乱码,我还不知道怎么解决这个问题呢,可能在response的时候需要设置一下编码类型,大家可以试试
<%
dim wawa,startime,endtime
startime=timer()
set wawa=new cls_cache
wawa.reloadtime=0.5
wawa.cachename="wawa"
wawa.name="xmlinfoindex"
if wawa.objisempty() then cachexmlinfoindex()
response.write wawa.value
endtime=timer()
response.write "
执行时间:" & formatnumber((endtime-startime)*1000,5) & "毫秒。"
sub cachexmlinfoindex()
dim bodytext, xml
set xml = server.createobject("microsoft.xmlhttp")
'把下面的地址替换成你的首页的文件地址,一定要用http://开头的绝对路径,不能写相对路径
xml.open "get", "http://onlytiancai/bak/vote/infoindex.asp", false
xml.send
bodytext=xml.responsebody
bodytext=bytestobstr(bodytext,"gb2312")
wawa.value=bodytext
set xml = nothing
end sub
function bytestobstr(body,cset)
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 = cset
bytestobstr = objstream.readtext
objstream.close
set objstream = nothing
end function
%>
<%
'下面这个类可以保存在单独的文件里,然后包含到此页
class cls_cache
rem ==================使用说明==============================================
rem = 本类模块是动网先锋原创,作者:迷城浪子。如采用本类模块,请不要去掉这个说明。这段注释不会影响执行的速度。=
rem = 作用:缓存和缓存管理类 =
rem = 公有变量:reloadtime 过期时间(单位为分钟)缺省值为14400, =
rem = maxcount 缓存对象的最大值,超过则自动删除使用次数少的对象。缺省值为300 =
rem = cachename 缓存组的总名称,缺省值为"dvbbs",如果一个站点中有超过一个缓存组,则需要外部改变这个值。 =
rem = 属性:name 定义缓存对象名称,只写属性。 =
rem = 属性:value 读取和写入缓存数据。 =
rem = 函数:objisempty()判断当前缓存是否过期。 =
rem = 方法:delcahe(mycahename)手工删除一个缓存对象,参数是缓存对象的名称。 =
rem ================================================================
public reloadtime,maxcount,cachename
private localcachename,cachedata,delcount
private sub class_initialize()
reloadtime=14400
cachename="dvbbs"
end sub
private sub setcache(setname,newvalue)
application.lock
application(setname) = newvalue
application.unlock
end sub
private sub makeempty(setname)
application.lock
application(setname) = empty
application.unlock
end sub
public property let name(byval vnewvalue)
localcachename=lcase(vnewvalue)
end property
public property let value(byval vnewvalue)
if localcachename<>"" then
cachedata=application(cachename&"_"&localcachename)
if isarray(cachedata) then
cachedata(0)=vnewvalue
cachedata(1)=now()
else
redim cachedata(2)
cachedata(0)=vnewvalue
cachedata(1)=now()
end if
setcache cachename&"_"&localcachename,cachedata
else
err.raise vbobjecterror + 1, "dvbbscacheserver", " please change the cachename."
end if
end property
public property get value()
if localcachename<>"" then
cachedata=application(cachename&"_"&localcachename)
if isarray(cachedata) then
value=cachedata(0)
else
err.raise vbobjecterror + 1, "dvbbscacheserver", " the cachedata is empty."
end if
else
err.raise vbobjecterror + 1, "dvbbscacheserver", " please change the cachename."
end if
end property
public function objisempty()
objisempty=true
cachedata=application(cachename&"_"&localcachename)
if not isarray(cachedata) then exit function
if not isdate(cachedata(1)) then exit function
if datediff("s",cdate(cachedata(1)),now()) < 60*reloadtime then
objisempty=false
end if
end function
public sub delcahe(mycahename)
makeempty(cachename&"_"&mycahename)
end sub
end class
%>
最好让这个页和你要缓存的页在一个目录下,要不有些相对路径的图片就无法显示了,另外缓存有的页面会出现乱码,我还不知道怎么解决这个问题呢,可能在response的时候需要设置一下编码类型,大家可以试试
代码如下:
<%
dim wawa,startime,endtime
startime=timer()
set wawa=new cls_cache
wawa.reloadtime=0.5
wawa.cachename="wawa"
wawa.name="xmlinfoindex"
if wawa.objisempty() then cachexmlinfoindex()
response.write wawa.value
endtime=timer()
response.write "
执行时间:" & formatnumber((endtime-startime)*1000,5) & "毫秒。"
sub cachexmlinfoindex()
dim bodytext, xml
set xml = server.createobject("microsoft.xmlhttp")
'把下面的地址替换成你的首页的文件地址,一定要用http://开头的绝对路径,不能写相对路径
xml.open "get", "http://onlytiancai/bak/vote/infoindex.asp", false
xml.send
bodytext=xml.responsebody
bodytext=bytestobstr(bodytext,"gb2312")
wawa.value=bodytext
set xml = nothing
end sub
function bytestobstr(body,cset)
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 = cset
bytestobstr = objstream.readtext
objstream.close
set objstream = nothing
end function
%>
<%
'下面这个类可以保存在单独的文件里,然后包含到此页
class cls_cache
rem ==================使用说明==============================================
rem = 本类模块是动网先锋原创,作者:迷城浪子。如采用本类模块,请不要去掉这个说明。这段注释不会影响执行的速度。=
rem = 作用:缓存和缓存管理类 =
rem = 公有变量:reloadtime 过期时间(单位为分钟)缺省值为14400, =
rem = maxcount 缓存对象的最大值,超过则自动删除使用次数少的对象。缺省值为300 =
rem = cachename 缓存组的总名称,缺省值为"dvbbs",如果一个站点中有超过一个缓存组,则需要外部改变这个值。 =
rem = 属性:name 定义缓存对象名称,只写属性。 =
rem = 属性:value 读取和写入缓存数据。 =
rem = 函数:objisempty()判断当前缓存是否过期。 =
rem = 方法:delcahe(mycahename)手工删除一个缓存对象,参数是缓存对象的名称。 =
rem ================================================================
public reloadtime,maxcount,cachename
private localcachename,cachedata,delcount
private sub class_initialize()
reloadtime=14400
cachename="dvbbs"
end sub
private sub setcache(setname,newvalue)
application.lock
application(setname) = newvalue
application.unlock
end sub
private sub makeempty(setname)
application.lock
application(setname) = empty
application.unlock
end sub
public property let name(byval vnewvalue)
localcachename=lcase(vnewvalue)
end property
public property let value(byval vnewvalue)
if localcachename<>"" then
cachedata=application(cachename&"_"&localcachename)
if isarray(cachedata) then
cachedata(0)=vnewvalue
cachedata(1)=now()
else
redim cachedata(2)
cachedata(0)=vnewvalue
cachedata(1)=now()
end if
setcache cachename&"_"&localcachename,cachedata
else
err.raise vbobjecterror + 1, "dvbbscacheserver", " please change the cachename."
end if
end property
public property get value()
if localcachename<>"" then
cachedata=application(cachename&"_"&localcachename)
if isarray(cachedata) then
value=cachedata(0)
else
err.raise vbobjecterror + 1, "dvbbscacheserver", " the cachedata is empty."
end if
else
err.raise vbobjecterror + 1, "dvbbscacheserver", " please change the cachename."
end if
end property
public function objisempty()
objisempty=true
cachedata=application(cachename&"_"&localcachename)
if not isarray(cachedata) then exit function
if not isdate(cachedata(1)) then exit function
if datediff("s",cdate(cachedata(1)),now()) < 60*reloadtime then
objisempty=false
end if
end function
public sub delcahe(mycahename)
makeempty(cachename&"_"&mycahename)
end sub
end class
%>