ASP javascript Application對(duì)象的Contents和StaticObjects做Cache的一些經(jīng)驗(yàn)
更新時(shí)間:2008年05月18日 21:35:39 作者:
ASP javascript: Application對(duì)象的Contents和StaticObjects做Cache的一些結(jié)論。
ASP封裝Cache對(duì)象,一般都是基于Application的,
Application對(duì)象內(nèi)置集合有為存放簡(jiǎn)單類型設(shè)計(jì)的Contents,默認(rèn)Application("key")就可以使用。
不過(guò)Application.Contents不能存放對(duì)象,可以存vbs數(shù)組,但是在javascript下甚至數(shù)組都不能放。
使用Application.Contents時(shí),只能用丑陋的如:
for(var i=0;i<15000;i++){
Application.Lock();
// Application.Contents(i)="sdfdsffdsaf";
Application(i)="sdfdsffdsaf";
Application.Unlock();}
在這里往Application.Contents存放了1.5w個(gè)String,共花費(fèi)時(shí)間234ms.
改用Application.StaticObjects后:
定義一個(gè)Dictionary作為StaticObject,用于存放數(shù)據(jù),因?yàn)镾taticObject是不允許直接訪問(wèn)的。
<object id="dict" runat="server" scope="Application" progid="Scripting.Dictionary"></object>
Scripting.Dictionary本身的速度很快,不會(huì)對(duì)比較StaticObjects集合速度造成太大影響.
Dictionary的速度:
var d=new ActiveXObject("Scripting.Dictionary");
for(var i=0;i<15000;i++){
d.Item(i)="sdfdsffdsaf";}
1.5w次插值,172ms
當(dāng)然自定義對(duì)象var d=new Object(); d[i]=..更快,1.5w次只要80-90ms,不過(guò)功能弱多了,所以還是用字典.
下面看正式測(cè)試
for(var i=0;i<15000;i++){
Application.Lock();
Application.StaticObjects("dict").Item(i)="sdfdsffdsaf";
Application.Unlock();}
時(shí)間長(zhǎng)達(dá)6953ms,初步判斷StaticObjects集合的訪問(wèn)速度是不能滿足Cache的要求了,這個(gè)速度和ADO OLEDB讀sql server 2000的時(shí)間相差無(wú)幾。
不過(guò)還不打算馬上放棄,因?yàn)镾taticObjects的優(yōu)勢(shì)在于可以存放Object,而Dictionary也可以存放其它對(duì)象,這樣可以做為緩存對(duì)象,而不僅僅是數(shù)據(jù)。
我在Application.StaticObjects("dict")里面再放入一個(gè)Object:
Application.StaticObjects("dict").Item("o")=new Object();
for(var i=0;i<15000;i++){
Application.Lock();
Application.StaticObjects("dict").Item("o")[i]="sdfdsffdsaf";
Application.Unlock();}
6656ms,快了點(diǎn)點(diǎn).多一層Object并沒有降低速度,那么速度的慢并非結(jié)構(gòu)復(fù)雜,而是StaticObjects的訪問(wèn)占用。
把dict的引用預(yù)存
var t=Application.StaticObjects("dict");
for(var i=0;i<15000;i++){
Application.Lock();
t.Item("o")[i]="sdfdsffdsaf";
Application.Unlock();}
3094ms,成功的減少一半多點(diǎn)的時(shí)間,js中屢試不爽的預(yù)存策略,要是把t.Item("o")也預(yù)存呢?
var t=Application.StaticObjects("dict").Item("o");
for(var i=0;i<15000;i++){
Application.Lock();
t[i]="sdfdsffdsaf";
Application.Unlock();}
125ms,終于成功了,只有Application.Contents的一半。看來(lái)時(shí)間主要花費(fèi)在取得'引用',而不是StaticObjects內(nèi)存區(qū)被保護(hù)慢。StaticObjects相對(duì)Contents安全措施更好,因?yàn)槔锩嬉鎸?duì)象。
靠Dictionary強(qiáng)大的功能,適當(dāng)?shù)姆庋b一下,用put(),get(),contains()等等流行方法訪問(wèn),就是一個(gè)強(qiáng)大的Cache了。
////備注
我封裝了一個(gè).sct組件;asp javascript寫的,有空發(fā)上來(lái),今天到此。
測(cè)試了取得Contens和StaticObjects引用的速度,在20次時(shí)都是0ms,100次大約5倍速度,500-1500次是10倍速度差距。不過(guò)取得后存取不受影響。
不過(guò)Application.Contents不能存放對(duì)象,可以存vbs數(shù)組,但是在javascript下甚至數(shù)組都不能放。
使用Application.Contents時(shí),只能用丑陋的如:
for(var i=0;i<15000;i++){
Application.Lock();
// Application.Contents(i)="sdfdsffdsaf";
Application(i)="sdfdsffdsaf";
Application.Unlock();}
在這里往Application.Contents存放了1.5w個(gè)String,共花費(fèi)時(shí)間234ms.
改用Application.StaticObjects后:
定義一個(gè)Dictionary作為StaticObject,用于存放數(shù)據(jù),因?yàn)镾taticObject是不允許直接訪問(wèn)的。
<object id="dict" runat="server" scope="Application" progid="Scripting.Dictionary"></object>
Scripting.Dictionary本身的速度很快,不會(huì)對(duì)比較StaticObjects集合速度造成太大影響.
Dictionary的速度:
var d=new ActiveXObject("Scripting.Dictionary");
for(var i=0;i<15000;i++){
d.Item(i)="sdfdsffdsaf";}
1.5w次插值,172ms
當(dāng)然自定義對(duì)象var d=new Object(); d[i]=..更快,1.5w次只要80-90ms,不過(guò)功能弱多了,所以還是用字典.
下面看正式測(cè)試
for(var i=0;i<15000;i++){
Application.Lock();
Application.StaticObjects("dict").Item(i)="sdfdsffdsaf";
Application.Unlock();}
時(shí)間長(zhǎng)達(dá)6953ms,初步判斷StaticObjects集合的訪問(wèn)速度是不能滿足Cache的要求了,這個(gè)速度和ADO OLEDB讀sql server 2000的時(shí)間相差無(wú)幾。
不過(guò)還不打算馬上放棄,因?yàn)镾taticObjects的優(yōu)勢(shì)在于可以存放Object,而Dictionary也可以存放其它對(duì)象,這樣可以做為緩存對(duì)象,而不僅僅是數(shù)據(jù)。
我在Application.StaticObjects("dict")里面再放入一個(gè)Object:
Application.StaticObjects("dict").Item("o")=new Object();
for(var i=0;i<15000;i++){
Application.Lock();
Application.StaticObjects("dict").Item("o")[i]="sdfdsffdsaf";
Application.Unlock();}
6656ms,快了點(diǎn)點(diǎn).多一層Object并沒有降低速度,那么速度的慢并非結(jié)構(gòu)復(fù)雜,而是StaticObjects的訪問(wèn)占用。
把dict的引用預(yù)存
var t=Application.StaticObjects("dict");
for(var i=0;i<15000;i++){
Application.Lock();
t.Item("o")[i]="sdfdsffdsaf";
Application.Unlock();}
3094ms,成功的減少一半多點(diǎn)的時(shí)間,js中屢試不爽的預(yù)存策略,要是把t.Item("o")也預(yù)存呢?
var t=Application.StaticObjects("dict").Item("o");
for(var i=0;i<15000;i++){
Application.Lock();
t[i]="sdfdsffdsaf";
Application.Unlock();}
125ms,終于成功了,只有Application.Contents的一半。看來(lái)時(shí)間主要花費(fèi)在取得'引用',而不是StaticObjects內(nèi)存區(qū)被保護(hù)慢。StaticObjects相對(duì)Contents安全措施更好,因?yàn)槔锩嬉鎸?duì)象。
靠Dictionary強(qiáng)大的功能,適當(dāng)?shù)姆庋b一下,用put(),get(),contains()等等流行方法訪問(wèn),就是一個(gè)強(qiáng)大的Cache了。
////備注
我封裝了一個(gè).sct組件;asp javascript寫的,有空發(fā)上來(lái),今天到此。
測(cè)試了取得Contens和StaticObjects引用的速度,在20次時(shí)都是0ms,100次大約5倍速度,500-1500次是10倍速度差距。不過(guò)取得后存取不受影響。
您可能感興趣的文章:
- HTML5 WebStorage(HTML5本地存儲(chǔ)技術(shù))
- 常見的瀏覽器存儲(chǔ)方式(cookie、localStorage、sessionStorage)
- vue中使用sessionStorage記住密碼功能
- 使用sessionStorage解決vuex在頁(yè)面刷新后數(shù)據(jù)被清除的問(wèn)題
- 使用JS獲取SessionStorage的值
- 詳解Vue中l(wèi)ocalstorage和sessionstorage的使用
- jQuery訪問(wèn)瀏覽器本地存儲(chǔ)cookie、localStorage和sessionStorage的基本用法
- JS 中LocalStorage和SessionStorage的使用
- JS中LocalStorage與SessionStorage五種循序漸進(jìn)的使用方法
- ASP.NET中Application、Cookie、Session、Cache和ViewState
- ASP.NET中Application和Cache的區(qū)別分析
- 異步 HttpContext.Current實(shí)現(xiàn)取值的方法(解決異步Application,Session,Cache...等失效的問(wèn)題)
- indexedDB bootstrap angularjs之 MVC DOMO (應(yīng)用示例)
- 5個(gè)HTML5的常用本地存儲(chǔ)方式詳解與介紹
相關(guān)文章
asp中通過(guò)fso讀取和生成UTF-8編碼的txt
利用fso.OpenTextFil讀取UTF-8文件或者用FSO.save生成UTF-8文件時(shí)亂碼解決辦法生成靜態(tài)頁(yè)使用的方法是讀取asp頁(yè)面的html代碼,保存為html文件,這種方法2013-08-08
asp導(dǎo)出excel文件最簡(jiǎn)單方便的方法
這篇文章主要介紹了asp導(dǎo)出excel文件最簡(jiǎn)單方便的方法,幾行代碼就可以搞定,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2014-08-08
ASP提示錯(cuò)誤 ''8002801d''的解決辦法
這篇文章主要介紹了ASP提示錯(cuò)誤 '8002801d'的解決辦法,本文使用重新注冊(cè)的方法解決了這個(gè)問(wèn)題,需要的朋友可以參考下2014-09-09
IIS7.5調(diào)用asp頁(yè)面出現(xiàn)800a0e7a的解決辦法
本文給大家分享的是在windows2008R2 64位系統(tǒng)中出現(xiàn)了ADODB.Connection 錯(cuò)誤 '800a0e7a'的解決辦法,方法很簡(jiǎn)單,可是處理過(guò)程卻很曲折,這里推薦給大家,有需要的小伙伴可以參考下。2015-05-05
asp取動(dòng)態(tài)表單中數(shù)據(jù)并寫入xml文件,用xsl顯示
asp取動(dòng)態(tài)表單中數(shù)據(jù)并寫入xml文件,用xsl顯示...2006-09-09

