13

试图在 a 上管理 10.000 个简单形状<canvas>,我尝试使用缓存来替代重绘。令我惊讶的是:

  • 使用ImageDataandcanvas.{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 大,也会发生错误,因此它不应该与大小有关。

任何想法?如果没有立竿见影的想法,我将简化发布代码。谢谢,诺比

4

2 回答 2

11

在我的例子中,我看到了这个错误,因为画布区域为零:如果宽度 * 高度 = 0,那么这样的画布在 drawImage 期间会出现这个错误。

于 2015-05-16T19:00:15.807 回答
4

Ken 是完全正确的——尽管我在矩形仍应为 6x3 时看到了错误,但当我将矩形设置为 (1,1) 而不是 (0,0) 时,该错误不再出现。

于 2013-09-20T07:53:45.313 回答