主要分为 Lua配置表内存优化,图集,预制体耦合,shader内存优化,EmojText原理
一:Lua配置表内存优化
为什么要优化Lua配置表:随着版本迭代,功能越来越多,配置也随着水涨船高,根据分析,一大半的Lua内存是配置表贡献的。配置表是常量,也无法被GC
优化:根据观察,大量配置数据都是相同,所以可以把出现次数最多的值,抽离出来当做众数,来作为deafaultconfig. 即使不同的我们可以通过找规律比如和来作为标准再作为另一个deafaultconfig。通过优化配置。lua内存大大缩减
二:图集
同一个canvas下的图资源全部需打包同一个图集里,否则图集穿插会造成DrawCall成倍增加
三:预制体耦合
同一个系统下会打包只同一个bundle,如果有其他系统预制体依赖,会照成bundle变大,内存增高
四:shader内存优化
超级shader设计
shader包含全部效果的实现,每一个keyword表示一种效果的开关,方便美术制作不同的效果
引入if else分支 multi_compile与shader_feature
打包时过滤keyword按需进包,避免冗余
五:EmojText原理
原因:为了在文字中插入表情,希望带有点击功能
早期方案text+image+button但是使用复杂,文字和图片不能合批,容易卡顿
EmojText优点 和富文本格式一致门槛低
只有一个drawcall,由ugui排版,不需要额外手动计算
缺点:表情数量有上限最多支持1张2048,图集常驻内存,所有宽高必须一直且是2的次幂