我正在使用以下模式,该模式在 Firefox 中会泄漏内存:
$(function() {
(function() {
var callee = arguments.callee;
$.ajax({
url: '...',
success: function() { ... setTimeout(callee, 1000); },
error: function() { ... setTimeout(callee, 1000); }
});
})();
});
即使成功/错误除了再次调用 setTimeout 之外什么也不做,内存泄漏仍然存在。我正在通过 Windows 任务管理器观察泄漏;如果页面保持打开状态,firefox.exe 的内存使用量会慢慢增加。对于此代码的最终版本,我只需要每分钟更新一次,但每秒更新一次会更快地演示内存泄漏!
(注意:这看起来是一个非常相似的问题这个问题 https://stackoverflow.com/questions/1455947/memory-leak-involving-jquery-ajax-requests,但所选答案似乎不适合 Firefox)
我能够重现该问题并解决它:
$(function()
{
function checkStatus()
{
$.ajax({
url: '...',
success: function() { ... setTimeout(checkStatus, 1000); },
error: function() { ... setTimeout(checkStatus, 1000); }
});
}
checkStatus();
});
似乎会发生的是每次调用匿名方法时,它都会创建一个变量并为其分配一个引用。如果有足够的时间,这将填满内存。
该解决方案只是传递相同的函数引用,而不是在每次迭代时创建一个新的函数引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)