最近给公司的二合项目做优化,记录下工作类容,以免忘记!
项目技术栈采用:
- cocoscreator3.4.2
- fairygui
- spine
- tilemap
- go-xlsx-exporter(配置表工具导出protobuf文件与数据)
项目优化效果:
- 内存减少200-400m
- fps由40±>60
- 发热现象减少
- 各个页面dc减少50-100左右
- 首次加载时间10s内,二次加载速度3-5秒左右
以下是大纲:
-
发现热点
-
Chrome 分析工具
1. Spector 分析drawcall
2. Preformance 分析函数热点
3. Memory 分析内存热点
-
PrefDog
-
运行性能
-
CPU
1. 对象池
1. 减少重复创建时间
2. 减少gc
3. 但增加了内存大小
2. UI
1. 多纹理合批
2. 分层渲染合批
3. 分帧计算
3. Spine
1. Share cache
2. 大量使用的spine,尽量少用混合,特别是交替不同的混合模式
3. 不使用或少使用spine的clip
4. TileMap
1. 开启地图裁剪
2. 多层tilelayer共享裁剪
3. 多纹理合批
4. tmx地图优化,删除或者替换活动点位的资源
5. tm动态加载,减少prefab带来的数据变大的问题
5. 脏标记模式
- 内存
1. 纹理压缩
1. gpu纹理压缩
2. png图片压缩
3. 如果开启了gpu纹理压缩,单压缩png是没有效果的,需要减少图片分辨率
2. 内存释放
1. 配置表的原始数据删除
2. 非常用窗口、场景关闭后删除相关资源
-
加载速度
-
包体
1. 引擎分离
2. 代码子包
-
分包策略
-
bundle包采用zip减少加载数量
1. 采用了多个纹理压缩格式时,需要对zip做分包处理(需要修改相关资源加载代码)
-
类似活动或者单独使用的散图直接通过地址加载,或者非zip模式的包
-
加载策略
1. 重要性加载
2. 新用户加载
3. 玩家相关性加载
4. 增量加载(由于项目cdn地址与版本号关联,造成不同版本相同hash资源重复下载,因此修改了缓存key保证命中率)