开发Canvas 2D游戏时,手机与PC间‘Image Decode’性能差异原因?
图像格式与硬件解码适配问题
PC端的CPU/GPU对PNG、JPG这类常见格式的解码有成熟的硬件加速支持,处理起来极快。但三星S21 FE的手机芯片或Chrome浏览器,可能对游戏里用的某些图像格式(比如特定参数的WebP、未优化的PNG)硬件解码支持不足,只能靠软件解码,效率大幅降低,导致解码耗时占比飙升。图像尺寸冗余导致的内存瓶颈
PC的内存带宽和显存容量远高于手机,就算加载大尺寸图像,解码后的像素数据处理也没压力。但手机内存带宽有限,如果游戏里用的图像尺寸远大于Canvas实际渲染的尺寸,解码时要处理大量冗余像素,再加上手机CPU/GPU的内存读写速度限制,直接把Image Decode的耗时拉满。解码时机不合理,帧内同步解码
如果游戏没提前预加载并解码图像,而是每次调用drawImage时才让浏览器触发解码,PC端解码快没影响,但手机端解码慢,每帧都会卡在解码步骤。浏览器的drawImage在图像未解码完成时,会同步执行解码操作,这在手机上就是直接的性能阻塞点。系统功耗限制与线程调度差异
手机端Chrome会受系统功耗策略限制,高负载时会自动降频,进一步拖慢解码速度。另外,手机端Chrome的图像解码线程调度和PC端不同,可能没充分利用多核优势,导致解码任务单线程跑,效率上不去。图像编码优化不足
如果游戏里的图像是高复杂度编码的(比如未做压缩优化的无损PNG、压缩等级过高导致解码计算量暴增的JPG),PC端CPU性能强能轻松应对,但手机端CPU单线程性能不如PC,解码耗时就被放大了好几倍。
内容的提问来源于stack exchange,提问作者guy1997

