Application對象內置集合有為存放簡單類型設計的Contents,默認Application("key")就可以使用。
不過Application.Contents不能存放對象,可以存vbs數組,但是在javascript下甚至數組都不能放。
使用Application.Contents時,只能用丑陋的如:
for(var i=0;i<15000;i++){
Application.Lock();
// Application.Contents(i)="sdfdsffdsaf";
Application(i)="sdfdsffdsaf";
Application.Unlock();}
在這里往Application.Contents存放了1.5w個String,共花費時間234ms.
改用Application.StaticObjects后:
定義一個Dictionary作為StaticObject,用于存放數據,因為StaticObject是不允許直接訪問的。
<object id="dict" runat="server" scope="Application" progid="Scripting.Dictionary"></object>
Scripting.Dictionary本身的速度很快,不會對比較StaticObjects集合速度造成太大影響.
Dictionary的速度:
var d=new ActiveXObject("Scripting.Dictionary");
for(var i=0;i<15000;i++){
d.Item(i)="sdfdsffdsaf";}
1.5w次插值,172ms
當然自定義對象var d=new Object(); d[i]=..更快,1.5w次只要80-90ms,不過功能弱多了,所以還是用字典.
下面看正式測試
for(var i=0;i<15000;i++){
Application.Lock();
Application.StaticObjects("dict").Item(i)="sdfdsffdsaf";
Application.Unlock();}
時間長達6953ms,初步判斷StaticObjects集合的訪問速度是不能滿足Cache的要求了,這個速度和ADO OLEDB讀sql server 2000的時間相差無幾。
不過還不打算馬上放棄,因為StaticObjects的優勢在于可以存放Object,而Dictionary也可以存放其它對象,這樣可以做為緩存對象,而不僅僅是數據。
我在Application.StaticObjects("dict")里面再放入一個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,快了點點.多一層Object并沒有降低速度,那么速度的慢并非結構復雜,而是StaticObjects的訪問占用。
把dict的引用預存
var t=Application.StaticObjects("dict");
for(var i=0;i<15000;i++){
Application.Lock();
t.Item("o")[i]="sdfdsffdsaf";
Application.Unlock();}
3094ms,成功的減少一半多點的時間,js中屢試不爽的預存策略,要是把t.Item("o")也預存呢?
var t=Application.StaticObjects("dict").Item("o");
for(var i=0;i<15000;i++){
Application.Lock();
t[i]="sdfdsffdsaf";
Application.Unlock();}
125ms,終于成功了,只有Application.Contents的一半??磥頃r間主要花費在取得'引用',而不是StaticObjects內存區被保護慢。StaticObjects相對Contents安全措施更好,因為里面要存對象。
靠Dictionary強大的功能,適當的封裝一下,用put(),get(),contains()等等流行方法訪問,就是一個強大的Cache了。
////備注
我封裝了一個.sct組件;asp javascript寫的,有空發上來,今天到此。
測試了取得Contens和StaticObjects引用的速度,在20次時都是0ms,100次大約5倍速度,500-1500次是10倍速度差距。不過取得后存取不受影響。
ASP javascript Application對象的Contents和StaticObjects做Cache的一些經驗
2019-09-27 09:09asp教程網 ASP教程
ASP javascript: Application對象的Contents和StaticObjects做Cache的一些結論。 ASP封裝Cache對象,一般都是基于Application的,
延伸 · 閱讀
- 2024-12-131.4 萬人聯名請愿,要求取消甲骨文的 JavaScript 商
- 2022-03-10JavaScript設計模式學習之代理模式
- 2022-03-10JavaScript設計模式之職責鏈模式
- 2022-03-10JavaScript設計模式之命令模式
- 2022-03-09JavaScript 實現頁面滾動動畫
- 2022-03-09詳解JavaScript錯誤捕獲
- ASP教程
asp之基于adodb.stream的文件操作類
asp之基于adodb.stream的文件操作類...
- ASP教程
asp 采集實戰代碼
最近實在是太流行采集了,本人是不喜歡采集的,但對采集的原理我卻很有興趣進行研究,拿到了網上采集常用函數,對其進行了一番研究,并實戰,結果...
- ASP教程
asp+javascript實現404頁的處理轉換
asp+javascript實現404頁的處理轉換...
- ASP教程
asp 標記字符串中指定字符變色不區分大小寫
今天遇到這種問題,單純的使用replace函數不行,他會改變原有的字符串的大小寫,在網上找到相關的代碼,自己備份下...
- ASP教程
JScript中遍歷Request表單參數集合的方法
這篇文章主要介紹了JScript中遍歷Request表單參數集合的方法,本文以遍歷Request.QueryString集合為例給出了實現代碼,需要的朋友可以參考下...
- ASP教程
asp Access數據備份,還原,壓縮類代碼
asp Access數據備份,還原,壓縮類實現代碼,大家可以參考下。...
- ASP教程
ASP.NET 數據源
數據源 一個 data sourse 控件與數據綁定的控件相互作用,并隱藏了復雜的數據的聯編過程。這些是提供數據給 data bound 控件的工具,并且支持如插入,刪除...
- ASP教程
ASP常用函數:getpy()
ASP常用函數:getpy()...