【发布时间】:2012-06-05 08:54:45
【问题描述】:
我有以下脚本(我也使用 raphaeljs)绘制一个圆圈,等待 1 秒,再次绘制圆圈等(您可以复制粘贴它 - 是功能性的,只需要包含来自 raphaeljs.com 的 raphael):
<div id="holder">
</div>
<script src="raphael.js" type="text/javascript"></script>
<script>
var paper = Raphael(10, 50, 320, 200);
var rad = Math.PI / 180;
var finAngle = 0;
function sector(cx, cy, r, startAngle, endAngle, params) {
var x1 = cx + r * Math.cos(-startAngle * rad),
x2 = cx + r * Math.cos(-endAngle * rad),
y1 = cy + r * Math.sin(-startAngle * rad),
y2 = cy + r * Math.sin(-endAngle * rad);
return ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2];
}
var path = sector(100,100,50,0,180);
var arc = paper.path(path);
function draw()
{
path = sector(100,100,50,0,finAngle);
arc.attr({"path": path});
finAngle += 1;
/*
if (finAngle == 360)
finAngle = 359;
*/
if (finAngle > 360)
{
clearInterval(interval);
setTimeout("setNewInterval();", 1000);
finAngle = 1;
}
return;
}
function setNewInterval()
{
interval = setInterval("draw();", 3);
}
var interval = setInterval("draw();", 3);
</script>
问题是它似乎在 firefox 上产生了内存泄漏(我让它运行了 10 分钟,firfox 达到了 700MB 的内存(chrome 保持在 25MB))。 Chrome 没有任何问题。
有什么想法可以解决这个问题吗?
【问题讨论】:
-
考虑提交 Firefox 错误报告
-
确实...但这并不能真正解决我的问题:)。我正在寻找修改脚本,但是......我真的不知道怎么做,因为我在那里看不到任何问题。
-
Firefox 的哪个版本?您是否尝试过使用 Firefox Nightly?你有同样的问题吗?您还可以使用
about:memory更好地跟踪发生这种内存增量的位置,并尝试强制 GC 并最大限度地减少内存的使用。即使它可能不相关,我建议您将函数 ref 传递给setInterval/setTimeout,而不是字符串,例如:setInterval(draw, 3)。还要考虑到有可能是浏览器错误或库错误,因此您的代码不能做太多事情。 -
火狐12.0。只有在这里我有问题。作为参考传递,同样的问题。
标签: javascript firefox browser memory-leaks raphael