0

为什么 jQuery ajax 会在 Firefox 和其他浏览器上导致可怕的内存泄漏?

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

4 回答 4

4

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

于 2012-09-07T15:52:12.240 回答
1

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

尝试这个..

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

于 2012-09-07T15:55:43.357 回答
0

您正在递归调用get_some_stuff()ajax 请求成功。此外,每次 ajax 请求完成时,您都会设置一个循环,在 1 秒后调用该函数。每次调用 ajax 时,您都会调用另一个循环。如果这种情况持续 1000 个循环,那么您将有 1000 个循环都调用该get_some_stuff()函数。

于 2012-09-07T15:55:09.033 回答
0

我最近有一个类似的问题,对 json Web 服务的重复 ajax 调用导致严重的内存泄漏,即使没有对 json 对象本身进行任何处理。

原来,我猜 jQuery 中有一个错误。将您的数据类型更改为“文本”,然后使用不使用 eval() 的库解析结果响应,这就是我认为导致泄漏的原因。

我在这里json_parse.js找到了这个库。到目前为止,它运行良好,尽管它使用了更多的 CPU。

于 2012-10-02T19:36:20.373 回答