• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验
    Application对象内置集合有为存放简单类型设计的Contents,默认Application("key")就可以使用。

    不过Application.Contents不能存放对象,可以存vbs数组,但是在javascript下甚至数组都不能放。

    使用Application.Contents时,只能用丑陋的如:

    for(var i=0;i15000;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;i15000;i++){
            d.Item(i)="sdfdsffdsaf";}
      1.5w次插值,172ms
     当然自定义对象var d=new Object(); d[i]=..更快,1.5w次只要80-90ms,不过功能弱多了,所以还是用字典.

     下面看正式测试
        for(var i=0;i15000;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;i15000;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;i15000;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;i15000;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倍速度差距。不过取得后存取不受影响。
    您可能感兴趣的文章:
    • HTML5 WebStorage(HTML5本地存储技术)
    • 常见的浏览器存储方式(cookie、localStorage、sessionStorage)
    • vue中使用sessionStorage记住密码功能
    • 使用sessionStorage解决vuex在页面刷新后数据被清除的问题
    • 使用JS获取SessionStorage的值
    • 详解Vue中localstorage和sessionstorage的使用
    • jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
    • JS 中LocalStorage和SessionStorage的使用
    • JS中LocalStorage与SessionStorage五种循序渐进的使用方法
    • ASP.NET中Application、Cookie、Session、Cache和ViewState
    • ASP.NET中Application和Cache的区别分析
    • 异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
    • indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
    • 5个HTML5的常用本地存储方式详解与介绍
    上一篇:在JScript中使用缓存技术的实际代码
    下一篇:海阳2006+功能中的潜水王
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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