【问题标题】:jQuery 1.7.1 Ajax and Memory LeakjQuery 1.7.1 Ajax 和内存泄漏
【发布时间】:2023-04-08 23:28:02
【问题描述】:

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

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

【问题讨论】:

  • 您是否尝试过使用早期版本的 jQuery,例如 1.5 或 1.6.4?
  • 不,我没有尝试以前的版本。

标签: jquery memory-leaks jquery-1.7


【解决方案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 );

}

【讨论】:

  • 我可以说,当我将选择器放入 done 回调中时,它会泄漏。像这样: $('#ID').css('height', 10);我已经准确地添加了该声明,它也泄漏了。
【解决方案2】:

埃塞利亚,

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2012-10-25
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    相关资源
    最近更新 更多