我在 IE 中遇到了一些内存泄漏问题。
我一直在阅读,不取消 IE 中的事件处理程序可能会导致内存泄漏。这是真的?
当用户离开页面时,我的内存泄漏可能是由于没有分离事件处理程序造成的吗?
我在 IE 中遇到了一些内存泄漏问题。
我一直在阅读,不取消 IE 中的事件处理程序可能会导致内存泄漏。这是真的?
当用户离开页面时,我的内存泄漏可能是由于没有分离事件处理程序造成的吗?
Douglas Crockford 有一篇关于 JSscript 内存泄漏的优秀文章(JScript 是 IE 对 JavaScript/ECMAScript 的实现)。
它基本上归结为:IE 对 DOM 和 JScript 有单独的内存管理(因此垃圾收集)。因此,IE 在清理 DOM 对象和事件处理程序之间的循环引用时遇到了麻烦。
解决此问题的方法是确保null
在丢弃 DOM 对象之前始终从 DOM 对象中删除事件处理程序(或将它们设置为 )。
一些较旧的浏览器在这方面存在问题。当有注册的事件处理程序时,请考虑这一点;
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)