【发布时间】:2013-09-24 17:44:57
【问题描述】:
为了在<canvas> 上管理 10.000 个简单形状,我尝试使用缓存来替代重绘。令我惊讶的是:
- 使用
ImageData和canvas.{get|put}Image似乎非常慢。 - 使用
canvas.createPattern缓存模式几乎与重绘一样快。 - 为每个形状缓存整个画布比重新绘制还要快。
但是,由于某些原因,一些画布在缓存期间会中断。在一些查找之后,以不规则的时间间隔(每 2-5 次缓存查找)检索一个画布,这会导致
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable
被抛出。我使用相同的代码来缓存不同的对象,所以我认为问题不在于缓存,而在于canvas 对象的数量。
也许有趣的是,我将形状设置为 (0,0),将它们的大小也减小到零。例如,即使矩形为 6x3px 大,也会发生错误,因此它不应该与大小有关。
有什么想法吗?如果没有立竿见影的想法,我将简化发布代码。谢谢,诺比
【问题讨论】:
-
这可能会给你一些输入:lists.w3.org/Archives/Public/public-whatwg-archive/2013Mar/… 为了让我们能够查明错误,你应该提供一个“工作”示例作为小提琴。
-
@Ken-AbdiasSoftware 感谢您提供链接!完美命中!
标签: javascript html performance caching canvas