我正在尝试提高画布上的性能,因为每个stage.update()
都会重新绘制所有(多个区域),这就是它的工作原理。我想绘制/添加一个区域。我可以让它工作,但由于update
,所有以前的区域都被移除了。我发现缓存可能会提高性能,但实际上会降低渲染速度。
示例代码:
self.areaMask = new createjs.Shape();
self.areaMask.graphics.beginFill("#000").drawRect(0, 0, 50, 50);
self.areaMask.cache(0, 0, 50, 50);
奇怪的是,在我启用此缓存的那一刻,它实际上使渲染变慢。只有当我将可选的第四个scale
参数减少到0.1
时,性能才会稍微好一些。
我想了解这是怎么可能的,我可能做错了什么?
还有另一种更好的方法来获得理想的行为吗? (仅绘制/添加指定区域,不要重绘所有区域)
答案 0 :(得分:1)
缓存将改善大多数浏览器的功能,提供:
浏览器可以将内容放在GPU上。如果不能,那么CPU用于绘制图像,这可能会更慢。大多数情况下大多数浏览器都可以正常工作,但有时您会看到相反的效果。例如,EaselJS cache demo有时在Safari中表现更差,尽管在其他地方工作得更好。您正在测试哪些浏览器/设备?
缓存是正确的。如果你分别缓存大量的小东西,那么你在后台创建了很多小图像。更好的方法是在这些情况下使用像SpriteSheetBuilder这样的东西,因为减少纹理数量可以提高GPU发挥出色的机会。
您的缓存只执行一次,而不是很多。如果你每帧都缓存一些东西(比如勾选),那么缓存就不会有效。这是因为它必须将每个帧的矢量/组内容绘制到离屏画布中,然后将该画布绘制到主舞台。这比绘制矢量更有用。
目前,EaselJS尚未支持绘制舞台的特定区域。有一些技术可以更新屏幕外缓存,并将其绘制到舞台上 - 但就是这样。
我很想看到你的代码在行动,并且可能能够告诉你它为什么不起作用。