AJAX回调中的“递归”超时填满了内存。我怎么能避免这个?

时间:2012-09-17 12:58:13

标签: javascript memory-leaks settimeout

我正在开发一个仪表板项目,需要每隔5秒左右通过AJAX源更新多个小部件(如十几个)。我目前正在使用setTimeout对小部件更新进行排队,每次小部件实际更新时都会调用该小部件更新(技术上不是递归,而是......)。这就是代码的外观

var update;
(update = function() {
  $.get(source, function() {
    // Do something
    setTimeout(update, 5000);
  });
})();

在页面运行几个小时后(Chromium 21),它可以轻松地OOM我的8GB RAM。 由于客户端在非常小的配置(<1GB RAM)上使用IE6,因此问题更为重要。

我怎么能避免这个怪癖?

2 个答案:

答案 0 :(得分:1)

好的,谢谢你的怪异&amp;尖尖,泄漏确实是由jqPlot引起的。事实是,你必须在所述情节上使用.destroy()方法,然后删除(而不是清空)其DOM容器,然后再创建另一个并重新绘制图。

答案 1 :(得分:0)

请改用setInterval。这样你只需要生成一个计时器而不需要每五秒钟启动一个计时器,这可能会在浏览器中消耗某种句柄。

我实际上不会想到setTimeout泄漏,但是有一个clearTimeout函数。仅出于研究目的,您可以尝试保存setTimeout的返回值并清除它,然后再开始下一个。