【问题标题】:Is this solution correct or not to handle DOM memory leak此解决方案是否正确处理 DOM 内存泄漏
【发布时间】:2018-04-26 16:51:13
【问题描述】:

全部:

当我尝试学习 JS DOM 内存泄漏教程时,有一个关于 OLD IE(7, 8) 的内存泄漏示例:

<div id="myDiv">
    <button id="myBtn">Click Me</button>
</div>

<script type="text/javascript">
    var btn = document.getElementById("myBtn");
    btn.onclick = function(){
        document.getElementById("myDiv").innerHTML = "Processing...";
    }
</script>

它给出的解决方案是:

<div id="myDiv">
    <button id="myBtn">Click Me</button>
</div>

<script type="text/javascript">
    var btn = document.getElementById("myBtn");
    btn.onclick = function(){




        btn.onclick = null;





        document.getElementById("myDiv").innerHTML = "Processing...";
    }
</script>

我的困惑:

  1. 什么是泄漏:myBtn DOM 对象或 onclick 函数?(我的理解:它试图说 DOM,因为 innerHTML 试图用文本节点替换整个按钮节点)
  2. 如果 DOM 是泄漏,那么 btn 变量仍然引用 DOM,导致无法 GC,为什么可以这样解决?

谢谢

【问题讨论】:

  • @ibrahimmahrir 感谢您的回复。我想我有点困惑。我想问的是为什么该解决方案有效,而不是为什么这是内存泄漏
  • @ibrahimmahrir 你能谈谈这个具体例子中导致循环引用的原因吗?我真的很难理解为什么这是一个循环参考
  • kuan 其实我认为我对那个循环引用是错误的。在这个例子中似乎没有一个,就像在你的另一个问题中一样。
  • @ibrahimmahrir 感谢您清除我的想法。这种识别东西的内存泄漏让我丧命。

标签: javascript dom memory-management


【解决方案1】:

泄漏是两种情况。您必须释放指向 DOM 对象的 btn 变量和 onclick 事件才能停止监听该事件。

【讨论】:

  • 谢谢,我也是这么想的,谢谢指教。这让我很困惑,因为我阅读的帖子中标记为解决方案的第二部分代码。
猜你喜欢
  • 2011-08-14
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多