小游戏性能优化分享

大家好,我是来自【欢乐互娱】的欢乐小学生,现在让我来分享一些做h5游戏的性能优化小技巧:

一:大量使用对象池,对象池可动态缩容
顾名思义,及是有可用对象池的地方都使用对象池,当对象池达到一定的size后即在闲时触发动态缩容,将对象池中不被使用的对象销毁,降低内存大小

二:智能学习的资源卸载策略
一般游戏设计资源卸载的时候都是在游戏固定时间后卸载资源。这会照成几个问题
1:无法通过用户行为区分高频资源
2:同时卸载的资源太多可能会造成卡顿
这里我们的设计时会标记每个资源的使用时长和次数,用特定的公式将资源的使用时常,次数和资源的回收周期挂钩

三:在特定的时候做耗能操作
如转场,切换战斗场景,切后后台等时候触发资源清理等操作,这样可以避免在游戏过程,如战斗场景中做高耗能操作

四:弹窗背景使用截图
即在打开任何界面的时候隐藏后面的所有界面(或者可以将后面层级的背景透明度设置为零),如果打开的界面是弹窗,则在打开弹窗的时候截屏,然后弹窗的背景使用截取的图片

五:列表重排序
顾名思义则是修改cocos底层的源码,对重复列表的渲染顺序进行调整,从而将渲染顺序从1234,1234变成11223344,实测对列表的drawcall优化很明显,并且可不止能用在列表里

六:虚拟循环列表的使用
当一个列表创建大量item时,则使用循环列表的思路,只创建可视区域内的列表,当列表滚动时则对item进行复用,这样即使列表的数据很多很多,也不会卡顿

七:分帧处理高耗能函数
如之前的资源卸载就是在分帧的情况下进行的,当然还有资源加载创建的时候,如列表的item

八,配置表压缩+资源合并
将配置表全部合并,并使用序列化去压缩配置表,删除key,然后再游戏打开的时候在一一解析。这样可以减少很多io操作,下载速度明显加快,并且配置表文件大小明显减小,其它资源也可以使用合并压缩的方式进行下载解压

九:代码极限压缩
1:游戏里的单词,排除引擎关键字,字符串,系统关键字则进行全量混淆
2:字符串可以全部提取出来,然后保存到数组里面,用数组替换原有的字符串,达到字符串去重
3:对于protobuf协议的压缩,则在客户端将上行vo的decode函数,下行vo的encode函数剔除
4:对于ui定义文件,则使用字典获取所有子节点,动态存在字典里面,再生成一个虚拟的ui定义的.d.ts文件用于实际开发

十:对手机进行性能分级
1:在打包的时候为不同分级策略的手机准备不同的资源
2:为游戏提供性能设置选项,不同性能的机型默认使用不同的设置
3:设置中包含减少富文本,特效,飘字,动效的使用等等,低性能手机应适当减配

十一:封装setstorage函数
1:每次get和set都在内存中缓存,优先读取内存中的数据
2:对可以检测玩家切后台,退出游戏操作的机型,则缓存本地数据在切后台,退游戏时候进行
3:对不可获取的平台,则在数据发生改变时写入本地缓存

十二:使用音频队列或者循环播放的方式优化音频造成的卡顿
在微信小游戏里,频繁的 play 音效,会造成一定卡顿。比如当子弹撞击到敌人的时候,或者金币拾起的时候。
这个时候可以将短时间重复播放的音效合成一个,来循环播放,或者直接单音循环播放也可以起到优化的效果。在碰撞或者动画结束的时候,暂停(pause)音效播放即可,下次只要resume 就好。或者可以设置在几秒之内重复收到同样的音效不执行。
总之就是避免频繁的 执行 play。参考【https://forum.cocos.org/t/topic/94747】

当然还有很多优化技巧和这里的一些实现细节我就不一一赘述了,这里只分享几个我觉得比较巧妙有趣的,有兴趣的可以关注【数字媒体与游戏开发】公众号,后续我会补充很多开发,优化方案和实现细节, 我们可以深入交流(PS本文持续更新,欢迎插眼)(PS如果有其它有趣的优化技巧,也欢迎补充)

7赞

cocos需要100个楼主这样的人!
但第四点, 弹窗背景使用截图,则不是很恰当,频繁的隐藏其他所有界面是一种高消耗的操作,截图也是一种高消耗的操作

Mark!

对,也可以将透明度设置为零

截图不占内存???

这部分主要是优化drawcal,占内存的话及时清理就好了

十. 安卓版本小于9 直接不给玩

这不太好吧。可以对手机进行性能分级,对部分表现进行取舍

隐藏其他界面为什么高消耗

因为cocos会在设置active的时候做很多操作,如定时器,事件冒泡的处理等等

谢谢 整理和分享 有些思路还是值得一试的

一起学习,共勉 :wink:

讨论优化当然是希望过多低端手机的用户都能流畅的体验游戏,而不是从盈利的目的出发的

自顶,希望更多人看到 :kissing_heart:

不好意思,请问下列表重排序会出现透明度渲染问题吗?

理论上会,我还没处理这个问题,因为我们这边暂时没有这方面的需求

mark.

可以,截屏感觉很巧妙

是的,很多手游都用了这种优化技巧。也欢迎大佬补充自己的优化技巧,我们好一起学习交流

点赞。。。。