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 相关文章推荐
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
jQuery中even选择器的定义和用法
Dec 23 Javascript
jQuery实现模拟marquee标签效果
Jul 14 Javascript
js 定义对象数组(结合)多维数组方法
Jul 27 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
Jan 13 Javascript
jQuery学习之DOM节点的插入方法总结
Jan 22 Javascript
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
vue项目中api接口管理总结
Apr 20 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 jQuery
微信公众平台 发送模板消息(Java接口开发)
Apr 17 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 Javascript
Vue router配置与使用分析讲解
Dec 24 Vue.js
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中创建和验证哈希的简单方法实探
2015/07/06 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
yepnope.js 异步加载资源文件
2011/09/08 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
python实现录音小程序
2020/10/26 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
好家长事迹材料
2014/01/23 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
故意杀人案辩护词
2015/05/21 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
Android中View.post和Handler.post的关系
2022/06/05 Java/Android