gpt4 book ai didi

jquery - 简单的 jQuery Ajax 调用会泄漏 Internet Explorer 中的内存

转载 作者:行者123 更新时间:2023-12-03 21:28:41 26 4
gpt4 key购买 nike

我创建了一个每秒进行一次 Ajax 调用的网页。在 Internet Explorer 7 中,内存泄漏严重(大约 15 分钟内泄漏 20 MB)。

程序非常简单。它只是运行一个进行 Ajax 调用的 JavaScript 函数。服务器返回一个空字符串,JavaScript 代码不对其执行任何操作。我使用 setTimeout 每秒运行该函数,并且我使用 Drip观看事物。

来源如下:

<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('jquery', '1.4.2');
google.load('jqueryui', '1.7.2');
</script>
<script type="text/javascript">
setTimeout('testJunk()',1000);
function testJunk() {
$.ajax({ url: 'http://xxxxxxxxxxxxxx/test', // The url returns an empty string
dataType: 'html',
success: function(data){}
});
setTimeout('testJunk()',1000)
}
</script>
</head>
<body>
Why is memory usage going up?
</body>
</html>

如何堵住这个漏洞?我有一个真实的应用程序,可以通过这种方式更新一个大表,但如果无人看管,它将耗尽千兆字节的内存。

编辑:好的,在一些好的建议之后,我将代码修改为:

<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('jquery', '1.4.2');
google.load('jqueryui', '1.7.2');
</script>
<script type="text/javascript">
setTimeout(testJunk,1000);
function testJunk() {
$.ajax({ url: 'http://xxxxxxxxxxxxxx/test', // The url returns an empty string
dataType: 'html',
success: function(data){setTimeout(testJunk,1000)}
});
}
</script>
</head>
<body>
Why is memory usage going up?
</body>
</html>

不过,这似乎没有任何区别。我没有对 DOM 做任何事情,如果我注释掉 Ajax 调用,内存泄漏就会停止。所以看起来泄漏完全是在 Ajax 调用中。 jQuery Ajax 本质上是否会创建某种循环引用?如果是,我该如何释放它?顺便说一句,它在 Firefox 中不会泄漏。

有人建议在另一个虚拟机中运行测试,看看结果是否相同。我没有设置另一个虚拟机,而是找到了一台运行 XP Home 和 Internet Explorer 8 的笔记本电脑。它也出现了同样的问题。

我尝试了一些旧版本的 jQuery 并获得了更好的结果,但问题并没有完全消失,直到我放弃了 jQuery 中的 Ajax 并采用更传统(且丑陋)的 Ajax。

最佳答案

这是一个link jQuery 上的错误,以及 jQuery 1.4.2 的建议修复:

--- jquery-1.4.2.js     2010-04-08 12:10:20.000000000 -0700
+++ jquery-1.4.2.js.fixed 2010-04-08 12:10:38.000000000 -0700
@@ -5219,7 +5219,7 @@

// Stop memory leaks
if ( s.async ) {
- xhr = null;
+ xhr.onreadystatechange = null; xhr.abort = null; xhr = null;
}
}
};

注意:这已在 jQuery 1.4.4 中正式修复,因此您最好的选择是立即升级。

关于jquery - 简单的 jQuery Ajax 调用会泄漏 Internet Explorer 中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2429056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com