應用程序對象的內置集合具有存儲簡單類型的內容,默認應用程序(“key”)可以使用這些類型,下面是ASP javascript Application對象的Contents和StaticObjects做Cache的一些經驗,一起進入下文了解一下吧!
使用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的一些經驗就為各位朋友們介紹到這里了,大家看完之后,是不是受益匪淺呢?
新聞熱點
疑難解答