1

我在使用 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 的最佳方式吗?什么可能导致内存泄漏行为?

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

4

2 回答 2

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 );

}
于 2011-11-23T17:59:51.830 回答
0

埃塞利亚,

我尝试了您的代码,它可以正常工作并使用与我相同的内存。我今天注意到一些事情,昨天我在打开IE8 开发人员工具进行测试时,我几乎可以肯定这是导致内存泄漏的原因。因为今天我正在测试那个关闭并且内存使用非常稳定。

我也验证了我的代码,并且我对它进行了一些评估,我认为这可能是问题所在,但不,问题确实是 IE8 开发人员工具窗口和糟糕的内存管理的错误。

于 2011-11-24T17:13:20.500 回答