2017-04-27 34 views
4

我发现在我的代码中的内存泄漏看起来像下一个片段的jQuery 3.1.1内存泄漏和空

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

+0

你到底想达到什么目的? –

+2

有趣。它不会导致在Opera 44.0.2510.1449(PGO)或Firefox 53.0(32位)上泄漏,但在Chrome上自己确认泄漏57.0.2987.133 – webbm

+0

@ryad我的目标是重新渲染所有表,当我得到一个新的消息与websocket的新数据。 – Ahcael

回答

1

我在Chrome 57中有这个mem泄漏,但是在58中都很好!

  • 操作系统:Linux Mint的17 64
  • 铬:58.0.3029.81(64位)

mem leak test