简单三步,搞掂内存泄漏


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 相关文章推荐
json数据与字符串的相互转化示例
Sep 18 Javascript
js中for in的用法示例解析
Dec 25 Javascript
招聘网站基于jQuery实现自动刷新简历
May 10 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
Aug 27 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 Javascript
第三章之Bootstrap 表格与按钮功能
Apr 25 Javascript
简单的js表格操作
Sep 24 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
对vux点击事件的优化详解
Aug 28 Javascript
详解Vue中的基本语法和常用指令
Jul 23 Javascript
Ant Design的Table组件去除
Oct 24 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实现批量查询清除一句话后门的代码
2008/01/20 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
js实现简单的秒表
2020/01/16 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
python uuid模块使用实例
2015/04/08 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
Python----数据预处理代码实例
2019/03/20 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Python几种常见算法汇总
2020/06/02 Python
基于python实现操作git过程代码解析
2020/07/27 Python
英国电信商店:BT Shop
2019/12/17 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
医院后勤自我鉴定
2013/10/13 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
win sever 2022如何占用操作主机角色
2022/06/25 Servers