HTML5 Canvas:更好地重新绘制对象或使用位图?

tra*_*boy 25 javascript html5 canvas html5-canvas

我的项目有一个HTML5 Canvas,在其上重复绘制图形对象.这些物体迅速变化.绘制它们需要时间.我怎样才能让它更快?

对象不是太复杂,但包含弧形,渐变,多边形等内容.

对象的外观取决于大约10个属性,每个属性具有大约10个值中的一个.这意味着只有大约100种不同的外观而不是对象可以拥有的外观.这就是为什么我只考虑绘制每个外观一次然后缓存位图以便重复使用.

一切都必须在客户端工作(即我不能使用现成的图像)

  1. 使用HTML5 Canvas的最佳方法是什么?
  2. 它是一个好主意还是使用位图的开销大于每次重新绘制对象的开销?

Lok*_*tar 27

缓存缓存缓存!看看Simon Sarris撰写的这篇文章以及我自己的发现.基本上你在内存中制作一个画布复制那里的内容,你可以重复使用它们.你会看到这样做会带来巨大的性能提升.

没有缓存的旋转精灵

旋转精灵与缓存(向上走,找到僵尸)

在第二个例子中你应该看到一个相当大的改进.

编辑

jsfiddle示例缓存

jsfiddle示例未缓存

Simon在评论中发布了这一点,如果你只是通过观看演示就无法看到性能提升,那么这应该可以解决问题.

Simon Sarris的JSperf调查结果

  • 此外,本文非常适合有关画布性能的提示:http://www.html5rocks.com/en/tutorials/canvas/performance/ (2认同)