简单三步,搞掂内存泄漏


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实现的鼠标链接提示效果生成器代码
Jun 28 Javascript
jQuery中outerHeight()方法用法实例
Jan 19 Javascript
jQuery.uploadify文件上传组件实例讲解
Sep 23 Javascript
基于AngularJS前端云组件最佳实践
Oct 20 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
javascript中replace使用方法总结
Mar 01 Javascript
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
js+css实现红包雨效果
Jul 12 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
Jun 03 Javascript
JavaScript中如何调用Java方法
Sep 16 Javascript
带你彻底理解JavaScript中的原型对象
Apr 14 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响应post请求上传文件的方法
2015/12/17 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
python实现数通设备端口监控示例
2014/04/02 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
实习教师自我鉴定
2013/09/27 职场文书
工程师求职简历的自我评价分享
2013/10/10 职场文书
电子商务专业个人的自我评价
2013/11/19 职场文书
个人工作表现评语
2014/04/30 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
2014年审计工作总结
2014/11/17 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
商务信函英语问候语
2015/11/10 职场文书
创业计划书之服装
2019/10/07 职场文书
python 如何用terminal输入参数
2021/05/25 Python
Python 全局空间和局部空间
2022/04/06 Python