我发现 HTML5 画布有一个奇怪的现象。我的帧速率低于预期,但仅在 Firefox 中,并且仅在一台计算机上(但不是在我测试的另一台计算机上)。奇怪的是,如果我将画布尺寸减小到 255x250 或更小,Firefox 的性能与其他浏览器相似。如果我在宽度上再增加一个像素,FPS 会迅速下降到三分之一。
我制作了一个 jsPerf 来演示这个问题: http: //jsperf.com/critical-canvas-size (确保灰色矩形在屏幕上。如果没有,我让测试失败,因为我发现它改变了结果如果您不小心滚动离开。)
所有四个测试用例都与大多数系统上的大多数浏览器非常相似,但在这台装有 Firefox 17 的 PC 上,我看到以下内容:
有问题的 PC 运行的是较旧的 Red Hat Linux,我猜它可能没有硬件加速支持(从操作系统方面)。
那么,这可能是什么原因呢?我可以在我的代码中做些什么来规避这个问题吗?(例如,我一直在考虑使用几张小画布而不是一张大画布。)
编辑:这是一个独立的 html 文件,它存在问题,而一个不存在。唯一的区别是画布的宽度,251 vs. 250。(你可以注释掉微调器动画,这只是为了让问题可见。另外请原谅FPS计时器的准确性,它的实现很简单。)
250px 版本获得大约 60 FPS,实际上它似乎被封顶了。您可以增加numIterations
变量以使框架函数绘制多个图块。我可以达到 numIterations = 100 或 120000 块/秒,同时仍然具有不错的帧速率。然而,即使 numIterations = 1,251px 版本也给了我低于 20 或低于 1000 块/秒的帧速率。