简单三步,搞掂内存泄漏


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 相关文章推荐
JavaScript 应用技巧集合[推荐]
Aug 30 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
Sep 08 Javascript
Jquery ajaxsubmit上传图片实现代码
Nov 04 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
Mar 26 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
实现音乐播放器的代码(html5+css3+jquery)
Aug 04 Javascript
Javascript中document.referrer隐藏来源的方法
Jan 16 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
jq给页面添加覆盖层遮罩的实例
Feb 16 Javascript
vue.js实现价格格式化的方法
May 23 Javascript
微信小程序拍照和摄像功能实现方法示例
Feb 01 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
May 07 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
php常用数学函数汇总
2014/11/21 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
extJs 下拉框联动实现代码
2010/04/09 Javascript
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
js代码实现轮播图
2020/05/04 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python实现html转ubb代码(html2ubb)
2014/07/03 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
python读取并写入mat文件的方法
2019/07/12 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
日语翻译个人求职的自我评价
2013/10/14 职场文书
会计核算科岗位职责
2014/03/19 职场文书
企业文化标语口号
2014/06/09 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
工程部文员岗位职责
2015/02/04 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
英雄儿女观后感
2015/06/09 职场文书
Python Numpy库的超详细教程
2022/04/06 Python