在JScript中使用緩存技術(shù)的實(shí)際代碼
更新時(shí)間:2008年05月18日 21:29:36 作者:
在編寫ASP程序時(shí),通常為了提高ASP程序的運(yùn)行效率及減少對(duì)數(shù)據(jù)庫(kù)的連接和查詢,會(huì)使用緩存技術(shù)來緩存一些需要從數(shù)據(jù)庫(kù)讀取的數(shù)據(jù)。而在ASP中實(shí)現(xiàn)緩存的方法常用的就是使用Application對(duì)象。在編寫ASP程序時(shí),我們有兩種語(yǔ)言可以選擇,分別是VBScript和JScript。
在使用VBScript時(shí),我們可以用Application緩存數(shù)組來實(shí)現(xiàn)緩存,例:
程序代碼:
Dim rs,arr
rs.Open conn,sql,1,1
arr=rs.GetRows()
Application.Lock()
Application("cache")=arr
Applicatoin.UnLock()
在VBScript里,數(shù)組是可以存到Application對(duì)象里的,但是如果ASP的語(yǔ)言選擇為JScript的話,那么就有些不妙了,我們?cè)谑褂肁pplication儲(chǔ)存一個(gè)數(shù)組時(shí),會(huì)出現(xiàn)以下錯(cuò)誤:
引用內(nèi)容:
Application object, ASP 0197 (0x80004005)
Disallowed object use
Cannot add object with apartment model behavior to the application intrinsic object.
在微軟的知識(shí)庫(kù)可以找到具體原因如下:
引用內(nèi)容:
JScript arrays are considered to be "Apartment" COM components. Only Component Object Model (COM) components that aggregate the Free Threaded Marshaler (FTM) can be assigned to Application scope within an Internet Information Server (IIS) 5.0 ASP page. Because an "Apartment" component cannot aggregate the FTM (it cannot allow a direct pointer to be passed to its clients, unlike a "Both with FTM" object), JScript arrays do not aggregate the FTM. Therefore, JScript arrays cannot be assigned to Application scope from an ASP page.
以上描述引用自:PRB: Error When You Store a JScript Array in Application Scope in IIS 5.0
因此,為了解決這個(gè)問題,在Google里找了一大會(huì),終于找到了一篇文章《Application對(duì)象的Contents和StaticObjects做Cache的一些結(jié)論》,解決了這個(gè)問題,方法就是使用Application.StaticObject存放一個(gè)Scripting.Dictionary對(duì)象,然后再使用Scripting.Dictionary對(duì)象來存放需要緩存的數(shù)據(jù)。
據(jù)此,寫了一個(gè)操作緩存的類,實(shí)現(xiàn)put、get、remove和clear方法,使用之前,需要在global.asa中添加一個(gè)object:
程序代碼:
<object id="xbsCache" runat="server" scope="Application" progid="Scripting.Dictionary"></object>
類的實(shí)現(xiàn)如下:
<script language="JScript" runat="server">
/**
Title: cache operate class
Description: operate system cache
@Copyright: Copyright (c) 2007
@Author: xujiwei
@Website: http://www.xujiwei.cn/
@Version: 1.0
@Time: 2007-06-29 12:03:45
**/
var xbsCache = {
get: function(key) {
return Application.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時(shí)的緩存實(shí)現(xiàn)。
程序代碼:
復(fù)制代碼 代碼如下:
Dim rs,arr
rs.Open conn,sql,1,1
arr=rs.GetRows()
Application.Lock()
Application("cache")=arr
Applicatoin.UnLock()
在VBScript里,數(shù)組是可以存到Application對(duì)象里的,但是如果ASP的語(yǔ)言選擇為JScript的話,那么就有些不妙了,我們?cè)谑褂肁pplication儲(chǔ)存一個(gè)數(shù)組時(shí),會(huì)出現(xiàn)以下錯(cuò)誤:
引用內(nèi)容:
Application object, ASP 0197 (0x80004005)
Disallowed object use
Cannot add object with apartment model behavior to the application intrinsic object.
在微軟的知識(shí)庫(kù)可以找到具體原因如下:
引用內(nèi)容:
JScript arrays are considered to be "Apartment" COM components. Only Component Object Model (COM) components that aggregate the Free Threaded Marshaler (FTM) can be assigned to Application scope within an Internet Information Server (IIS) 5.0 ASP page. Because an "Apartment" component cannot aggregate the FTM (it cannot allow a direct pointer to be passed to its clients, unlike a "Both with FTM" object), JScript arrays do not aggregate the FTM. Therefore, JScript arrays cannot be assigned to Application scope from an ASP page.
以上描述引用自:PRB: Error When You Store a JScript Array in Application Scope in IIS 5.0
因此,為了解決這個(gè)問題,在Google里找了一大會(huì),終于找到了一篇文章《Application對(duì)象的Contents和StaticObjects做Cache的一些結(jié)論》,解決了這個(gè)問題,方法就是使用Application.StaticObject存放一個(gè)Scripting.Dictionary對(duì)象,然后再使用Scripting.Dictionary對(duì)象來存放需要緩存的數(shù)據(jù)。
據(jù)此,寫了一個(gè)操作緩存的類,實(shí)現(xiàn)put、get、remove和clear方法,使用之前,需要在global.asa中添加一個(gè)object:
程序代碼:
<object id="xbsCache" runat="server" scope="Application" progid="Scripting.Dictionary"></object>
類的實(shí)現(xiàn)如下:
復(fù)制代碼 代碼如下:
<script language="JScript" runat="server">
/**
Title: cache operate class
Description: operate system cache
@Copyright: Copyright (c) 2007
@Author: xujiwei
@Website: http://www.xujiwei.cn/
@Version: 1.0
@Time: 2007-06-29 12:03:45
**/
var xbsCache = {
get: function(key) {
return Application.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>
您可能感興趣的文章:
- 使用jscript實(shí)現(xiàn)二進(jìn)制讀寫腳本代碼
- JScript中調(diào)用ActiveX獲取訪客網(wǎng)卡MAC地址實(shí)現(xiàn)代碼
- 使用 JScript 創(chuàng)建 .exe 或 .dll 文件的方法
- JScript 腳本實(shí)現(xiàn)文件下載 一般用于下載木馬
- JScript中使用ADODB.Stream判斷文件編碼的代碼
- 解決 JScript 中使用日期類型數(shù)據(jù)時(shí)出現(xiàn)類型錯(cuò)誤的問題
- 解讀IE和firefox下JScript和HREF的執(zhí)行順序
- jscript讀寫二進(jìn)制文件的方法
相關(guān)文章
解決用Access數(shù)據(jù)庫(kù)建站維護(hù)不便的問題的方法
解決用Access數(shù)據(jù)庫(kù)建站維護(hù)不便的問題的方法...2007-05-05Asp Conn.execute的參數(shù)與返回值總結(jié)
這篇文章主要介紹了Asp Conn.execute的參數(shù)與返回值總結(jié),數(shù)據(jù)庫(kù)對(duì)象的execute方法參數(shù)與返回值總結(jié),需要的朋友可以參考下2014-07-07ASP運(yùn)行在IIS6 500錯(cuò)誤解決辦法
近日用ASP開發(fā)了一個(gè)進(jìn)銷存系統(tǒng)(開發(fā)環(huán)境:Windows2000+DW MX 2004+IIS 5.0),在本機(jī)上運(yùn)行、調(diào)試一切正常,沒有任何錯(cuò)誤信息,但將它放到windows server 2003上去就不行了2008-10-10Session.TimeOut的最大取值是1440,超出會(huì)報(bào)錯(cuò)
Session.TimeOut的取值以分鐘為單位,最大取值是1440分鐘,也就是24個(gè)小時(shí),如果給它賦一個(gè)更大的值2009-06-06利用ASP實(shí)現(xiàn)在線生成電話圖片效果腳本附演示
利用ASP實(shí)現(xiàn)在線生成電話圖片效果腳本附演示...2007-11-11