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 相关文章推荐
jquery validate使用攻略 第四步
Jul 01 Javascript
javascript代码加载优化方法
Jan 30 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
js实现select组件的选择输入过滤代码
Oct 14 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
jquery获取img的src值的简单实例
May 17 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
解决js ajax同步请求造成浏览器假死的问题
Jan 18 Javascript
浅析Vue.js 中的条件渲染指令
Nov 19 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
Node.js创建一个Express服务的方法详解
Jan 06 Javascript
JavaScript多种图形实现代码实例
Jun 28 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 遍历文件实现代码
2011/05/04 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
详解php实现页面静态化原理
2017/06/21 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
Python求导数的方法
2015/05/09 Python
python动态参数用法实例分析
2015/05/25 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
python flask中动态URL规则详解
2019/11/22 Python
Python多线程获取返回值代码实例
2020/02/17 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
千元咖啡店的创业计划书范文
2013/12/29 职场文书
技校个人求职信范文
2014/01/25 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
自荐信怎么写
2015/03/04 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
焦裕禄观后感
2015/06/03 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书