在JScript中使用缓存技术的实际代码
2018-09-06 10:30
  在使用VBScript时,我们可以用Application缓存数组来实现缓存,例: 
程序代码: 
复制代码 代码如下:
Dimrs,arr 
rs.Openconn,sql,1,1 
arr=rs.GetRows() 
Application.Lock() 
Application(cache)=arr 
Applicatoin.UnLock()
在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,我们在使用Application储存一个数组时,会出现以下错误: 
引用内容: 
Applicationobject,ASP0197(0x80004005) 
Disallowedobjectuse 
Cannotaddobjectwithapartmentmodelbehaviortotheapplicationintrinsicobject. 
在微软的知识库可以找到具体原因如下: 
引用内容: 
JScriptarraysareconsideredtobeApartmentCOMcomponents.OnlyComponentObjectModel(COM)componentsthataggregatetheFreeThreadedMarshaler(FTM)canbeassignedtoApplicationscopewithinanInternetInformationServer(IIS)5.0ASPpage.BecauseanApartmentcomponentcannotaggregatetheFTM(itcannotallowadirectpointertobepassedtoitsclients,unlikeaBothwithFTMobject),JScriptarraysdonotaggregatetheFTM.Therefore,JScriptarrayscannotbeassignedtoApplicationscopefromanASPpage. 
以上描述引用自:PRB:ErrorWhenYouStoreaJScriptArrayinApplicationScopeinIIS5.0 
因此,为了解决这个问题,在Google里找了一大会,终于找到了一篇文章《Application对象的Contents和StaticObjects做Cache的一些结论》,解决了这个问题,方法就是使用Application.StaticObject存放一个Scripting.Dictionary对象,然后再使用Scripting.Dictionary对象来存放需要缓存的数据。 
据此,写了一个操作缓存的类,实现put、get、remove和clear方法,使用之前,需要在global.asa中添加一个object: 
程序代码: 
<objectid=xbsCacherunat=serverscope=Applicationprogid=Scripting.Dictionary></object> 
类的实现如下: 
复制代码 代码如下:
<scriptlanguage=JScriptrunat=server> 
/** 
Title:cacheoperateclass 
Description:operatesystemcache 
@Copyright:Copyright(c)2007 
@Author:xujiwei 
@Website:
@Version:1.0 
@Time:2007-06-2912:03:45 
**/ 
varxbsCache={ 
get:function(key){ 
returnApplication.StaticObjects(xbsCache).Item(Cache.+key); 
}, 
put:function(key,data){ 
Application.Lock(); 
Application.StaticObjects(xbsCache).Item(Cache.+key)=data; 
Application.UnLock(); 
}, 
remove:function(key){ 
Application.Lock(); 
Application.StaticObjects(xbsCache).Remove(Cache.+key); 
Application.UnLock(); 
}, 
clear:function(){ 
Application.Lock(); 
Application.StaticObjects(xbsCache).RemoveAll(); 
Application.UnLock(); 
} 
} 
</script>
如此,就完成了ASP中使用JScript时的缓存实现。 
上一篇:支持加号空格的查询