在IE下的JS编程中,以下的编程方式都会造成即使关闭IE也无法释放内存的问题,下面分类给出:
1、给DOM对象添加的属性是一个对象的引用。范例:
var MyObject = {};
document.getElementById('myDiv').myProp = MyObject;
解决方法:
在window.onunload事件中写上: document.getElementById('myDiv').myProp = null;
2、DOM对象与JS对象相互引用。范例:
function Encapsulator(element) {
this.elementReference = element;
element.myProp = this;
}
new Encapsulator(document.getElementById('myDiv'));
解决方法:
在onunload事件中写上: document.getElementById('myDiv').myProp = null;
3、给DOM对象用attachEvent绑定事件。范例:
function doClick() {}
element.attachEvent("onclick", doClick);
解决方法:
在onunload事件中写上: element.detachEvent('onclick', doClick);
4、从外到内执行appendChild。这时即使调用removeChild也无法释放。范例:
var parentDiv = document.createElement("div");
var childDiv = document.createElement("div");
document.body.appendChild(parentDiv);
parentDiv.appendChild(childDiv);
解决方法:
从内到外执行appendChild:
var parentDiv = document.createElement("div");
var childDiv = document.createElement("div");
parentDiv.appendChild(childDiv);
document.body.appendChild(parentDiv);
5、反复重写同一个属性会造成内存大量占用(但关闭IE后内存会被释放)。范例:
for(i = 0; i < 5000; i++) {
hostElement.text = "asdfasdfasdf";
}
这种方式相当于定义了5000个属性!
解决方法:
其实没什么解决方法:P~~~就是编程的时候尽量避免出现这种情况咯~~
说明:
1、以上资料均来源于微软官方的MSDN站点,链接地址:
http://msdn.microsoft.com/librar ... e_leak_patterns.asp
大家可以到上面这个地址中看到详细的说明,包括范例和图例都有。只是我英文不太好,看不太懂,如果我上述有失误或有需要补充的地方请大家指出。
2、对于第一条,事实上包括 element.onclick = funcRef 这种写法也算在其中,因为这也是一个对对象的引用。在页面onunload时应该释放掉。
3、对于第三条,在MSDN的英文说明中好像是说即使调用detachEvent也无法释放内存,因为在attachEvent的时候就已经造成内存“LEAK”了,不过detachEvent后情况还是会好一点。不知道是不是这样,请英文好的亲能够指出。
4、在实际编程中,这些内存问题的实际影响并不大,尤其是给客户使用时,客户对此绝不会有察觉,然而这些问题对于程序员来说却始终是个心病 --- 有这样的BUG心里总会觉得不舒服吧?能解决则给与解决,这样是最好的。事实上我在webfx.eae.net这样顶级的JS源码站点中,在它们的源码里都会看到采用上述解决方式进行内存的释放管理。
分享到:
相关推荐
在压缩包子文件的文件名"IE内存泄露测试"中,我们可以推测包含的资源可能是一个测试套件、指南、或者是一个实际的工具,用于帮助开发者在IE环境下进行内存泄露的模拟和检测。 要有效地测试和解决JavaScript在IE中的...
在IE浏览器中,由于其JavaScript引擎的设计缺陷和与其他组件的交互方式,内存泄漏问题尤为突出。 **内存泄漏的原因** 1. **全局变量和闭包**:JavaScript中,全局变量和闭合函数会持续引用内存,导致对象无法被...
总结来说,"脚本IE内存泄露检测.rar"是一个专为Internet Explorer设计的JavaScript内存泄漏检测工具,可以帮助开发者识别和解决JavaScript代码中的内存管理问题,提高应用程序的性能和稳定性。使用该工具需要运行...
内存泄漏是编程中的一个常见问题,尤其是在JavaScript环境中,由于IE浏览器的内存管理机制,这个问题显得尤为突出。Drip作为一个实用的工具,帮助开发者定位和解决这一问题,提高Web应用程序的性能和稳定性。 在...
标题中的“IE浏览器IFrame对象内存不释放问题解决方法”是指在使用Internet Explorer(IE)浏览器时,特别是在涉及IFrame对象的场景下,可能会遇到内存管理的问题。IFrame是一种可以在网页中嵌入其他HTML页面的元素...
### 关于ExtJS中TabPanel关闭后的内存释放详解 在前端开发领域,特别是在使用ExtJS框架构建复杂Web应用时,内存管理是一个不容忽视的关键环节。本文将深入探讨ExtJS中TabPanel组件在关闭后如何有效地释放内存,以及...
在IE浏览器中,由于其JavaScript引擎的实现,img标签可能会引发内存泄漏问题。这是因为IE浏览器会将图片资源缓存到内存中,即使图片元素已经被删除,只要其src属性仍然指向那个图片资源,内存就不会被释放。这种情况...
这套系统不知道循环引用,使得一切变得混乱,导致内存释放工作不能完成,产生了内存泄漏。 我们可以通过演示来了解内存泄露的问题。在Question1中,我们创建了10000个DOM元素,并删除它们,如此循环。在IE浏览器中...
sIEve是一款专为检测IE内存泄漏设计的开源工具。它通过监控IE浏览器进程,收集内存分配和释放的信息,分析并报告可能存在的内存泄漏问题。sIEve能帮助开发者识别哪些对象或脚本导致了内存占用的异常增长。使用方法...
IE浏览器中的JavaScript编程需要注意内存释放的问题,因为不当的编程习惯会导致即使关闭浏览器,内存也得不到释放。这主要体现在以下几个方面: 1. 对DOM对象添加的属性是对象引用时,该属性引用的对象不会被垃圾...
JavaScript是一种动态类型语言,它在浏览器环境中运行,并依赖于垃圾收集机制来管理内存。然而,由于一些特性及浏览器实现的差异,可能会出现内存泄漏,导致应用程序的性能下降,甚至可能导致浏览器崩溃。 内存泄漏...
由于JavaScript的内存释放和回收机制与.NET中的垃圾回收机制类似,因此,对象的所有者(如一个进程)可能需要等待ActiveXObject实例被释放后才能进行一些资源操作,例如文件锁定和操作系统的权限凭证。如果对象仅...
**IE内存泄漏检测工具Drip-0.5详解** 在Web开发中,内存泄漏是一个常见的问题,尤其是在使用老版本的Internet Explorer(IE)浏览器时。IE由于其独特的内存管理机制,常常会出现JavaScript(JS)内存泄漏的情况,这...
CollectGarbage(); setTimeout(“CollectGarbage();”, 1); 这里之所以使用setTimeout(),因为可以彻底回收...”就可以帮助浏览器释放内存,IE在最小化和关闭时释放,所以,长时间开着IE窗口,会导致IE再次打开的瞬间速
JavaScript(JS)是一种广泛应用于网页和网络应用的脚本语言,它在运行时需要占用内存来存储变量、对象和函数等。随着Web应用复杂性的增加,内存管理变得越来越重要,因为内存泄漏可能导致性能下降,甚至应用程序...
本文将深入探讨标题中提到的"IE内存泄露之JQuery html(),append()"这一问题,它涉及到JavaScript库JQuery在Internet Explorer浏览器中的特定使用场景下可能导致内存泄露的现象。 首先,我们要理解什么是内存泄露。...
它能帮助开发者定位IE中的内存泄漏问题,通过对IE进程的内存分析,提供关于哪些对象占用内存过大的信息。sIEve-0.0.8.exe是这个工具的一个老版本,尽管现在Internet Explorer的使用已经减少,但对于仍然需要支持IE的...
JavaScript在IE9之前的版本中,内存管理机制与现代浏览器有所不同,导致了一些特有的内存泄露问题。在IE9之前,JavaScript引擎JScript使用了两种不同的垃圾回收策略:对于JScript对象使用了"标记-清除"算法,而对于...
2. **分析与诊断**:可能涉及JavaScript引擎在处理内存管理方面的机制,以及为什么在IE9中会出现这个问题。 3. **测试结果**:可能包括使用各种工具进行内存分析的图表或数据,显示内存使用量随时间的变化,以及内存...