如题,
   我要实现的是这样的,有一棵树(用ext实现的异步树),里面显示很多设备信息,当设备在线的时候就显示在线的样式,当设备不在线的时候就显示不在线的样式。当同时有多台设备同时下线时,前台检测到了就马上更改这些不在线设备的样式。
   如果我更新20个左右节点的样式(就是更改node的cls属性),速度还行。如果设备达到100个左右的话,IE就会一直报脚本运行太慢,是否停止运行脚本。
   实际项目会有2W多的设备,这个完全经不住考验啊。各位大侠有没有啥好方法可以提高性能,或是其它方法支招的啊,先拜谢了。

解决方案 »

  1.   

    Ext太重型了,IE这种古董本身就不适合。
      

  2.   

    100个就慢了,不应该啊,你用了轮询的方式检测在线状态?
    就算轮询,速度也不该和设备个数相关啊,难道你对每个设备都单独发请求检测状态?
    我用ext3没遇到过这种提示
    ext4确实太累赘了
      

  3.   


    我是这样的:
    根节点:
    ---组织一
         ---设备一
         ---设备二
         ---设备三
    ---组织二
         ---设备一
         ---设备二
         ---设备三
    ---组织三
         ---设备一
         ---设备二
         ---设备三
    ---root设备一
    ---root设备二刚开始组织都没有点开,如果我点开组织一,load它下面的设备的时候就,向后台请求不在线的数据,然后显示设备的节点(不在线的样式变灰)。同时通过Ext.TaskMgr来定时向后台获取不在线设备(获取的是根节点下所有的不在线的设备),改变的是当前所有展开了的设备的状态。不在线的变灰,原来不在线,现在在线的变亮。
       我测试的时候,就点开组织下有很多设备的那个,该组织下所有的设备都不在线,然后IE就报脚本运行慢。我实在想不明白为什么。我刚接手extjs3三四个月,很多东西还是很不明白。
      

  4.   

    我测试的时候是30分钟向后台定期发送一条请求,获取不在线设备,测试时间内应该还没有发起第二次请求,发送定时请求时这样的var task_CheckState;//声明任务变量
    task_CheckState = {
    run: checkOffLineDevice,//执行任务时执行的函数
    interval: 30*60*1000 //任务间隔,毫秒为单位,这里是30min
    }
    Ext.TaskMgr.start(task_CheckState);//初始化时就启动任务设备图标变灰的代码这样的//list是保存获取的不在线设备的相关信息,后台传过来的
    list.each(function(record){
        //找到对应的node
       var nNode = treePanels['all_channels'].tree.getById(record.indexCode);  
        if (nNode.data != null ) {
            //lastStatus是用来保存设备上一次是否在线的,初始时都在线,1---在线  0---不在线
            if(nNode.attr('lastStatus') == '1' || nNode.attr('lastStatus')==null){
                 nNode.attr('cls', 'node_Offline');
           }
           nNode.refresh();
           nNode.attr('lastStatus', '0');
        }
    }
      

  5.   

    应该不至于卡死,楼主估计是设计有问题或代码那里写得不合理了。
    更新加载树时,你不如更新整棵树,说白了,就是更新树的store,我用ext4,之前也测试过大几千个节点的情况,加载速度还行啊,没发觉卡死什么现象。