是避免IE内存泄漏所需的取消挂起事件处理程序
Is Unhooking event handlers needed to avoid memory leaks in IE
我在IE中遇到了一些内存泄漏问题。
我一直在读,在IE中不取消挂起事件处理程序,可能会导致内存泄漏。这是真的吗
当用户离开页面时,没有分离事件处理程序会导致内存泄漏吗?
Douglas Crockford有一篇关于JScript内存泄漏的优秀文章(JScript是IE对JavaScript/EMMAScript的实现)。
基本上可以归结为:IE对DOM和JScript有单独的内存管理(以及垃圾收集)。正因为如此,IE在清理DOM对象和事件处理程序之间的循环引用时遇到了问题。
解决此问题的方法是确保在丢弃DOM对象之前,始终从DOM对象中删除事件处理程序(或将它们设置为null
)。
一些较旧的浏览器在这方面存在问题。当有注册的事件处理程序时,请考虑这一点;
1) 在脚本引擎中,保留了一个回调注册表,一个事件与两个东西绑定在一起,一个DOMNode和一个函数指针
2) DOMNode可能会"消失"——同样的事情可能会"发生"在函数上(但可能性较小)。
像<a onclick="a = (a?a+1:0);" id="getme">...
这样的代码会产生一个匿名函数,您将通过var anchor = document.getElementById('getme'); anchor.onclick
'引用该函数。要完全清除它,除了分离eventlistener之外,还必须使用delete anchor.onclick
。
有些人可能会对这个代码感到愤怒,但它肯定会清除上的锚
var a=document.getElementById('getme')
window.detachEvent("onclick", a.onclick);
delete a.onclick;
a.parentNode.removeChild(a)
相关文章:
- JavaScript执行暂时挂起页面
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 应用将图表转换为图像的jqplot代码时Chrome挂起
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- MongoDB collection.find()查询挂起
- 使用子字符串方法时应用程序挂起的原因
- 如何在AngularJS中取消挂起的请求
- 从node.js应用程序调用Mongoose Model.save()时挂起
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- 挂起 JavaScript 键关闭事件
- HERE 映射 JS API v3 集群提供程序挂起,添加许多数据点
- 在javascript中使用.replacement()函数时,请避免取消挂起事件处理程序
- 是避免IE内存泄漏所需的取消挂起事件处理程序
- 在angularJs中取消/中止所有挂起的请求
- 如何取消挂起的脚本标记请求
- 如何取消React/Redux中挂起的异步操作
- 在Restangular中取消挂起的API调用