【问题标题】:jQuery DOM manipulation memory leak in IEIE 中的 jQuery DOM 操作内存泄漏
【发布时间】:2012-01-12 19:05:40
【问题描述】:

我们在 IE 上进行 DOM 操作时发现了严重的内存泄漏。基本上,我们是这样做的:

function updateTable(){
    $.get('table.jsp', {}, function(data){
        $('#dataTableContainer').empty().html($(data).find('#dataTable'));
        setTimeout(updateTable, 1000);
    });
}

并每秒重复一次该方法。从我们所见,该方法在 jQuery 1.7.1 中每 10 秒泄漏大约 1Mb 的内存(旧版本更糟)。

我们做错了吗?我们尝试了几种已在 stackoverflow 中发布的解决方案(例如jQuery memory leak with DOM removal),但都没有奏效。

【问题讨论】:

  • 我认为这不是问题,但我的印象是$(<selector>).html(<some-html>)$(<selector>).empty().append(<some-html>) 相同。您是否发现情况并非如此(或者您调用.empty() 函数还有其他原因)?
  • 我们可能不得不查看其余的相关代码。
  • @Patricia - jQuery 的版本是正确的。
  • 出于某种原因,我将其读作 jquery ui 版本。我想我需要检查一下眼睛!
  • 实际上,我知道这是有问题的行,因为当我评论它时,没有内存泄漏。

标签: jquery memory-leaks dom-manipulation


【解决方案1】:

试试这个:

function updateTable(){
    $.get('table.jsp', function(data){
        var dt = $(data).find('#dataTable').html()
        $('#dataTableContainer').html(dt);
        setTimeout(updateTable, 1000);
    });
}

html jQuery method 接收字符串或函数,而不是像您正在做的查询对象。 html方法替换内容,所以不需要使用empty方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2015-10-08
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多