jQuery $ .ajax内存泄漏?

时间:2012-09-07 15:48:42

标签: jquery ajax firefox memory-leaks

为什么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);             
    }
})

4 个答案:

答案 0 :(得分:4)

这是因为您正在setInterval()函数内调用get_some_stuff()setInterval用于以指定的时间间隔反复运行函数。您的问题是因为所有这些注册函数调用(通过setInterval)每秒都在执行,并且有很多函数调用。

答案 1 :(得分:1)

我认为你想要SetTimeout而不是SetInterval。

试试这个..

http://jsfiddle.net/Rqfz7/2/

答案 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。