我有一张图片,用JavaScript将其在网页上移动,代码如下:
satelliteImage.style.top = coordinates.top + "px";
satelliteImage.style.left = coordinates.left + "px";
很遗憾,除了Chrome浏览器外,所有其他浏览器的性能都非常糟糕。瓶颈在于渲染速度。我对IE没有希望,但至少我想改进Firefox的性能。有人有HTML5 Canvas在移动图像时的性能经验吗?与样式更改相比如何?
我有一张图片,用JavaScript将其在网页上移动,代码如下:
satelliteImage.style.top = coordinates.top + "px";
satelliteImage.style.left = coordinates.left + "px";
很遗憾,除了Chrome浏览器外,所有其他浏览器的性能都非常糟糕。瓶颈在于渲染速度。我对IE没有希望,但至少我想改进Firefox的性能。有人有HTML5 Canvas在移动图像时的性能经验吗?与样式更改相比如何?
我创建了等效的测试来比较通过CSS移动图像与在HTML画布上绘制它之间的帧速率。以下是测试:
这里是FPS结果 (有关测试详细信息请参见URL):
图形 图形 精灵 精灵 浏览器 画布 CSS 画布 CSS ---------------------------------------------- Safari v5.0.3 59 95 59 89 Firefox v3.6.13 59 95 60 90 Firefox v4.0b8 75 89 78 82 Chrome v8.0 108 230 120 204 iPad, 横屏 17 44 2 14 iPad, 竖屏 4 75 2 15
正如你所看到的:
编辑: 添加了移动20个小动画精灵在背景上的测试。结论仍然相同。
现在已经过去两年多了,我决定运行这些测试来查看这是否仍然成立。有时候是对的...有时候不是。
Firefox桌面版和移动版都比canvas更快地运行CSS动画。
Chrome桌面版在canvas和CSS动画方面表现大致相同。
Chrome移动版(Nexus 7上)完全相反:canvas比CSS更快!
(使用分辨率为1920x1080的Linux桌面浏览器上的Firefox Android以及Nexus 7)
浏览器/操作系统 Canvas图片 CSS图片 Canvas Sprites CSS Sprites ----------- ------------ ---------- -------------- ----------- Firefox 16 56.7fps 215.6 fps 59.2fps 203.6fps Firefox 16 Android 17.1 fps 179.6fps 11.5fps 35.7 Chrome 22 192.3fps 223.5fps 170.1fps 164.3fps Chrome Android 48.3fps 39.9fps 92.8fps 13.1fps
其他人的结果如何?有人能测试IE9、10吗?
我想更新一下这个关于第三代iPad的旧问题,并分享我的研究结果:
在精灵动画方面,使用Canvas可以获得平均约120fps的背景清除切换。而CSS则只能勉强达到60fps。
至于单张图片,CSS显然更快一些。
根据我的经验,在使用Canvas时,你应该能在Firefox上获得良好的50帧每秒甚至在iOS上获得良好的15帧每秒。IE9可能是最快的浏览器,其他版本并没有真正实现Canvas。
drawImage()
再次绘制它。我强烈怀疑这样做的性能会比在 DOM 上移动图像要差得多。 - Phrogz关于MyNameIsKo在iPad 3性能方面的发现,我想知道是否与CSS DOM方法需要在iPad 3的视网膜屏幕上绘制有关,而画布则会以较低分辨率绘制,然后blt到屏幕上。相比之下,iPad 1在CSS更新方面要快得多!
我还对画布JavaScript进行了一些更改,以便能够绘制到视网膜分辨率画布上。在bg.onload函数中的canv.height = h;之后,我添加了以下代码:
if (window.devicePixelRatio) {
ctx.canvas.style.width = w + "px";
ctx.canvas.style.height = h + "px";
ctx.canvas.height = h * window.devicePixelRatio;
ctx.canvas.width = w * window.devicePixelRatio;
ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
}
这导致了巨大的性能下降...
iPad 1(iOS 5.5.1)
iPad 3(iOS 6.1.3)
CSS Sprite Canvas Sprites
-----------------------------------------------------
iPad 1 90 100
iPad 3 55 120
iPad 1(canvas changes) n/a 100
iPad 3(canvas changes) n/a 35