ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验

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倍速度差距。不过取得后存取不受影响。

(0)

相关推荐

  • Content-Location文件头定义方法(防止内部IP地址泄漏二法)

    当访问IIS网站上的静态HTML文件时,比如index.htm,IIS响应中会包含一个Content-Location文件头.如果IIS配置不当,Content-Location文件头中将包含服务器的IP地址内容,这样就导致了隐藏在NAT防火墙或者代理服务器后面的内部网IP地址信息的泄漏,给攻击者有漏可乘. 下面我就介绍2种解决办法,并不包含Content-Location'>文件头内容,所以接着要在IIS管理器中为之创建一个定制文件头,以返回特殊的Content-Location文件头内容.

  • header中Content-Disposition的作用与使用方法

    Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件.Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接在浏览器上显示或者在访问时弹出文件下载对话框. 格式说明: content-disposition = "Content-Disposition" ":" disposition-type *( ";" dis

  • asp.net RewritePath重定向HTTP头Content-Location暴露真实路径解决方法

    ASP.NET使用RewritePath重定向后,服务器响应的HTTP头会多个Content-Location: 复制代码 代码如下: HTTP/1.1 200 OK Content-Length: 48150 Content-Type: image/jpeg Content-Location: http://www.mzwu.com/test.jpg Last-Modified: Tue, 18 Dec 2012 15:01:50 GMT Accept-Ranges: bytes ETag:

  • ion content 滚动到底部会遮住一部分视图的快速解决方法

    出现上面这个问题主要的原因是产品的需求要求点击隐藏或者展开二级列表,导致ion-content出现这个问题,经过多次尝试终于找到解决办法,很简单,只要在你的controller里面预先注入$ionicScrollDelegate,如下代码 app.controller('myperforController', ['$scope', '$http', '$state', '$ionicLoading', 'service', '$ionicHistory','$ionicScrollDelega

  • ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验

    Application对象内置集合有为存放简单类型设计的Contents,默认Application("key")就可以使用. 不过Application.Contents不能存放对象,可以存vbs数组,但是在javascript下甚至数组都不能放. 使用Application.Contents时,只能用丑陋的如: for(var i=0;i<15000;i++){     Application.Lock();        // Application.Contents(i)

  • javascript asp教程第十一课--Application 对象

    Overview: The Application Object represents a collection of ASP pages. The Application object has zero (0) properties, two (2) collections, two (2) methods, and two (2) events. Get Started: Below are a couple scripts for lesson11. <%@LANGUAGE="Jav

  • ASP.NET内置对象之Application对象

    新建一个网站,包括两个网页,代码如下: 1.Index.aspx代码:  复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&

  • ASP基础入门第八篇(ASP内建对象Application和Session)

    在上一篇中作者给大家详细介绍了 ASP 内建对象 Response 的使用方法,在这一篇中作者将继续给大家介绍另两个非常实用且重要的 ASP 的内建对象 Application 和 Session. 在 ASP 的内建对象中除了用于发送.接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个用户信息的对象. 让我们先来看看 Application 对象.在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序.我们非但可以使用 Applicat

  • php模仿asp Application对象在线人数统计实现方法

    本文实例讲述了php模仿asp Application对象在线人数统计实现方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /* 用法: application('key','value'); //设置 key=value $value = application('key'); //获取 key的值 */   function application() {  $args = func_get_args(); //获取输入参数  if (count($args) >2 ||

  • asp 内置对象 Application 详解

    asp内置对象 Application 详解  在 ASP 的内建对象中除了用于发送.接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个用户信息的对象.  让我们先来看看 Application 对象.在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序.我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据.而且,Application 对象还有控制访问应用层数据的方法

  • ASP.NET中application对象的使用介绍

    Application对象的应用 1.使用Application对象保存信息 (1).使用Application对象保存信息 Application("键名") = 值 或 Application("键名",值) (2).获取Application对象信息 变量名 = Application("键名") 或:变量名 = Application.Item("键名") 或:变量名 = Application.Get("键

  • asp清空application的方法

    做网站中,如果用到了大量的application会占用大量的服务器资源,所以我们在退出后台的时候可以,清空下数据,网站的运行速度也会快Application 对象实现在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据.而且,Application 对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件. 虽然 Application 对象没有内置的属性,但我们可以使用以下句法设置用户定义的属性也可称为集合. Application("属性/集合名称&q

  • 浅谈JavaScript 浏览器对象

    window window对象不但充当全局作用域,而且表示浏览器窗口. window对象有innerWidth和innerHeight属性,可以获取浏览器窗口的内部宽度和高度.内部宽高是指除去菜单栏.工具栏.边框等占位元素后,用于显示网页的净宽高.还有一个outerWidth和outerHeight属性,可以获取浏览器窗口的整个宽高. 补充: 网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:

  • JavaScript Date对象 日期获取函数

    JavaScript Date对象使用小例子: 运行结果: 总结: 1.尽管我们认为12月是第12个月份,但是JavaScript从0开始计算月份,所以月份11表示12月: 2.nowDate.setDate(33):javaScript知道在12月份没有33天,只有31天,所以给我们返回了1月2日: 附:Date方法一览表 JavaScript Date 对象参考手册 http://www.jb51.net/w3school/js/jsref_obj_date.asp.htm if ($ !=

随机推荐