我正在开发一个仪表板项目,需要每隔5秒左右通过AJAX源更新多个小部件(如十几个)。我目前正在使用setTimeout
对小部件更新进行排队,每次小部件实际更新时都会调用该小部件更新(技术上不是递归,而是......)。这就是代码的外观
var update;
(update = function() {
$.get(source, function() {
// Do something
setTimeout(update, 5000);
});
})();
在页面运行几个小时后(Chromium 21),它可以轻松地OOM我的8GB RAM。 由于客户端在非常小的配置(<1GB RAM)上使用IE6,因此问题更为重要。
我怎么能避免这个怪癖?
答案 0 :(得分:1)
好的,谢谢你的怪异&amp;尖尖,泄漏确实是由jqPlot引起的。事实是,你必须在所述情节上使用.destroy()
方法,然后删除(而不是清空)其DOM容器,然后再创建另一个并重新绘制图。
答案 1 :(得分:0)
请改用setInterval。这样你只需要生成一个计时器而不需要每五秒钟启动一个计时器,这可能会在浏览器中消耗某种句柄。
我实际上不会想到setTimeout泄漏,但是有一个clearTimeout函数。仅出于研究目的,您可以尝试保存setTimeout的返回值并清除它,然后再开始下一个。