1

每个人!我在extjs4中使用了tablpanel,发现在tabpanel中删除面板时IE8中的内存没有减少,再次添加面板时也增加了。所以我写了一个测试如下:

Ext.onReady(function() {
var currentItem;
var tabs = Ext.createWidget('tabpanel', {
    renderTo: 'tabs',
    resizeTabs: true,
    enableTabScroll: true,
    width: 600,
    height: 250,
    defaults: {
        autoScroll:true,
        bodyPadding: 10
    }
});

var __my_task = '';
var i = 0;
try{
    __my_task = {
            run: function(){
                if (i % 2 == 0){
                    for(var j = 0; j < 10; j++){
                        addTab(true);
                    }
                }else{
                    var items = [];

                    tabs.items.each(function(item){
                        if(item.closable){
                            if(!false || item != this.item){
                                items.push(item);
                            }
                        }
                    }, this);

                    Ext.each(items, function(item){
                        tabs.remove(item);
                        item.destroy();
                    }, this);
                } // else
                i ++;
            },
            interval: 300
    }
    Ext.TaskManager.start(__my_task);
}catch(e){}

// tab generation code
var index = 0;
function addTab (closable) {
    ++index;
    tabs.add(Ext.create('Ext.tree.Panel',{
        title: 'New Tab ' + index,
        iconCls: 'tabs',
        closable: !!closable
    }));
}

});

在IE8下运行,内存会提升这么快,我的代码错了吗?有什么问题问我,谢谢!

4

1 回答 1

0

IMO 很难评估 Javascript 中是否存在内存泄漏(如您所知,用 JS 编写的 Extjs)。该对象可能会被删除delete()(destroy() 将使用它)但不能确定何时实际释放内存。

您可以在删除或设置为 nullJavascript 垃圾收集中找到有关 Javascript 垃圾收集器的更多信息

于 2012-04-18T10:46:09.857 回答