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


Posted in Javascript onJune 23, 2009

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源码站点中,在它们的源码里都会看到采用上述解决方式进行内存的释放管理。

研究 jsvm 的时候,发现 js.lang.System 里面定义了 gc() 方法

System.gc = function ()
{

if (System.isIeBrowser())

{

CollectGarbage();

setTimeout("CollectGarbage();", 1);

}
}

CollectGarbage() 是ie特有的一个释放内存函数

Javascript 相关文章推荐
从父页面读取和操作iframe中内容方法
Jul 25 Javascript
锋利的jQuery 第三章章节总结的例子
Mar 23 Javascript
js获得参数的getParameter使用示例
Feb 26 Javascript
js获取url中&quot;?&quot;后面的字串方法
May 15 Javascript
JavaScript利用正则表达式去除日期中的-
Jun 09 Javascript
AngularJS基础 ng-model-options 指令简单示例
Aug 02 Javascript
JS中检测数据类型的几种方式及优缺点小结
Dec 12 Javascript
元素全屏的设置与监听实例
Nov 28 Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
Aug 22 Javascript
vue项目引入字体.ttf的方法
Sep 28 Javascript
vue.js 实现a标签href里添加参数
Nov 12 Javascript
js form 验证函数 当前比较流行的错误提示
Jun 23 #Javascript
javascript form 验证函数 弹出对话框形式
Jun 23 #Javascript
WordPress 照片lightbox效果的运用几点
Jun 22 #Javascript
WordPress JQuery处理沙发头像
Jun 22 #Javascript
JQuery 前台切换网站的样式实现
Jun 22 #Javascript
利用JQuery为搜索栏增加tag提示
Jun 22 #Javascript
web 页面分页打印的实现
Jun 22 #Javascript
You might like
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
php类常量用法实例分析
2015/07/09 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python简单实现控制电脑的方法
2018/01/22 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
python如何删除列为空的行
2020/07/17 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
服装电子商务创业计划书
2014/01/30 职场文书
爱国主义电影观后感
2015/06/18 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
python实现简单的井字棋
2021/05/26 Python