`
lei101206
  • 浏览: 3225 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于Ext Desktop的内存性能讨论

阅读更多
    Ext的Desktop例子在IE下始终存在内存不停增长的问题,每打开一次窗口并关闭过后,采用sIEve进行测试,都会产生一些孤立节点,即这些几点无法被正确删除,在Ext3.0中有也这个问题。
    在测试了下这个例子过后,发现这可能是由taskbar引起的。在创建的时候 win会有一个属性 win.taskButton用来联系任务栏中的任务按钮,而任务按钮taskButton有一个属性taskButton.win来记录相关联的窗口。这样导致互相引用,在删除的时候可能都没有得到正确删除。
    为了验证这个想法,我注释掉了关于添加Desktop.js中taskButton的代码,即先不添加taskButton,从第25行到93行如下所示
   
 function markActive(win){
        if(activeWindow && activeWindow != win){
            markInactive(activeWindow);
        }
        //taskbar.setActiveButton(win.taskButton);
        activeWindow = win;
        //Ext.fly(win.taskButton.el).addClass('active-win');
        win.minimized = false;
    }

    function markInactive(win){
        if(win == activeWindow){
            activeWindow = null;
            //Ext.fly(win.taskButton.el).removeClass('active-win');
        }
    }

    function removeWin(win){
    	//taskbar.removeTaskButton(win.taskButton);
        layout();
    }

    function layout(){
        desktopEl.setHeight(Ext.lib.Dom.getViewHeight()-taskbarEl.getHeight());
    }
    Ext.EventManager.onWindowResize(layout);

    this.layout = layout;

    this.createWindow = function(config, cls){
    	var win = new (cls||Ext.Window)(
            Ext.applyIf(config||{}, {
                manager: windows,
                minimizable: true,
                maximizable: true
            })
        );
        win.render(desktopEl);
        //win.taskButton = taskbar.addTaskButton(win);

        win.cmenu = new Ext.menu.Menu({
            items: [

            ]
        });

        //win.animateTarget = win.taskButton.el;
        
        win.on({
        	'activate': {
        		fn: markActive
        	},
        	'beforeshow': {
        		fn: markActive
        	},
        	'deactivate': {
        		fn: markInactive
        	},
        	'minimize': {
        		fn: minimizeWin
        	},
        	'close': {
        		fn: removeWin
        	}
        });
        
        layout();
        return win;
    };


    在这之后,在IE7下,用sIEve在Ext3.0下进行测试,没有再出现内存增长的情况,孤立节点基本上也得到了正确释放。
    下面是一些效果图。
    有没有其他人能验证这种想法是否正确,或者能够解决这个问题,或是提出一些其他的看法。

   
  • 大小: 84.2 KB
  • 大小: 94.7 KB
分享到:
评论
4 楼 lei101206 2009-07-01  
目前来说,如果不在任务栏中加入相关窗口的关联,基本上是没有问题的。
3 楼 会飞的狗 2009-06-19  
保持关注。desktop确实一直有内存泄露。
2 楼 damoqiongqiu 2009-06-19  
Desktop的性能问题确实比较严重,渲染很费时间。
1 楼 leon1509 2009-06-18  
不懂!貌似很专业,学习中。。。。。。

这个问题应该有不少人关注吧!

相关推荐

Global site tag (gtag.js) - Google Analytics