gpt4 book ai didi

重复 .ajax 调用导致 jQuery 内存泄漏

转载 作者:行者123 更新时间:2023-12-03 22:42:18 26 4
gpt4 key购买 nike

我使用的以下模式在 Firefox 中会泄漏内存:

$(function() {

(function() {

var callee = arguments.callee;

$.ajax({
url: '...',
success: function() { ... setTimeout(callee, 1000); },
error: function() { ... setTimeout(callee, 1000); }
});

})();

});

即使成功/错误除了再次调用 setTimeout 之外什么也不做,内存泄漏仍然存在。我正在通过 Windows 任务管理器观察泄漏;如果页面保持打开状态,firefox.exe 的内存使用量会慢慢增加。对于此代码的最终版本,我只需要每分钟更新一次,但每秒更新一次会更快地演示内存泄漏!

(注意:这看起来与 this question 非常相似,但所选答案似乎不适合 Firefox)

最佳答案

我能够重现该问题并解决它:

$(function() 
{
function checkStatus()
{
$.ajax({
url: '...',
success: function() { ... setTimeout(checkStatus, 1000); },
error: function() { ... setTimeout(checkStatus, 1000); }
});

}

checkStatus();

});

似乎发生的情况是每次调用匿名方法时,它都会创建一个变量并为其分配一个引用。如果有足够的时间,这将填满内存。

此解决方案只是传递相同的函数引用,而不是在每次迭代时创建一个新函数引用。

关于重复 .ajax 调用导致 jQuery 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3617442/

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