教程集 www.jiaochengji.com
教程集 >  jQuery  >  jquery 教程  >  正文 JQuery1.4+ Ajax IE8 内存泄漏问题

JQuery1.4+ Ajax IE8 内存泄漏问题

发布时间:2013-07-30   编辑:jiaochengji.com
将JQuery1.2.6升级到JQuery1.4,有几天下班没有关闭ajax轮询网页,第二天早上来,内存耗尽,发现此内存泄漏在IE6上不存在(IE7未测试),IE8上存在
jquery1.2.6升级到JQuery1.4,有几天下班没有关闭ajax轮询网页,第二天早上来,内存耗尽,发现此内存泄漏在IE6上不存在(IE7未测试),IE8上存在 并且JQuery1.3.2版本不存在,JQuery1.4+版本存在
通过对比,最终找到这两个版本的其中一个差别
JQuery1.4+在ajax方法增加了一段代码,用于在abort时调用onreadystatechange方法
复制代码 代码如下:

try {
var oldAbort = xhr.abort;
xhr.abort = function() {
if ( xhr ) {
oldAbort.call( xhr );
}
onreadystatechange();
};
} catch(e) { }


经查,正是此段赋值产生了错误
onreadystatechange的readyState为4,即成功时,将xhr.abort销毁
内存泄漏解决
另:如果直接xhr.abort=null,不知道为什么在IE6下会报错
只好try…catch一下,反正IE6不修正错误与不会有问题

此项问题在IE8中有问题的原因不明
可能是xhr.abort与oldAbort产生了一个闭包?
但为什么IE6不泄漏?

您可能感兴趣的文章:
JQuery1.4+ Ajax IE8 内存泄漏问题
Java内存泄漏原理及如何防止
.go语言是否存在内存泄露问题?发现go语言内存泄漏的2种方法
使用pprof进行golang程序内存分析
golang defer避免资源泄漏
golang编程技巧:利用GC机制优雅地关闭协程,避免内存泄漏
了解 C 语言中的指针和内存泄漏及如何避免
关于IE下图片的预加载过程
避免PHP-FPM内存泄漏导致内存耗尽
如何泄漏一个协程然后修复它

[关闭]
~ ~