主要分为 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的次幂