ASP G级Access网站优化

如果做企业站,ASP+Access是一个最佳选择。但是如果Access的数据库达到G级别,那么性能可能就会大大的下降。如果数据库没有优化,打开asp页面几秒是常有的事情。如果一个Access表内几十万条数据,恰巧ASP页面又有几十个查询,可能就悲剧了。网站打开时间要按分钟计算了。

Asp+Access以前数据量少的时候,没有任何问题。数据量一大,各种麻烦的问题就多了起来。总不能让客户等几分钟打开首页把。

最早的解决方案是将index.asp修改成index.res.asp,用XMLHTTP请求index.res.asp,将结果保存为文件、调用时间到文件,然后调用文件的内容,和时间,如果超时后,重新调用。

这种方案也用了很久,虽然解决了问题,但是效果仍不理想。多人同时访问的时候(经常,页面打开很慢),恰巧内容又超时了。仍然会出现服务器宕机的情况。

今天服务器有出现问题,实在受不了,为数据增加索引,效果仍然不明显。想到可以用Application来保存网页缓存。速度有提高,但是离理想的效果还是差很远。

决心大改动,从18点~23点,耗时五个钟头,终于做出了一套比较完美的方案。


function is_cache(na)
    if application("catseven_cache_"& na) =""then
        is_cache = false
    else
        if not isdate(application("catseven_cachetime_"& na)) then
            is_cache = false
        else
            da = cdate(application("catseven_cachetime_"& na))
            if datediff("n",da,now()) > 60 then
                is_cache = false
            else
                is_cache = true
            end if
        end if
    end if
end function
 
function do_cache(na,va)
    application("catseven_cache_"& na) = va
    randomize()
    application("catseven_cachetime_"& na) = dateadd("s",cLng(rnd()*6000),now())
end function
 
function ech_cache(na)
    response.write application("catseven_cache_"& na)

end function

na是缓存名,不可重复

call cachename = "miaoqiyuan"

if not is_cache(cachename) then

   '执行代码(即以前的代码),结果保存为 tmpstring

   call do_cache(cachename,tmpstring)

end if

call ech_cache(cachename)

运行情况如下图所示。

第一个用户完整访问完一次后,其他用户不用读取数据库,直接访问缓存。


在第一个用户访问期间,如果有其他用户访问,已经缓存的部分,也无需读取数据库。所以仅在启动程序池的时候速度会较慢,以后的访问者访问速度会越来越快(已完成的缓存越来越多)。


假如仅一个人访问,一个小时后,缓存超时,再次访问,仍可能出现访问较慢。所以在保存缓存的时候增加了随机到期时间来提高访问速度。缓存有效期是50~60分钟不等。

来源:http://www.miaoqiyuan.cn/p/asp-use-big-access-db



Copyright © 2014 ASP技巧教程源码大全 All Rights Reserved
晋ICP备14006235号-3 页面执行时间:93.750毫秒 返回顶部