IE8标签存档

IE8中的内存泄露

最近开发的时候对页面使用了定时的局部更新,结果在IE6,7和Firefox下,一切正常,而在IE8下过上几个小时就浏览器就崩溃了,显示是内存溢出,我以为是代码写的不好导致内存泄露,但是IE6,7又正常,调查了一下,原来这是IE8的bug。

问题点

在IE8中,生成特定Dom节点所占用的内存是不会被释放的,即使这些节点被删除内存也不会被释放。

内存泄露的节点类型包括:form、button、input、select、textarea、a、img和objec

其他的大部分节点类型是不会泄露的,例如:span、div、p、table等等。

此问题只发生在IE8,其他浏览器不发生。

如果用户按了F5,IE8会重新刷新页面,首先它会unload window.top,这时候会释放掉内存。如果页面是iframe,则unload此iframe,没有任何反应。看起来只有window.top被unload,内存才会被释放。

例子

例1

执行下面的代码,IE8就会泄露内存。

function leak1() {
    var node = document.getElementById("TO_AREA");
    node.innerHTML = "<img />";
    node.innerHTML = "";
    node = null;
}

注意:

* 此例子添加了节点,所以会泄露。