关于ie中jscript的内存泄漏
关注这个问题有一阵子了。网上找找,Douglas Crockford 的文章《JScript Memory Leaks》有详细说明,鸟食轩也有一系列相关文章。
以下是对《JScript Memory Leaks》一文的节选翻译,大致说明了ie内存泄漏的原因。
“microsoft的ie浏览器有许多内存泄漏问题,最严重的就是使用jscript交互引发。当dom节点包含了一个对javascript对象(如事件处理函数onclick)的引用,同时该javascript对象也引用此节点时(如鼠标单击时隐藏节点),就形成了一个循环结构。它本身没有问题——当对dom节点和事件处理函数的引用消失,garbage collector(一个自动的内存资源管理器)会回收它们,使它们占用的空间再分配。javascript的garbage collector理解循环,不会产生问题。不幸的是,ie的dom不归jscript管。ie有自己的内存管理器却不理解循环,因此产生混乱。结果,当循环出现,却没有内存回收,没被回收的内存就泄漏了。时间长了,就会导致内存不足,当内存空间涨满,浏览器就死了。”
注:“javascript”指的是语言本身,“jscript”是microsoft的类似javascript脚本语言。
Crockford 建议的解决方法是:在删除含有对javascript对象引用的dom节点之前,把属性中类型为function的全部清除(设为null)。我试过,确实有效。

![htmlor [at] gmail.com](http://static.blog.htmlor.com/myimages/htmlor_gmail.gif)

2条评论 »
seektan
2008-01-24 14:32
前段时间看了Douglas Crockford 的文章《JScript Memory Leaks》,也凑了一篇文章,今天才看到你的这篇,你的博客不错。
http://hi.baidu.com/webworker/blog/item/25f9f0dcf14d51a2cc116671.html
纠结的IE浏览器内存泄漏的测试 | Javascript is dancing
2010-05-21 16:49
[…] 更多参考:《如何防止动态加载JavaScript引起的内存泄漏问题》,《javascript 内存管理 避免内存泄漏》,《关于ie中jscript的内存泄漏》,《javascript垃圾回收和IE内存泄露》,《防止Javascript造成IE内存泄漏的若干原则》,《JScript内存泄漏/ie内存泄漏》,《关于Javascript的内存泄漏问题的整理稿》,《JScript Memory Leaks》,《Understanding and Solving Internet Explorer Leak Patterns》,《理解并解决IE的内存泄漏方式[翻译]》 JavascriptJavascript, 内存泄漏← 干掉Wordpress的syntaxhighlighter插件 Leave a Reply点击这里取消回复 Name (*) […]
评论feed