jQuery 1.7.1 Ajax和内存泄漏

时间:2011-11-23 17:32:02

标签: jquery memory-leaks jquery-1.7

当我使用jQuery 1.4.2时,我已经遇到了一些问题(http://stackoverflow.com/questions/8158739/ie-memory-leak-and-eval-with-jquery/8176724#8176724)

现在我已经将我的jQuery更新到版本1.7.1,并且每次迭代后内存都会缓慢增加。

这是我的代码:

var interval;
function setupdaterate(rate) {
    //if the interval wasn't defined only
    if (interval == undefined) {
        interval = setInterval(updateitems, rate * 1000);
    }
}

function updateitems() {

        $('.updatable').each(function () {
            var data = 'ViewObjectId=' + $(this).attr('objectid');

            $.ajax({
                async: true,
                url: '/Ajax/GetUpdatedViewObjectDataHandler.ashx',
                data: data,
                type: 'POST',
                timeout: 10000
            }).done(function (data) {
                //do the job

            });

          });

}

10秒后,所有具有“可更新”类的项目都会更新。但由于某种原因,这段代码泄露了一些内存。

这是使用jquery ajax的最佳方式吗?什么可能导致内存泄漏行为?

我怎么能找出问题出在哪里?有什么建议?

2 个答案:

答案 0 :(得分:1)

无法说明为什么会发生这种情况,因为没有堆屏幕截图,也没有done回调的代码,但摆脱了所发生的所有意外关闭 最小化内存使用量。以下假设它在全局范围内运行/否则为空函数:

var interval;
function setupdaterate(rate) {
    //if the interval wasn't defined only
    if (interval == undefined) {
    interval = setInterval(updateitems, rate * 1000);
    }
}

function updateDone( data ){
    //do the job
}

function iterator() {
    var data = 'ViewObjectId=' + $(this).attr('objectid');

    $.ajax({
        async: true,
        url: '/Ajax/GetUpdatedViewObjectDataHandler.ashx',
        data: data,
        type: 'POST',
        timeout: 10000
        }).done( updateDone
    );
}

function updateitems() {

    $('.updatable').each( iterator );

}

答案 1 :(得分:0)

Esailija,

我尝试了你的代码,它正在运行并使用与我相同的内存。我今天注意到了一些事情,昨天我正在测试 IE8开发者工具打开,我几乎可以肯定这是因为内存泄漏。因为今天我正在测试关闭,内存使用非常稳定。

我也验证了我的代码并且我对它有一些了解,我认为这可能是问题所在,但不,问题是IE8开发人员工具窗口的故障以及它的糟糕内存管理。