使用jQuery.text()导致内存泄漏

时间:2016-12-05 20:31:57

标签: javascript jquery memory-leaks timer

我正在创建一个单页应用程序,该应用程序将在浏览器中保持活动状态并一次打开多天。在这个页面上,我在右上角显示一个计时器。但我发现,我使用计时器的方式是泄漏了少量内存。

https://jsfiddle.net/zbgonp84/

$(function(){
    timer();
});
function timer(){
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    $("#timer").text(h + ":" + m + ":" + s);
    var t = setTimeout(timer, 1000);
}

function checkTime(i) {
    if (i < 10){
        i = "0" + i;
    }
    return i;
}

我在小提琴中重新创建了计时器和计时器的div。如果您打开chrome的开发工具并记录时间线,您可以看到新节点每秒都会添加到内存中。如果放置24小时,它将在一整天内每秒添加一个新节点,永远不会被收集。

我觉得好像我遗漏了一些相当明显的东西,为什么这不是垃圾收集,但我错过了什么来分配内存?

1 个答案:

答案 0 :(得分:1)

创建并替换对#timer元素的引用,以便在每次调用jQuery()时调用timer。另外,在t

之外声明变量timer
$(function() {
  const time = $("#timer");
  var t;
  timer();

  function timer() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    time.text(h + ":" + m + ":" + s);
    t = setTimeout(timer, 1000);
  }

  function checkTime(i) {
    if (i < 10){
        i = "0" + i;
    }
    return i;
  }
});