简单三步,搞掂内存泄漏


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 相关文章推荐
jQuery 扩展对input的一些操作方法
Oct 30 Javascript
网络图片延迟加载实现代码 超越jquery控件
Mar 27 Javascript
js常用排序实现代码
Dec 28 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
动态添加删除表格行的js实现代码
Feb 28 Javascript
jquery实现的一个简单进度条效果实例
May 12 Javascript
jquery实现弹出层效果实例
May 19 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
Dec 07 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
Sep 19 Javascript
微信小程序实现弹出菜单功能
Jun 12 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
详解vue中v-on事件监听指令的基本用法
Jul 22 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
js右键菜单效果代码
2007/07/21 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
python实现用户答题功能
2018/01/17 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
PyTorch-GPU加速实例
2020/06/23 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
创联软件面试题笔试题
2012/10/07 面试题
会计职业生涯规划范文
2014/01/04 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
十八大宣传标语
2014/10/09 职场文书
蓬莱阁导游词
2015/02/04 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python