为什么jQuery ajax会导致Firefox和Linux上出现可怕的内存泄漏其他浏览器?
jsfiddle:http://jsfiddle.net/Rqfz7/
如果你在像Firefox这样的浏览器中运行它,这会导致内存爬升。有没有人见过这个?有没有办法用jQuery ajax来阻止内存泄漏?感谢
$.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);
}
})
答案 0 :(得分:4)
这是因为您正在setInterval()
函数内调用get_some_stuff()
。 setInterval
用于以指定的时间间隔反复运行函数。您的问题是因为所有这些注册函数调用(通过setInterval
)每秒都在执行,并且有很多函数调用。
答案 1 :(得分:1)
答案 2 :(得分:0)
ajax请求成功后,您将递归调用get_some_stuff()
。此外,每次ajax请求完成时,您将设置一个在1秒后调用该函数的循环。每次调用ajax时,都会调用另一个循环。如果这持续了1000个周期,那么你将有1000个循环都调用get_some_stuff()
函数。
答案 3 :(得分:0)
我最近有一个类似的问题,重复ajax调用json web服务导致大量内存泄漏,即使没有任何处理json对象本身。
事实证明,我猜jQuery中存在一个错误。将您的dataType更改为'text',然后使用不使用eval()的库解析生成的响应,这是造成我认为泄漏的原因。
我在这里找到了这个图书馆json_parse.js。到目前为止它运行良好,虽然它使用了更多的CPU。