cpu优化主要是优化cpu使用率,帧率平稳性(卡帧,长耗时任务),主要从以下几个方面优化
- 设置合适的帧率。根据游戏类型设置合适的帧率,比如slg,回合制这种类型游戏一般开30帧,mmo等即时战斗的或者对流畅度有很高要求的可以开60帧。
- 帧同步与状态同步的抉择。一般来说状态同步会比帧同步的前后端消息量大,也就说消息同步压力更大。但是状态同步前端实现起来比较简单,只用根据对应消息更新状态即可。
- 分帧处理。对复杂逻辑进行分帧处理,比如后端返回的大量消息,存入消息队列中分帧处理,避免在同一帧处理大量的消息。
- 将长任务利用setTimeout等api划分成多个短任务(八股文叫做微任务与宏任务),其实也算是另类分帧吧。
- 使用对象池管理需要频繁创建和销毁的对象。
- 在能使用worker的平台上,将耗时的任务放在worker中执行,比如zlib解压缩,图片解码等。
- 在不能使用纹理压缩的平台上,png和jpg等原始图片的解码是很占用cpu的,可以使用二进制的方式加载图片,然后使用png和jpg解码库在worker中解码图像,或者使用createImageBitmap(非所有平台支持)。
- 微信小游戏的ios平台,因为不支持jit导致js代码执行效率底下,cpu使用率会持续高位,如果内存优化到位的话,可以开启高性能模式。
- JS代码混淆。注意这里不是minify等压缩工具,而是像js-deobfuscator这种加密混淆工具,混淆程度严重影响js代码执行效率,混淆之后代码会变大,所以如果不是发行方要求尽量不混淆,如果非要混淆设置合适的混淆策略。
- Spine和龙骨动画的使用。这种动画在场景上一旦多起来了就很卡,即使spine的骨骼、顶点、网格、图集都优化的很好,也顶不住数量多了之后就会卡(很多用Spine或者龙骨作为角色模型和技能动画的都有类似问题,后面会单开一起讲讲Spine能优化的点)。
对于h5游戏,分析cpu相关性能指标我们一般用Chrome开发者工具的Performance,抓取一段时间内的游戏运行状态进行分析。
通过帧率的波形图,重点关注波峰位置,Task时间线的红色任务或者任务右上角带红色角标的任务,点击之后在下面的CallTree页签查看函数执行堆栈,找到函数执行中耗时的地方进行优化。