首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IE Javascript泄漏检测器时遇到困难

使用IE Javascript泄漏检测器时遇到困难
EN

Stack Overflow用户
提问于 2010-11-17 03:38:22
回答 1查看 2.2K关注 0票数 7

当使用特定的Javascript代码模式时,微软的IE6和IE7浏览器会受到内存泄漏的影响。早在IE6时代,我就发现了很多关于泄漏模式的信息。但是,我了解到其中许多(但不是所有)都是在IE7和IE6的服务包中修复的。我无法找到可靠的信息来源,说明IE6和IE7的修补版本中仍然存在哪些漏洞。

有几个工具可以检测泄漏模式。但我似乎不能用我想要的方式!

  • 微软(V2)的内存泄漏检测器在我的代码中没有发现任何泄漏,即使我使用了应该泄漏的模式。这可能是因为我运行的是IE8 --有什么非令人头疼的方法可以让它伪装成IE6或IE7?
  • 滴漏和sIEve似乎发现了大量的“孤儿”品种的漏洞。当然,这些肯定是假的--实际上,我添加到文档中的每个元素都被列出了,而且我不认为我保留了对它们的引用。如果它们是真实的,我如何才能找到它们在代码中泄漏的位置?这些工具有一个“属性”特性,它没有显示任何东西,使它看起来是坏的。同样,我不知道这些泄漏是否与IE6或IE7有关,还是只与我安装的IE的版本IE8有关。

因此,我非常想知道IE6和IE7的修补版本仍然存在哪些类型的内存泄漏,以及如何使用工具帮助我在我的实时代码中有效地找到它们。

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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元素之前进行清理。

这可以通过这样的一般功能来完成:

代码语言:javascript
复制
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。您甚至可以为此编写一个包装器。

代码语言:javascript
复制
function safeRemove(el) {
  purge(el);
  el.parentNode.removeChild(el);
}

当然,它只是一个起点,因为它不会帮助您处理其他地方的引用(比如DOM2事件处理程序,或者通过闭包的其他任何地方)。您应该检查移除元素的位置,并找出引用它们的函数。

这个问题似乎仍然存在于IE6-7-8中.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4201259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档