当前位置 > 首页 > IE9\IE8

IE9 关联数组导致内存泄漏

2012-8-23 13:13:00来源:IE9\IE8

最近为了满足一部分朋友的需求,给 zTree 提供了 destroy 的方法,用于让 zTree 自行清空。为了检查该方法是否有效,做了一个简单的测试——显示5000个节点然后清空,此操作循环100次,结果发现 IE9 下内存严重暴涨,于是进行了反复筛查,最终锁定了嫌疑犯:关联数组(data[key] = value)导致的内存泄漏!

只找到了嫌疑犯不行,定罪要有证据的,设计了一个简单的模型专门进行这个情况的测试,不排除可能由于我的疏忽得到的错误的结论,因此非常欢迎大家踊跃发表自己的看法,随便喷吧。。。。

【测试模型】

不要 DOM 和闭包、匿名函数干扰,一个全局变量 data 用于保存生成的数据;一个全局变量max用于设置数据最大条数;一个Function用于创建数据;一个Function 用于销毁数据。两个按钮,分别用于触发这两个Function。

补充:为了进行多种情况对比,因此一共制作了8组创建数据、销毁数据的 Function ,详细见后面的说明。

【测试流程】


【测试环境】

Win7 64位操作系统;IE Tester下的 IE6、8、9;FireFox v14.0.1;Chrome v21.0.1180.79;IE6性能太差,因此设置数据条数 max=100000;其他的浏览器都设置 max=1000000;

【开始测试】

1) 第一组测试:

创建对象:关联数组的 key 值无限递增,绝不重复

销毁对象:递归遍历对象内部属性,逐一清空

var data = new Object();
var i=0,j, max=1000000;

function initJson_1(){
	for (j=i+max; i<j; i++) {
		data["_" + i] = {id:i, name:"name" + i};
	}
}

function clearJson_1(){
	clearItem(data);
}

function clearItem(jsonObj) {
	for (var s in jsonObj) {
		var obj = jsonObj[s];
		if (obj instanceof Array) {
			for(var i=obj.length-1; i>=0; i--) {
				clearItem(obj[i]);
				obj.pop();
			}
		}else if (obj instanceof Object){
			clearItem(obj)
		}else{
		}
		jsonObj[s] = null;
		delete jsonObj[s];
	}
	jsonObj = null;
}

测试结果: 

 

测试分析:

这种递归逐一清空对象属性的方法对于 IE6 和 Chrome 有一定效果,FireFox杯具了直接无响应(缩小max值后可以正常);IE8内存暴涨,貌似与这个清空的方法有关,第三次之后再执行方法就无反应了;IE9内存稳步上升,即使最后刷新页面也仍然占有大量内存。

2)


  • IE6和IE8中遇到的技术问题

    2012-8-9 14:37:00

    在采用 XML + XSL 技术建立的 Web 应用中,在画面的 onload JavaScript 函数里使用 mlDoc = document.XMLDocume

  • 《IE9宝典1.0》:IE9安装卸载使用之完全攻略........

    2011-3-25 17:50:00

    现在,就目前已知和解决掉的一些和IE9正式版相关的问题,特别整理出《IE9宝典》v1.0版本。如同大家看到的这个版本号,我们还会在后期更新这个IE9宝典,版本号会发生变化,方便大家。 很多朋友在第

  • IE9开发人员工具里的选项设置后怎么保存?

    2011-3-21 9:45:00

    如图IE9登陆新浪标题显示有错误!现排查两个原因! 1.IE9问题,在开发人员工具设置里浏览器模式设置为IE7即可,但是只是一次性!关掉重开还是默认!请问如何保存? 以上问题截图如附件1所示

  • IE9、IE10的F12工具也太落后了吧!

    2012-10-10 19:45:00

    IE9、IE10的F12工具也太落后了吧! 做web开发,经常需要研究页面的html元素,通过F12工具,虽然可以审查每一个元素的各种属性,但是由于微软的这个工具不能自动刷新,而页面又是动态变化

  • 深度解剖IE9 那些很有意思很时髦的方面

    2011-3-26 11:11:00

    微软近日发布了IE9的最终版本,微软称这款浏览器从BETE测试版的反馈中了解到很多不足并做了很大的改进。IE9提高浏览器的性能和浏览速度,并且加入了新的功能,同时加入了其它浏览器都没有的新事物。这款

  • IE 10 把它的滚动条改变了结构?

    2012-3-30 18:39:00

    使用 scrollbar-shadow-color 时候本来从 5.5 到 9 都是只在右下两条边,opera 之中也是这样,现在变成了滚动条块的四个边都有。。。而 scrollbar-highli

  • Adresszeile von Internet Explorer 9 Suchfunktion funktioniert nicht

    2011-3-19 17:58:00

    Hallo, ich habe IE 9 installiert und die Suchfunktion in der Adresszeile geht nicht ich weiss nic

  • IE9 - Seitentitel wird nicht angezeigt

    2011-3-21 23:26:00

    Nach Installation IE9 werden keine Seitentitel mehr im entsprechenden Fensterbereich oben angezeigt

  • IE9 Compatibility mode force greayed-out scroll bar to apprear

    2011-6-1 14:30:00

    We have a web page that fits vertically on the screen in IE9 with no vertical scroll bar...until yo

  • Cookie如何从webbrowser中传递到IE新窗口中呢

    2011-5-3 11:19:00

    是这样的,我用winform内置了一个webbrowser,在这个webbrowse中,我登陆一个网站,这个网站上有个超链接的按钮, 点击这个按钮以后,会在IE中新打开一个窗口,这时,IE新打开