简单三步,搞掂内存泄漏


Posted in Javascript onMarch 10, 2007
原文地址:http://www.jackslocum.com/blog/2006/10/02/3-easy-steps-to-avoid-javascript-memory-leaks/
你可能还未知道,你浏览的大多数的js网站,会引起 内存泄漏。听起来有点夸张,但这是事实,难道我会骗你吗?
泄漏监视器
Leak Monitor
 这是个方便的FireFox扩展,当你离开那页的时候它便会指向JavsScript对象,如果出现泄漏的话会弹出一个窗口显示细节内容,而且能够告诉你是那个对象或函数引起的泄漏。
离开http://script.aculo.us/的时候
这应该我是最常见的泄漏  prototype.js, line 74:3
 
简单三步,搞掂内存泄漏
The Dojo Mail 例子页面
严重的泄漏,一下子弹出两个窗口 (注意滚动条!)。
简单三步,搞掂内存泄漏
Word Press
这个更离谱。我每次写完Word press,就会出现!
简单三步,搞掂内存泄漏

访问一般的站点,你会发现大多数站点都会出现这类问题。的确,如果一些网站没有经过这样的测试,多少会让人感到震惊,--本来适当一下的修改就可以确保这种问题不会发生。
 虽然这网站(Jack'sBlog、范例)统统都是JavaScript的,但你不必担心任何泄漏的危险。


如下简单的三步:
       1. 当你完成后,设置你的 XMLHttpRequest onreadystatechange handlers 为null,
我使用 YAHOO.util.Connect 来进行XHR链接 ,因为它使用了 polling mechanism来代替readstate, 这样我不用手工set null了。我推荐你,在允许的情况下,使用YAHOO.util.Connect (或建于其之上的 YAHOO.ext.UpdateManager)。
      2. 在unload事件中清除所有 DOM event handlers object ,如果它们有引用 (Refence)的机会的话。
能够让Library做的,就不要用自己的方法做! 对于事件event的机制,我均使用了YAHOO.util.Event来处理. 其它的library (prototype, dojo, etc) 亦有自己的相应的机制来处理。 --尽管我不清楚它们的执行效率去到那里。 如果你再仔细看看上面的截图,你会发现上面的泄漏代码都会关联到这些library里面去(用事实证明事故的源头,Frank注)
      3.除了一些基本类型的数据primitive value (String 、Number),切勿放其它任何东西在 DOM expando 或 property 。当然,你能保证及时清除它的话,便是一个例外。
       这就是最重要的金科玉律了。在DOM expando放东西,你会觉得很方便, 然后用 $()获取它, 但千万不要这样做。 真的,我知道你在想什么,现在的我已经有线想妄想症的认了.没错,很多场合都会把JS对象放到 DOM expando,也没啥状况发生,但也会有很多。。。。这种情况不容易检查出来啊!(例如:闭包closures). 所以要避免任何可能的发生,我只会按照这样的规律做.
摘要

解决这个问题并不是太难。它不需要任何技巧或经验之谈。只要注意好以上几点,一个新手novice也知道如何避免泄漏。
请拜托一些大网站(包括新的 Yahoo Mail!?!?),花点时间,做足功夫,让我(或其他人)浏览你的网页而不遭受内存泄漏。

Javascript 相关文章推荐
学习ExtJS 访问容器对象
Oct 07 Javascript
Jquery Validation插件防止重复提交表单的解决方法
Mar 05 Javascript
js 金额文本框实现代码
Feb 14 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
Dec 19 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
Apr 03 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
JS实现的input选择图片本地预览功能示例
Aug 29 Javascript
Node.js动手撸一个静态资源服务器的方法
Mar 09 Javascript
H5实现手机拍照和选择上传功能
Dec 18 Javascript
搭建vscode+vue环境的详细教程
Aug 31 Javascript
原生js 实现表单验证功能
Feb 08 Javascript
如何简单地用YUI做JavaScript动画
Mar 10 #Javascript
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 #Javascript
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 #Javascript
Gird事件机制初级读本
Mar 10 #Javascript
Gird组件 Part-3:范例RSSFeed Viewer
Mar 10 #Javascript
对YUI扩展的Gird组件 Part-2
Mar 10 #Javascript
对YUI扩展的Gird组件 Part-1
Mar 10 #Javascript
You might like
Symfony控制层深入详解
2016/03/17 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
js中作用域的实例解析
2017/03/16 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
Python3 能振兴 Python的原因分析
2014/11/28 Python
Python中常见的异常总结
2018/02/20 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
eclipse创建python项目步骤详解
2019/05/10 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Python如何输出整数
2020/06/07 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
大客户销售经理职责
2013/12/04 职场文书
大学生军训广播稿
2014/01/24 职场文书
火车的故事教学反思
2014/02/11 职场文书
承诺书样本
2014/08/30 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
2014年教研工作总结
2014/12/06 职场文书
保研推荐信范文
2015/03/25 职场文书
志愿服务心得体会
2016/01/15 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python