javascript - jQuery 3.1.1 appendTo 和空内存泄漏

标签 javascript jquery memory-leaks

我在我的代码中发现了一个内存泄漏,看起来像下一个片段

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(); 我找不到这个问题的解决方案。 我找到的所有帖子都太旧了。 这是我的测试结果: enter image description here

最佳答案

我在 Chrome 57 中有内存泄漏,但在 58 中一切正常!

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

mem leak test

关于javascript - jQuery 3.1.1 appendTo 和空内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43652477/

相关文章:

Linux 内核内存泄漏目前已修复

Javascript 性能 - 已删除节点上的事件

javascript - 如何通过 JavaScript 知道当前加载页面的 mime 类型或内容类型?

javascript - 创建浏览器退出弹出窗口

javascript - 为数据表中的各个行添加点击事件(JQuery)

jquery - 停止所有子元素的 jQuery 动画

javascript - 将本地函数传递给 setTimeout()

javascript - 在 React 和 Redux 中重新渲染所有组件

javascript - 获取所选元素的 URL

java - 使用 VisualVM 分析内存泄漏