【问题标题】:jQuery 3.1.1 memory leak on appendTo and emptyappendTo 和 empty 上的 jQuery 3.1.1 内存泄漏
【发布时间】:2017-04-27 08:26:18
【问题描述】:

我在我的代码中发现了一个类似于下一个 sn-p 的内存泄漏

function random() {
  return Math.floor(Math.random() * 1000);
}

var _target = $('#target');
function add() {
    _target.empty();
    for (var i = 0; i < 100; i++) {
        _target.append('<tr><td>'+random()+'</td><td>'+random()+'</td><td>'+random()+'</td></tr>')
    }
}

var addInt = setInterval(add, 500);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Memory leak test: jquery</title>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<table id="target"></table>

</body>
</html>

由 innerHTML 编写的相同代码不会导致内存泄漏。 Chrome 57.0.2987.133(64 位)中包含此代码的选项卡已从 37 Mb 增长到 161 Mb。 如果我们在代码中使用这些方法中的任何一种,就会出现问题:

  • .html();

  • .append();

  • .appendTo();

  • .prependTo();

  • .prepend();

我不确定 .remove() 和 .empty(); 我找不到这个问题的解决方案。 我发现的所有帖子都太旧了。 这是我的测试结果:

【问题讨论】:

  • 你想达到什么目的?
  • 有趣。它不会在 Opera 44.0.2510.1449 (PGO) 或 Firefox 53.0 (32-bit) 上导致泄漏,但我自己在 Chrome 57.0.2987.133 上确认了泄漏
  • @ryad 当我通过 websocket 收到带有新数据的新消息时,我的目标是重新渲染所有表。
  • Chrome 版本 58.0.3029.81(最新更新)上仍会出现这种情况
  • @webbm 你用什么操作系统?

标签: javascript jquery memory-leaks


【解决方案1】:

我在 Chrome 57 中有这个内存泄漏,但在 58 中一切都很好!

  • 操作系统:Linux mint 17 x64
  • Chrome:58.0.3029.81(64 位)

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多