jQuery$.ajax内存泄漏?
为什么jQueryAjax会在Firefox和其他浏览器上造成可怕的内存泄漏 jsfiddle: 如果在Firefox这样的浏览器中运行此功能,会导致内存增加。还有谁见过这个吗?有没有办法用jQuery ajax阻止内存泄漏?谢谢jQuery$.ajax内存泄漏?,jquery,ajax,firefox,memory-leaks,Jquery,Ajax,Firefox,Memory Leaks,为什么jQueryAjax会在Firefox和其他浏览器上造成可怕的内存泄漏 jsfiddle: 如果在Firefox这样的浏览器中运行此功能,会导致内存增加。还有谁见过这个吗?有没有办法用jQuery ajax阻止内存泄漏?谢谢 $.ajax({ url: "http://ws.geonames.org/searchJSON", dataType: "jsonp", data: { featureClass: "P", style: "f
$.ajax({
url: "http://ws.geonames.org/searchJSON",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 12,
name_startsWith: "M"
},
success: function( data ) {
setInterval(function() {
get_some_stuff();
}, 1000);
load_count = load_count + 1;
$('body h1').text('load_count: ' + load_count);
}
})
这是因为您正在从
getsomestuff()
函数中调用setInterval()
<代码>设置间隔用于在指定的时间间隔内反复运行函数。你的问题是因为所有那些注册函数调用(通过setInterval
)都是每秒执行的,而且有很多调用。这是因为你是从获取一些东西()
函数中调用setInterval()
<代码>设置间隔用于在指定的时间间隔内反复运行函数。您的问题是因为所有这些注册函数调用(通过setInterval
)都是每秒执行的,而且有很多调用。ajax请求成功后,您将递归调用get\u some\u stuff()
。此外,每次ajax请求完成时,都会设置一个在1秒后调用函数的循环。每次调用ajax时,都会调用另一个循环。如果这种情况持续1000个周期,您将有1000个循环,所有这些循环都将调用get\u some\u stuff()
函数。ajax请求成功后,您将递归调用get\u some\u stuff()
。此外,每次ajax请求完成时,都会设置一个在1秒后调用函数的循环。每次调用ajax时,都会调用另一个循环。如果这种情况持续1000个循环,您将有1000个循环,所有这些循环都将调用get_some_stuff()
函数。我想您应该执行SetTimeout而不是SetInterval
试试这个
我想您应该执行SetTimeout而不是SetInterval 试试这个
我最近遇到了一个类似的问题,对json web服务的重复ajax调用导致了严重的内存泄漏,即使没有对json对象本身进行任何处理 我猜jQuery中有一个bug。将您的数据类型更改为“text”,然后使用不使用eval()的库解析结果响应,我认为这是导致泄漏的原因
我在这里找到了这个图书馆。到目前为止,它运行良好,尽管它使用了更多的CPU 我最近遇到了一个类似的问题,对json web服务的重复ajax调用导致了严重的内存泄漏,即使没有对json对象本身进行任何处理 我猜jQuery中有一个bug。将您的数据类型更改为“text”,然后使用不使用eval()的库解析结果响应,我认为这是导致泄漏的原因
我在这里找到了这个图书馆。到目前为止,它运行良好,尽管它使用了更多的CPU 这段代码是否包含在
获取一些东西中?这都是JSFIDLE URL,您在这里试图实现什么?你想让它正常运行1000次。有没有理由让两个ajax请求同时出现?在打下一个电话之前,你不想等待你的回复吗?还是我遗漏了什么?@anaprentice--非常感谢!这段代码是否包含在获取一些东西中?这都是JSFIDLE URL,您在这里试图实现什么?你想让它正常运行1000次。有没有理由让两个ajax请求同时出现?在打下一个电话之前,你不想等待你的回复吗?还是我遗漏了什么?@anaprentice--非常感谢!是的,但在1000次运行后,它将停止,这就是为什么会有一个计数器。@apreprentice我认为您知道方法setInterval
是错误的,这是语法:setInterval(code,毫秒,lang)
,因此循环之间的等待时间为毫秒,不是它将被执行的次数是的,但这些函数仍在继续执行,因为setInterval
,它每秒钟执行所有这些函数。@des,是的--对不起,我是响应您答案的预编辑版本,然后编辑我的注释以响应您的编辑。再次查看您的答案,我发现您已经完全纠正了我最初的抱怨。@des+1 SetInterval()很可能是这里的真正问题;然而,您可能应该删除您的初始语句,因为get_some_stuff()是用来调用自身的。但是在运行1000次之后,它将停止,这就是为什么会有一个计数器。@apreprentice我认为您知道方法setInterval
是如何错误的,这是语法:setInterval(code,毫秒,lang)
,因此,循环之间的等待时间是毫秒,而不是它将被执行的次数是的,但这些函数一直在执行,因为setInterval
,它每秒钟执行所有这些函数。@des,是的--对不起,我是在响应您答案的预编辑版本,然后编辑我的评论以回应您的编辑。再次查看您的答案,我发现您已经完全纠正了我最初的抱怨。@des+1 SetInterval()很可能是这里的真正问题;然而,您可能应该删除初始语句,因为get_some_stuff()是用来调用自身的。