HTML画布会在每次描边/填充调用后记住像素的最终状态.它从不重绘自己. (Web浏览器可能需要将最终图像的某些部分重新显示到屏幕上,例如,如果另一个HTML对象在画布上移动然后再移开,但这与重新发出绘图命令不同.
上下文始终记住其当前状态,包括您累积的任何路径.您可能(意外)没有清除“刷新”之间的路径,在第一帧上绘制一条线,在第二帧上绘制两条线,在第三帧上绘制三条线,等等. (你在调用ctx.closePath()和ctx.beginPath()吗?你在图纸之间清理画布了吗?)
这是an example,表明画布不会重绘自己.即使在成千上万行中,我也看到了与数百行相同的帧速率(Chrome上限为200fps,Firefox 8.0上为240fps,每帧绘制10行).
var lastFrame = new Date, avgFrameMS=5, lines=0;
function drawLine(){
ctx.beginPath();
ctx.moveTo(Math.random()*w,Math.random()*h);
ctx.lineTo(Math.random()*w,Math.random()*h);
ctx.closePath();
ctx.stroke();
var now = new Date;
var frameTime = now - lastFrame;
avgFrameMS += (frameTime-avgFrameMS)/20;
lastFrame = now;
setTimeout(drawLine,1);
lines++;
}
drawLine();
// Show the stats infrequently
setInterval(function(){
fps.innerHTML = (1000/avgFrameMS).toFixed(1);
l.innerHTML = lines;
},1000);
有关您的代码实际执行的内容与您怀疑它正在执行的操作的更多反馈,请与我们分享您的测试用例.