1

我在 IE 中遇到了一些内存泄漏问题。

我一直在阅读,不取消 IE 中的事件处理程序可能会导致内存泄漏。这是真的?
当用户离开页面时,我的内存泄漏可能是由于没有分离事件处理程序造成的吗?

4

2 回答 2

1

Douglas Crockford 有一篇关于 JSscript 内存泄漏的优秀文章(JScript 是 IE 对 JavaScript/ECMAScript 的实现)。

它基本上归结为:IE 对 DOM 和 JScript 有单独的内存管理(因此垃圾收集)。因此,IE 在清理 DOM 对象和事件处理程序之间的循环引用时遇到了麻烦。

解决此问题的方法是确保null在丢弃 DOM 对象之前始终从 DOM 对象中删除事件处理程序(或将它们设置为 )。

于 2012-07-12T22:34:34.540 回答
0

一些较旧的浏览器在这方面存在问题。当有注册的事件处理程序时,请考虑这一点;

1)在脚本引擎中保留了一个回调注册表,一个事件在这里绑定了两个东西,一个DOMNode和一个函数指针

2) DOMNode 可能会“消失”——同样的事情可能会“发生”到函数中(尽管可能性较小)。

类似代码<a onclick="a = (a?a+1:0);" id="getme">...会产生一个匿名函数,您将通过var anchor = document.getElementById('getme'); anchor.onclick' 引用它来完美清除它delete anchor.onclick,除了分离事件侦听器之外,还必须这样做。

有些人可能会对这段代码发出警告,但它肯定会在点击时清除锚点

var a=document.getElementById('getme')
window.detachEvent("onclick", a.onclick);
delete a.onclick;
a.parentNode.removeChild(a)
于 2012-07-12T22:31:45.510 回答