0

我正在开发一个仪表板项目,其中需要每 5 秒左右通过 AJAX 源更新多个小部件(如十几个)。我目前正在使用setTimeout排队小部件更新,每次实际更新小部件时都会调用它(从技术上讲不是递归,但是......)。这就是代码的样子

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

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

我怎样才能避免这种怪癖?

4

2 回答 2

1

好的,感谢freakish & Pointy,泄漏确实是由jqPlot 引起的。问题是,您必须.destroy()在所述图上使用该方法,然后删除(而不是清空)其 DOM 容器,然后再创建另一个并重新绘制图。

于 2012-09-18T09:39:16.693 回答
0

请改用 setInterval。这样,您只需生成一个计时器,而无需每五秒启动一个新计时器,这可能会消耗浏览器中的某种句柄。

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

于 2012-09-17T13:05:56.250 回答