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

SetIntervalの代わりにSetTimeoutを実行したいと思います。

これを試して..

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

最近、同様の問題が発生しました。jsonWebサービスへのajax呼び出しを繰り返すと、jsonオブジェクト自体を処理しなくても大量のメモリリークが発生しました。

私が推測するjQueryにバグがあることがわかりました。dataTypeを'text'に変更してから、結果の応答をeval()を使用しないライブラリで解析します。これがリークの原因であると私は信じています。

このライブラリはjson_parse.jsで見つかりました。これまでのところ、少し多くのCPUを使用していますが、正常に機能しています。

于 2012-10-02T19:36:20.373 に答える