为什么我的页面使用jQuery的replaceWith泄漏内存?

时间:2017-05-03 00:19:05

标签: javascript jquery memory-leaks

我不会做很多JavaScript,所以我担心这可能是一个非常愚蠢的问题,但是我一直在谷歌上搜索很多,而我一直在寻找。我发现有很多关于使用jQuery的内存泄漏,似乎没有什么能与我的情况相符。

基本上,我有一个页面,我不断用新下载的内容替换内容。为此,我使用jQuery' helper函数,将下载的HTML片段作为字符串传递。整个页面有点复杂,需要一些时间来泄漏大量内存,但我已经通过这个简单的HTML片段重现了内存泄漏:

replaceWith

在Chromium中查看此页面似乎不断吃掉越来越多的内存,而我似乎无法弄清楚原因。 <html> <head> <title>Test</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script type="text/javascript"> var sequence = 1; function update() { $("#test").empty().replaceWith('<p id="test">Test ' + sequence++ + '</p>').remove(); setTimeout(update, 1); } $(document).ready(update); </script> </head> <body> <p id="test">Test</p> </body> </html> 行上的.empty().remove()调用原本并不存在,但我把它们扔进去,因为它们通常被建议作为DOM替换内存泄漏的修复程序。然而,似乎没有效果。

1 个答案:

答案 0 :(得分:0)

我很确定你的内存泄漏与setTimeout(...)函数的递归特性有关。

请改为尝试:

var sequence = 1;
function update() {
      $("#test").empty().replaceWith('<p id="test">Test ' + sequence++ + '</p>').remove();
      var timer = setTimeout(function() {
        clearTimeout(timer);
        update();
      }, 1);
  }
$(document).ready(update);