IE似乎泄漏了ID的元素

时间:2012-02-15 15:23:39

标签: javascript internet-explorer memory memory-leaks

我一直在使用Mootools(1.4)编写一些类/ coontrols,并注意到内存泄漏,在阅读了很多论坛页面后,我找到了大部分原因,并发现了sIEve。

在使用sIEve时,我决定对我创建的所有元素进行ID,以便更容易看到哪些元素未被正确释放,即将ID设置为“Header”+ randomnumber。在使用sIEve测试和更正代码来帮助我之后,我注意到页面仍在丢失内存,尽管sIEve现在表示我没有孤立的元素。

我简化了页面并继续测试,今天早上我发现了泄漏。

我已将页面缩小到最低限度以显示问题并删除任何javascript包含。

测试页面只是使用一个计时器来继续调用一个函数,用另一个DIV替换DIV的内容,没有事件,没有样式,基本可以。

对于被替换的DIV,使用唯一(随机)ID会导致泄漏。如果每次更换时都使用相同的ID,则不会发生内存泄漏。 (FF也没有泄漏,没有检查铬)。

任何人都可以告诉我,如果我做错了,是知道IE错误还是未知错误。

即使你没有解决方案,我希望这可能有用。

刚刚添加到JSFiddle IELeak

使用removeChild()with removeChild

更新了JSFiddle
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1    /DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Call the Plumber</title>

<script type="text/javascript">

var TestTimer;

function Test()
{    
    var rand = Math.random();
    var id = rand;              // this line will cause leak
//        var id = "SameID";            // this line will be fine
    document.getElementById("content").innerHTML = "";   // in or out this line makes no difference
    document.getElementById("content").innerHTML = "<div id=\""+id+"\">"+rand+"</div>";
}

function Hammer()
{
    for( var i=0; i<100; i++)
    {
        Test();
    }
}

function Run()
{
    TestTimer = setInterval( Hammer, 50 );
}

function Stop()
{
     clearInterval( TestTimer );
}
</script>

</head>
<body>
<div id="page">
    <div>
        <p>This will leak</p>
        <input type="button" onclick="Run()" value="Run" />
        <input type="button" onclick="Stop()" value = "Stop"/>
        <div id="content"></div>
    </div>
</div>
</body>
</html>

0 个答案:

没有答案