看了一篇帖子,http://www.iteye.com/topic/180611,了解了IE的内存泄露问题。
借用一下代码,写个自己的理解,放在这备忘。
<div id="bb"><div id="aa">cc</div></div>
<script type="text/javascript">
function leakTest(){
var a=[];
for(var i=0;i<100000;i++){
a.push('a');
}
var divA=document.getElementById('aa');
divA.kk=function(){};
divA.parentNode.removeChild(divA);
}
leakTest();
</script>
IE为什么会出现内存泄露呢?
我的理解是首先leakTest function 中有了对aa元素的引用,
然后aa元素的kk属性有了一个对匿名function的引用,而这个
匿名function是在leakTest function中定义的,这样就形成
了闭包,也就是说这个匿名function不能离开leakTest function
而存在,这样就出现了一个引用循环。
即leakTest-->aa-->匿名function(而这个匿名function把leakTest function拉下水了,相当于引用了leakTest function),这下完蛋了,IE不知道怎么解决这个问题了,那就泄露吧。
解决的方式很简单:打断这个引用链!
在remove divA后,设置divA = null。
或者不要在leakTest()中保存对aa的引用,用document.getElementById('aa')进行操作
分享到:
相关推荐
**IE浏览器内存泄漏详解** IE浏览器,全称Internet Explorer,是微软公司开发的一款经典网络浏览工具。在过去的几十年里,IE浏览器曾是全球最广泛使用的浏览器之一。然而,随着技术的发展,IE浏览器的一些问题逐渐...
2. **IE浏览器中的内存泄漏**:IE浏览器对JavaScript对象的内存管理有其特殊性,如DOM对象、闭包和全局变量等处理不当都可能导致内存泄漏。此外,IE的ActiveX控件和BHO(Browser Helper Object)也可能造成内存泄漏...
JavaScript闭包技术及IE内存泄漏分析
标题中的“脚本IE内存泄露检测.rar”表明这是一个专门针对Internet Explorer浏览器的JavaScript内存泄漏检测工具。内存泄漏是编程中常见的问题,特别是在处理大量数据或长时间运行的网页应用时,可能导致浏览器性能...
对于内存泄漏,尤其是在旧版本的IE浏览器中,由于DOM事件处理程序的不当处理也可能导致问题。例如: ```javascript function bindEvent() { var obj = document.createElement("XXX"); obj.onclick = function(){...
2. **内存泄漏类型**:常见的JavaScript内存泄露包括全局变量、闭包引用、DOM元素引用、事件监听器等。了解这些类型有助于识别潜在问题。 3. **工具使用**:利用如IE Developer Tools(F12工具)、Chrome DevTools...
**IE内存泄漏检测工具Drip-0.5详解** 在Web开发中,内存泄漏是一个常见的问题,尤其是在使用老版本的Internet Explorer(IE)浏览器时。IE由于其独特的内存管理机制,常常会出现JavaScript(JS)内存泄漏的情况,这...
内存泄漏的解决方案可能包括正确使用闭包、避免全局变量、利用window周期事件进行资源清理等。 “常见兼容问题.doc”可能汇总了各种类型的CSS兼容和JavaScript内存泄漏问题,为开发者提供了一站式参考。而“div+css...
针对这个问题,专门的“内存泄漏检测工具”应运而生,如“js内存泄漏检测工具”和“IE Javascript leaks detector”。 1. **JavaScript内存管理** JavaScript的内存管理主要依赖于垃圾回收机制(Garbage ...
} 上面是两个个很显示的循环引用,IE中产生了内存泄露,由于IE的内存回收机制,导至会长期占用内存而不能释放。 但闭包的内存泄露,有些隐蔽。因为闭包的循环引用,是间接的。 代码如下: function iememery(){ var ...
本文将深入探讨IE下的内存泄露问题及其解决方案,并解析JavaScript闭包的多种用法,帮助开发者更好地理解和应对这一挑战。 ### IE内存泄露问题 #### 问题概述 在IE中,内存泄露主要是由于DOM元素与JavaScript对象...
使用方法通常是启动sIEve,然后在IE浏览器中打开待测试的网页,当怀疑出现内存泄漏时,sIEve会显示相关的泄漏信息,包括泄漏对象的类型、大小以及可能的泄漏源。 **Drip-0[1].5(web内存泄漏检测工具).exe** Drip,...
JavaScript内存泄露是一个重要的性能优化话题,尤其是在...对于IE浏览器,由于其早期版本的垃圾收集机制不完善,内存泄露问题更为突出,文档《理解并解决IE的内存泄漏方式》可能会提供更具体的针对IE浏览器的解决方案。
1. 避免使用问题类型元素:尽量减少使用可能导致内存泄露的元素,或者在不再需要它们时,通过改变其属性或结构来防止内存泄漏。 2. 手动清理:当不再需要某个DOM节点时,确保将其从DOM中移除,并清除所有指向该节点...
标题 "jquery 内存泄露bug" 指的是在使用jQuery库进行JavaScript编程时可能出现的一种常见问题,即内存无法正常释放,导致应用占用过多内存,影响性能甚至可能导致浏览器崩溃。这个问题通常与对象引用、事件监听器和...
例如,使用attachEvent绑定事件,而不使用detachEvent移除,或者是在IE中频繁地进行DOM操作,都可能导致内存泄漏。解决这类问题需要特别注意IE的特性,并在必要时使用Microsoft Developer Network (MSDN)提供的解决...
然而,如果代码中存在全局变量或者闭包引用了不再使用的对象,这些对象将不会被释放,从而导致内存泄漏。 描述中提到,补丁最初是针对IE浏览器设计的,这可能是因为IE的事件处理机制与其它浏览器有所不同,可能会更...
页面之间的关系保持简单,并且在同一站点的不同地址之间进行导航可以快速地清理任何内存泄漏问题。如果存在泄漏,也小到足以忽略。新的Web应用需要实践更高的标准。一个页面可能运行数小时,而不会被导航或者通过Web...
在早期版本的Internet Explorer(如IE6)中,存在一种特殊的内存泄露情况,即当DOM元素或ActiveX对象与普通的JavaScript对象之间存在循环引用时,IE在释放这类变量时存在特殊困难,导致内存无法正常回收。...