使用某些Javascript代码模式时,Microsoft的IE6和IE7浏览器会发生内存泄漏。在IE6早期,我发现了很多有关泄漏模式的信息。但是,我知道其中许多(但不是全部)已在IE7和IE6的Service Pack中修复。对于那些修补后的IE6和IE7版本,我仍然找不到可靠的信息来源。
有两种工具可以检测泄漏模式。但是我似乎无法以我想要的方式使用它们!
因此,我真的很想知道IE6和IE7修补版本仍然存在哪些类型的内存泄漏,以及如何使用帮助我的工具在实时代码中有效地找到它们。
有什么帮助吗?
最佳答案
我认为没有有效的工具可以检测到内存泄漏。但是,有一个软件可以用来在PC上模拟IE 6-7-8,称为 IE Tester 。
Internet Explorer最常见的泄漏是与JScript的交互。
IE很难处理这种循环结构。您应该了解如何形成循环引用(通过闭包)。第一步是在删除DOM元素之前先对其进行清理。
这可以通过像这样的通用函数来完成:
function purge(d) {
var a = d.attributes, i, l, n;
if (a) {
l = a.length;
for (i = 0; i < l; i += 1) {
n = a[i].name;
if (typeof d[n] === 'function') {
d[n] = null;
}
}
}
a = d.childNodes;
if (a) {
l = a.length;
for (i = 0; i < l; i += 1) {
purge(d.childNodes[i]);
}
}
}
每次从DOM中删除元素时,都需要首先在其上使用
purge
。您甚至可以为此编写一个包装器function safeRemove(el) {
purge(el);
el.parentNode.removeChild(el);
}
当然,这只是一个起点,因为它不会帮助您在其他地方(例如DOM2事件处理程序或通过闭包进行的其他任何地方)进行引用。您应该检查要删除元素的位置,并找出哪些函数引用了它们。
IE 6-7-8中似乎仍然存在此问题。