背景:
公司之前的拳头产品,已经上线了好几年了。2年前优化过一波(引擎版本从2.1.0升级到2.4.2,现在已经是2.4.9了),随着项目迭代资源越来越多加载越来越慢内存占用越来越大,需要重新进行优化(主要是微信渠道);
过程:
1. 加载优化:
bundle压缩类型:推荐使用zip;
使用zip压缩类型后单个bundle在打包后就一个zip一个json,不管是上传bundle至cdn还是运行时下载bundle到设备,网络请求的吞吐量都会有明显的优势;
其次是配合下文的纹理压缩做内存优化;纹理压缩后资源文件大小会成倍增加,若不压缩包体过于庞大,即使能上传发布对玩家而言也不友好;
结构整理:之前的分包只是简单根据功能模块的概念进行划分,好处是比较直观,实现起来也很简单。但随着资源和玩法的不断丰富可能存在冗余的问题:比如功能a有精美繁复的界面和玩法导致其bundle很大,但在主页只需要功能a的一个入口按钮。如果将入口a放在bundle a中,则在主页显示入口a会先将整个bundle a下载并解压。个人是单独创立一个bundle 用于专门存在各类主页细碎的icon、banner等资源,而完整的bundle a则在游戏中玩家点击a时再做加载;
2. 内存优化:
由于厂商差异,小游戏在android机一般不会遇到内存导致性能问题,其在andorid机上是独立的进程;而ios设备上,小游戏和微信是同一个进程,稍微重度的项目很容易遇到内存问题,比如js在后台不停gc导致的游戏卡顿,或者直接内存不足闪退。
使用纹理压缩可以明显的减轻内存压力,(配合纹理压缩ios还需要开启高性能模式。setETC-一个自动化遍历Creator资源目录设置压缩纹理的脚本_楚游香的博客-CSDN博客
使用大佬的脚本批量设置除图集外资源后,配合zip方式打包。最终包体资源由23M变成54M,但运行时内存占用会显著降低。修改后基本ip8可以50帧以上稳定运行。代价只是首屏加载变慢一俩秒。
2023.07.25号更新
真机对比
- xs max( 但是这个手机有点妖,帧率和优化前有来有回,目前原因未知;对比笔者自己的xr,帧率稳定在55帧以上);对比图可知cpu和内存占用均有50%以上提升。更多机型后续测试同学测试ing
优化前:
优化后:
2023.07.28更新
红框处是实验组,机型一一对应(游戏内锁帧59);
xr内存和cpu优化不大,但是帧数上来了;
xs max内存和cpu优化50%以上,帧率反而下去了;
12内存和cpu 优化50以上,帧率稳定拉满