轻松系列之-合成+装修类游戏优化(大纲)

最近给公司的二合项目做优化,记录下工作类容,以免忘记!
项目技术栈采用:

项目优化效果:

  • 内存减少200-400m
  • fps由40±>60
  • 发热现象减少
  • 各个页面dc减少50-100左右
  • 首次加载时间10s内,二次加载速度3-5秒左右

以下是大纲:

  1. 发现热点

  2. Chrome 分析工具

1. Spector 分析drawcall

2. Preformance 分析函数热点

3. Memory 分析内存热点
  1. PrefDog

  2. 运行性能

  3. 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. 纹理压缩

  1. gpu纹理压缩

  2. png图片压缩

  3. 如果开启了gpu纹理压缩,单压缩png是没有效果的,需要减少图片分辨率
2. 内存释放

  1. 配置表的原始数据删除

  2. 非常用窗口、场景关闭后删除相关资源
  1. 加载速度

  2. 包体

1. 引擎分离

2. 代码子包
  1. 分包策略

  2. bundle包采用zip减少加载数量

1. 采用了多个纹理压缩格式时,需要对zip做分包处理(需要修改相关资源加载代码)
  1. 类似活动或者单独使用的散图直接通过地址加载,或者非zip模式的包

  2. 加载策略

1. 重要性加载

2. 新用户加载

3. 玩家相关性加载

4. 增量加载(由于项目cdn地址与版本号关联,造成不同版本相同hash资源重复下载,因此修改了缓存key保证命中率)
19赞

既然有新点赞就继续加内容吧:

  1. UI做到界面与数据分离。
  • 这里的数据指的是各种图标数据,千万别把资源数据与界面数据打包在一起,item之类的最好不要打图集。
  • 至于DrawCall优化,可以自己做动态图集或者使用引擎自带的动态合图减少DC
  1. 实践发现cocos的文本初始化很耗时,我在项目中使用了超级富文本插件,既可以减少DC,又可以减少创建时间。
    以上两点优化后。我们项目的界面创建时间大大减少了,以下是优化前后对比:
    优化前 优化后

现在各种界面直接秒开,我以前一直以为是fairygui创建卡,我真的是错怪它了。当然这个需要使用ui资源的延迟加载功能。
我用的fairygui库为: wingcd/FairyGUI-cocoscreator at ccc3.8-textmesh (github.com)
此版本包含:

  1. 资源延迟加载
  2. 资源自动释放
  3. textmesh支持
1赞

赞一个,先备份下,等我验证一下,实用性先

开始做游戏了?之前你在引擎组是吧 :laughing:

没有进过引擎组

我说上面的皮卡丘

哦哦。不好意思,没注意看

mark 下次好找

mark mark

mark 下次好找

mark 下次好伐

mark zsbd

老哥,请教下什么叫资源数据,什么叫界面数据?这里的第一点不是很懂。。。

比如背景,按钮底框,进度条之类的就是界面数据,资源数据就是动态填充的东西,比如item的icon等

那这个千万别把资源数据与界面数据打包在一起具体是个设么意思?就是比如按钮 进度条之类的不能和动态加载的资源放到一个图集么

对。动态的数据可以考虑不合图,自己在代码里面做动态合图都行,这样加载量小,也没有一次性加载的压力

比如一个抽奖功能很多item,item做成了prefab来动态加载。我们现在把静态和动态加载的都放到了一个合集里(用的texturepacker),这样是不是不大好。。

texmesh分支没有texmesh相关代码,只有GTextField有个textmeshMode设置,请问是什么情况

textmesh分支需要配合插件使用哦: Cocos Store

好的,感谢回复,真速度 :rofl: