关于extjs中tabPanl关闭后的内存释放

      最近在工作的时候碰到一些人在讨论ext,他们总是讨论到一个内存问题,因为在测试的时候总是发现当页面打开多了之后,及时关掉了,系统依然会很慢,查看内存的时候,内存的使用率很高,即使关掉其他的应用,内存依然得不到释放,直到浏览器崩溃,一切又能恢复正常。

      其实,他们说的这个情况只是在客户端使用IE浏览器的时候才会出现,虽然js有自动释放内存的功能,但是有的时候IE在释放的时候显得有些漫不经心,所以才导致内存不能及时释放。其实这个问题很好解决,看下面我的示例代码:

function toAddTabPage(node) {//添加tabpanel标签栏
                var getTabPage = null;
                if (node.getDepth() > 0) {  //如果不是根节点root
                    var tabItems = tabPanl.items;//获取已经生成的tabpanl
                    var val = null;
                    tabItems.each(function(item) {//对已经生成的tabpanel进行迭代
                        if (item.id == node.id) {//如果为已经生成的tabpanel
                            val = node.id;
                            getTabPage = item;
                            return false;
                        }
                    });
                    if (val != null) {//激活已经以生成的tabpanel
                        tabPanl.setActiveTab(getTabPage);
                    } else {
                        var index = tabItems.length;
                        if (index > 18) {
                            Ext.Msg.alert('提示', '标签数量过多,请关闭不必要的标签项');
                        } else {
                            var tabPage = tabPanl.add({
                                title:node.text,
                                autoLoad:{url:node.attributes.url,method:'post',scripts:true},//scripts包含页面是否允许脚本
                                id:node.id,
                                autoDestroy:true,
                                destroy:function (){//销毁tabpanel
                                    if(this.fireEvent("destroy",this)!=false){
                                        this.el.remove();
                                        getTabPage = null;
                                        tabPage = null;
                                        if(Ext.isIE){
                                            CollectGarbage();
                                        }
                                    }
                                },
                                closable:true
                            });
                            tabPanl.setActiveTab(tabPage);
                        }
                    }
                }
            }

 

这是一个添加激活tabPage的函数,函数实现的功能就是在点击节点的时候左边显示相应页面,其中用红色部分是最重要的,就是在关掉tabPanl的时候做的事情,1.移除相应的页面元素,2.将相应的用于显示的getTabPage、tabPage置为空(其中getTabPage是用于存放激活已经存在打开了的展示页面,tabPage用于存放新生成的页面),3.判断如果为IE浏览器的话就是用CollectGarbage()函数强制收回。这样就人为的去回收内存,在用户使用IE浏览器的时候就不会出现先前那些人所讨论的情况,至少在目前的项目看来是可行的一种解决方案

 

如果那位觉得写的不对,请留言指教

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值