我有这幅画布动画,它表现出一些奇怪的特征:
http://jsbin.com/olasol/2/edit
我使用的是最新版本的 Chrome。我正在使用 Chrome 的内置 FPS 监视器(您可以通过转到 来激活它about:flags
)。我在 JavaScript 部分中标记了我认为是潜在罪魁祸首的行:
fallingctx.clear();
这条线没有什么特别的。它调用一个函数,该函数又调用clearRect()
.
我注意到的“奇怪”的事情是:
该
clear();
功能在我的笔记本电脑(Core 2 Duo)上导致非常明显的 FPS 下降,但在我的台式机(i5 2500k)上没有。仅删除那条线就足以在我的笔记本电脑上产生 60fps 的速度。正如预期的那样,画布在每一帧后都不会清晰,但仍然可以产生稳定的 60fps。
仅当我的 Chrome 窗口位于较大的一侧时,才会发生 FPS 下降!当我缩小窗口并重新加载时,它不会发生!(清除更大的矩形是否更昂贵?)。
我尝试用全白 JPEG 替换
clear()
以drawImage()
覆盖画布。JavaScript 能够drawImage()
为较小的图像粒子在每个循环中执行 200 次(从第二点可以看出)。drawImage
但是,当我为整个画布添加一个单曲时,它又滞后了!(确保输出占据整个屏幕以重现结果。)
为什么会发生这一切?我如何解决它?