Canvas 尺寸对性能有影响吗?

Does Canvas Size Matter for Performance?

在构建小游戏时,出现了一个关于 Canvas API 的一般性能相关问题:我正在清理和绘制一个大 [=] 的小 space 15=]。在这种情况下,canvas 的大尺寸是否会降低性能,或者仅绘制像素的数量很重要?例如。是整个 canvas 在发生变化时重绘吗?

根据一般经验,性能受您正在绘制的图像的分辨率和 canvas 的大小影响。但是大多数设备都有处理绘图的硬件,并且可以轻松地刷新他们使用的显示,并有足够的时间来获得额外的亮点。

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

了解设备的内存容量

所以简而言之,重要的不是您绘制的像素数量,而是您绘制的独特 pixels/images 的数量。效果可能非常显着,仅在 GPU 容量上增加 1K 的额外像素就可以将帧速率提高一半以上,即使您实际上可能总共绘制了更少的像素。

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

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

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