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 
%> 
相关文章