2017-04-27 30 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