【问题标题】:IE memory leak - settimeout, repeatedly setting innerHTMLIE内存泄漏-settimeout,反复设置innerHTML
【发布时间】:2011-08-15 16:18:44
【问题描述】:

我有一个应用程序,它每 60 秒重绘一次页面的一部分。重绘会导致 IE 出现严重的内存泄漏。

我尝试同时使用 settimeout/setinterval 来设置重绘计时器。

我还尝试了许多建议,例如

  • 设置 innerHTML = '' 而不是使用 jquery remove/empty。
  • 在重绘 HTML 之前删除所有事件处理程序。
  • 在清空父容器之前删除所有子节点。
  • 将 outerHTML 设置为 clear 而不是 innerHTML

尽管如此,我还是看到了很大的内存泄漏。 MS 知识库文章似乎表明 IE 8 本身就存在泄漏,我们需要应用修补程序:http://support.microsoft.com/kb/975623

但是,我在 IE7 和 Firefox 中也看到了这个问题。

任何帮助将不胜感激。

谢谢, 苏钦

【问题讨论】:

  • 所以你知道泄漏仍在 IE9 中

标签: internet-explorer memory-leaks settimeout innerhtml


【解决方案1】:

您提到的所有选项都值得一试,您是否也尝试过先添加DOM元素,然后再设置innerHTML?

这是一个例子 http://ecmascript.stchur.com/blogcode/ie_innerhtml_memleak/noleak.html

那家伙的解决办法

   // Add the element to the DOM first, and /then/ set .innerHTML to 
   // prevent memory from leaking.
   document.body.appendChild(elem);
   elem.innerHTML = str;

您是如何删除所有处理程序的?您是否使用过 Crockford 的净化解决方案之类的东西? http://javascript.crockford.com/memory/leak.html

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2014-06-07
    • 2018-06-13
    • 2020-01-03
    相关资源
    最近更新 更多