ASP javascript Application對象的Contents和StaticObjects做Cache的一些經驗

來源:互聯網
上載者:User

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的一半。看來時間主要花費在取得'引用',而不是StaticObjects記憶體區被保護慢。StaticObjects相對Contents安全措施更好,因為裡面要存對象。

靠Dictionary強大的功能,適當的封裝一下,用put(),get(),contains()等等流行方法訪問,就是一個強大的Cache了。

////備忘
我封裝了一個.sct組件;asp javascript寫的,有空發上來,今天到此。

測試了取得Contens和StaticObjects引用的速度,在20次時都是0ms,100次大約5倍速度,500-1500次是10倍速度差距。不過取得後存取不受影響。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.