微信小游戏性能优化点

微信小游戏

1. 对象池

多数游戏,频繁创建和销毁同类对象很常见,使用对象池已是基本操作,必须牢记并熟练使用。推荐一个应用示例:

https://github.com/pury/SPTools/tree/master/objectPool

2. 对象复用

类似对象池,但一般不涉及回收,对象使用频率高,要常驻内存。比如通过函数返回某件商品的信息:id、名称、价格等,函数内部每次新创一个信息对象并返回,效率不高,可以在外层创建一个单例,更新其属性即可。

3. 超时回收

游戏中很多对象、资源等并不需要一直存在,但又不确定后面是否会再次使用,比如排行榜界面等,它的显隐由玩家控制。每次打开新创建,关闭即刻销毁或者一直保存在内存,只隐藏visible,皆不合适。

最好方法是给对象附加倒计时器,对象隐藏时开始启动,超出时限后自动销毁,从内存中移除。另外,配合对象池有奇效,每次回收对象时启动倒计时。

4. 合理控制UI更新频率

对于实时更新要求强的游戏,如射击类等,UI上数据信息频繁更新,可以多考虑进行分类,不同事件尽可能针对性刷新UI元素信息,避免不必要的多余更新操作。有些不常变动的单元集合在一起,多数引擎有脏矩形渲染机制,配合使用,性能会有不少提升。

5. 按需加载

顾名思义,用到哪些资源再去加载。刚进入游戏时只需要预加载些通用资源即可。按需加载,最好封装一套合理的资源加载机制,比如创建一个骨骼动画,相关些配置文件、纹理集等,一并自动加载,与游戏中逻辑解耦,便于管理。

6. 主动触发垃圾回收wx.triggerGC

微信官方接口,加快触发 JavaScriptCore 垃圾回收(Garbage Collection)。GC 时机是由 JavaScriptCore 来控制的,并不能保证调用后马上触发 GC。

建议使用时机:

①小游戏切换前后台时,wx.onShow | wx.onHide

②游戏中繁重业务开始或结束时,如挑战任务等

③监听内存报警 wx.onMemoryWarning

By Pury.