Javascript 许多画布对象会导致;InvalidStateError:试图使用不可用或不再可用的对象";

Javascript 许多画布对象会导致;InvalidStateError:试图使用不可用或不再可用的对象";,javascript,html,performance,caching,canvas,Javascript,Html,Performance,Caching,Canvas,为了在上管理10.000个简单形状,我尝试用缓存代替重绘。令我大吃一惊的是: 使用ImageData和canvas.{get | put}Image似乎非常慢 使用canvas.createPattern缓存模式几乎与重画一样快 为每个形状缓存整个画布比重绘更快 但是,由于某些原因,一些画布在缓存期间会中断。在一些查找之后,以不规则的间隔(每2-5次缓存查找)检索一个画布,该画布会导致 InvalidStateError: An attempt was made to use an obje

为了在
上管理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大,也会发生错误,因此它不应该与大小有关


有什么想法吗?如果没有立即的想法,我将简化发布代码。谢谢,nobi

Ken是完全正确的-虽然我看到了矩形仍应为6x3时的错误,但当我将矩形设置为大小(1,1)而不是(0,0)时,错误不再出现

在我的例子中,我看到这个错误是因为画布面积为零:如果宽度*高度=0,那么这样的画布在drawImage期间会产生这个错误。

这可能会给你一些输入:为了我们能够指出错误,你应该提供一个“工作”示例作为小提琴。@Ken AbdiasSoftware感谢提供链接!完美一击!正是我的问题——零高度。