`
condor_mk7
  • 浏览: 43480 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

js在IE中的内存释放问题

阅读更多
在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源码站点中,在它们的源码里都会看到采用上述解决方式进行内存的释放管理。
分享到:
评论
1 楼 wv1124 2009-11-28  
for(i = 0; i < 5000; i++) {
hostElement.text = "asdfasdfasdf";
}

IE7和FF3下都只有一个属性,好像sIEve下也没见内存狂变啊!

相关推荐

    js 内存释放问题

    CollectGarbage(); setTimeout(“CollectGarbage();”, 1); 这里之所以使用setTimeout(),因为可以彻底回收...”就可以帮助浏览器释放内存,IE在最小化和关闭时释放,所以,长时间开着IE窗口,会导致IE再次打开的瞬间速

    IE JS编程需注意的内存释放问题

    在IE下的JS编程中,以下的编程方式都会造成即使关闭IE也无法释放内存的问题,下面分类给出

    iframe如何动态创建及释放其所占内存

    后期测试发现浏览器内存一直居高不下,而且打开iframe页面越多内存占用越大,在IE系列浏览器中尤其明显。所有打开的iframe页面即使关闭了,内存使用也没有明显的下降,IE浏览器在内存占用达到400M左右就变得很卡。...

    fushioncharts循环调用时内存问题

    使用定时器无限次调用fushioncharts渲染图标时浏览器内存占用持续上涨问题解决方案!

    JS类库Bindows1.3中的内存释放方式分析

    我在前段时间介绍过IE中JavaScript脚本Memory Leak的问题,后来在几位热心网友的讨论下,基本认可了内存泄露的事实和原理。在小规模的测试case下,本来都达到了基本避免IE中脚本的ML问题。可是近来发现只以”仔细”...

    Javascript 闭包引起的IE内存泄露分析

    } 上面是两个个很显示的循环引用,IE中产生了内存泄露,由于IE的内存回收机制,导至会长期占用内存而不能释放。 但闭包的内存泄露,有些隐蔽。因为闭包的循环引用,是间接的。 代码如下: function iememery(){ var ...

    【JavaScript源代码】JavaScript CollectGarbage函数案例详解.docx

     首先看一个内存释放的实例: &lt;SCRIPT LANGUAGE="JavaScript"&gt; &lt;!-- strTest = "1"; for ( var i = 0; i ; i ++ ) { strTest += strTest; } alert(strTest); delete strTest; CollectGarbage(); //--&gt; ...

    DWR内存兼容及无法调用问题解决方案

    在上次遇到DWR内存泄漏问题后根据网上的内容对JS文件进行修改,修改后发现还有一些兼容的问题,同时还出现不能调用的一些情况。 而且根据统计DWR就算内存泄漏,也不是特别严重,除非你一个浏览器跑几天不关闭,而且...

    LotusDomino学习笔记(400页涵盖代理和公式使用)

    29. 如何在IE里面实现notes中的 对话框列表? 39 30. LotusDomino环境下编写Web浏览器多数据库检索程序 40 31. WINAPI函数 44 32. 用PowerBuilder访问Lotus Notes数据库 55 33. 如何在表单中加入计数器 58 34. 实现...

    javascript垃圾收集机制与内存泄漏详细解析

    而在C和C++之类的语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况,这是造成许多问题的一个根源。在编写javascript程序时候,开发人员不用再关心内存使用的问题,所需内存的分配 以及无用的回收完全实现...

    完美解决客户端webview持有的页面缓存,不会立即释放的问题

    当我们对页面进行销毁的时候,其中webview持有的HTML页面还会继续存在,加入我们在HTML页面中做了一些监听手机晃动、声音…… 以及使用了js定时任务的情况下。 单纯的销毁我们的native页面并不能达到让页面中这些...

    EZUIKit-JavaScript-test:海康萤石云测试

    UIKit,是基于萤石开放平台OpenSDK封装的UI组件,使用过程中不必学习专业的业务概念,更不用调用繁琐的接口,能够以极简的嵌入方式,快速在您的应用中集成视频功能。 萤石开放平台官网 浏览器支持 chrome ie9+ 国产...

    源文件程序天下JAVASCRIPT实例自学手册

    4.5.6 内存的分配和释放 4.6 本章小结 第5章 文档对象模型(DOM) 5.1 DOM概述 5.1.1 基本对象模型 5.1.2 Netscape Navigator浏览器扩展 5.1.3 Internet Explorer浏览器扩展 5.1.4 Opera、Mozilla和其他浏览器扩展 ...

    iOS中wkwebView内存泄漏与循环引用问题详解

    之前在使用wkwebview的时候,网上很多的基础教程使用很多只是说了怎么添加Message Handler 但是并没有告诉到家有这个内存泄漏的风险,如果你只是也没内的数据调用你压根都不会发现这个问题。没存泄漏这个问题说大...

    EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法

    问题 在本人目前的项目中,前端部分完全使用EXTJS基于“One-Page”理念搭建。除了一个HTML作为基本容器外,就全是JS文件了(页面是由JS文件实现的...故问题肯定是出在IE对包含在JS中的ActiveX控件释放出了问题。毕竟在传

    通过优化网页页面降低对内存及CPU的占用

     浏览器问题,有各自的浏览器处理内存问题会影响到,但几乎没办法控制得了,Windows上的: ·IE系列,刷新回收的量不大,但最小化会释放内存。 ·Firefox2据说也会在最小化回收,可我从没见过最垃圾,用多少是...

    JavaScript基础和实例代码

    4.5.6 内存的分配和释放 4.6 本章小结 第5章 文档对象模型(DOM) 5.1 DOM概述 5.1.1 基本对象模型 5.1.2 Netscape Navigator浏览器扩展 5.1.3 Internet Explorer浏览器扩展 5.1.4 Opera、Mozilla和其他浏览器扩展 ...

    web大文件上传代码

    新的IO组件在处理磁盘中的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件...

    js使用小技巧

    释放内存 CollectGarbage(); 禁止右键 document.oncontextmenu = function() { return false;} 禁止保存 &lt;noscript&gt;&lt;iframe src="*.htm"&gt;&lt;/iframe&gt;&lt;/noscript&gt; 禁止选取()" oncopy="document.selection....

Global site tag (gtag.js) - Google Analytics