2

在构建一个小游戏时,出现了一个关于 Canvas API 的一般性能相关问题:我只在大画布的一小块空间上清理和绘图。在这种情况下,画布的大尺寸会降低性能还是仅绘制像素的数量很重要?例如,当某些事情发生变化时,是否会重新绘制整个画布?

4

1 回答 1

3

作为一般经验法则,性能受您绘制的图像的分辨率和画布大小的影响。但是大多数设备都有硬件来处理绘图,并且可以轻松地刷新他们使用的显示,并有足够的时间来获得额外的闪光。

最大的瓶颈是图形硬件和设备主内存之间的接口。如果您的所有图形都可以放入设备的 GPU 内存中,那么您将不会遇到任何真正的性能问题。但是,如果您开始绘制的图像超出了图形内存的容量,您将看到随着设备将数据移入和移出图形内存,性能会大幅下降。没有简单的方法可以通过 javascript 了解设备的内存容量。

因此,简而言之,重要的不是您绘制的像素数量,而是您绘制的唯一像素/图像的数量。效果可能非常显着,在 GPU 容量上仅添加 1K 的额外像素就可以使帧速率降低一半以上,即使您实际上可能绘制的像素总数可能更少。

减小单个图像的大小有助于系统管理资源。与其将一张大位图换掉,以便为一张小位图腾出空间,不如将更大的位图切割成更小的位图,以便更快地进行转换。

GPU 以 2、4、8、16、32、64、128 等像素块工作,宽度和高度均以 2 的幂次方为单位。使用这些尺寸的图像效率更高。拥有 130*130 像素的图像实际上可能需要 256*256(或 256*196,具体取决于 GPU 的类型)内存中的像素来存储在 GPU 内存上,同时将图像减小到 128*128 将很适合而不是腰部 GPU RAM .

不要引用不使用的模式、字体和 SVG 图像也会占用 GPU 内存中的空间,这与它们的像素大小相关,而不是它们的实际内存占用空间。不要让画布状态准备好绘制大字体。您可能在开始时设置了它,然后不打算再次使用它,但是当该字体在那里准备好绘制时,它正在使用宝贵的 RAM

于 2015-10-19T16:53:03.513 回答