当使用特定的Javascript代码模式时,微软的IE6和IE7浏览器会受到内存泄漏的影响。早在IE6时代,我就发现了很多关于泄漏模式的信息。但是,我了解到其中许多(但不是所有)都是在IE7和IE6的服务包中修复的。我无法找到可靠的信息来源,说明IE6和IE7的修补版本中仍然存在哪些漏洞。
有几个工具可以检测泄漏模式。但我似乎不能用我想要的方式!
因此,我非常想知道IE6和IE7的修补版本仍然存在哪些类型的内存泄漏,以及如何使用工具帮助我在我的实时代码中有效地找到它们。
有什么帮助吗?
发布于 2010-11-17 09:10:40
我不认为有一个有效的工具来检测内存泄漏。有一个软件,但是,你可以用它来模拟IE6-7-8在你的电脑,它被称为IE测试器。
Internet最常见的漏洞是与JScript的交互。
当DOM对象包含对JavaScript对象的引用(例如事件处理函数)时,当该JavaScript对象包含对该DOM对象的引用时,则形成循环结构。- http://javascript.crockford.com/memory/leak.html
这种循环结构是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中删除元素时,都需要首先在DOM上使用purge。您甚至可以为此编写一个包装器。
function safeRemove(el) {
purge(el);
el.parentNode.removeChild(el);
}当然,它只是一个起点,因为它不会帮助您处理其他地方的引用(比如DOM2事件处理程序,或者通过闭包的其他任何地方)。您应该检查移除元素的位置,并找出引用它们的函数。
这个问题似乎仍然存在于IE6-7-8中.
https://stackoverflow.com/questions/4201259
复制相似问题