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 相关文章推荐
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
Jul 05 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
jquery批量设置属性readonly和disabled的方法
Jan 24 Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 Javascript
快速掌握Node.js模块封装及使用
Mar 21 Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
Jan 03 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
图文详解vue框架安装步骤
Feb 12 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
Apr 29 Javascript
Vant 中的Toast设置全局的延迟时间操作
Nov 04 Javascript
微信小程序实现登录注册功能
Dec 29 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房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
dojo 之基础篇
2007/03/24 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python分支结构(switch)操作简介
2018/01/17 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
python实现桌面托盘气泡提示
2019/07/29 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
自荐信模版
2013/10/24 职场文书
毕业生自荐书
2013/12/18 职场文书
农行心得体会
2014/09/02 职场文书
内科护士节演讲稿
2014/09/11 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
2014年教务处工作总结
2014/12/03 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
会议主持词开场白
2015/05/28 职场文书
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记