【求知探新】《为谁而炼金》UI界面加载性能分析
- 作者:admin
- /
- 时间:2017年08月24日
- /
- 浏览:5790 次
- /
- 分类:厚积薄发
【求知探新】是UWA新推出的栏目。在UWA团队做性能优化的过程中,常常会遇到一些未知的问题,在这里我们将分享UWA研究这些问题的完整过程。当然需要说明的是,一个好的问题没有标准的答案,在此也欢迎大家来积极拍砖!
今天分享的内容,来自UWA对DeNA《为谁而炼金》手游的UI界面加载性能分析。
一、问题描述
研发团队反馈部分UI界面的交互反应速度较慢,具体操作如下图:点击主页面(左图)的“英灵”按钮,UI界面会进入过渡界面(中图),最终进入“英灵”界面(右图),整个过程中打开速度较慢,大约4秒钟。
二、问题复现
我们在红米Note2(低端)和三星S6(中高端)设备上分别进行了尝试,点击该按钮后,UI界面出现确实较慢(4秒钟左右)。
三、问题分析
我们首先通过Profiler来进行测试,下图为红米Note2设备上的性能分析。我们发现,在点击“英灵”按钮后,UI开启过程中主要经过两个阶段:红框部分为资源加载期,蓝框部分为UI界面加载期。可以看到,虽然都是Loading.UpdatePreloading函数在加载,但其每帧的开销均很小,在蓝框期间,游戏的总耗时更是小于33ms。这说明研发团队对于此处的UI界面加载为异步加载。
上图为资源加载期的CPU耗时,下图为UI界面加载期的CPU耗时
对此,我们的建议如下:
(1) 加载切换由于是异步加载,且每帧的CPU利用率过低,因此,建议研发团队对特定UI尝试同步加载来减少UI的切换时间;
(2) 同步加载可能会造成切换界面运行得“不流畅”,对此,研发团队也可以考虑加大每帧异步加载的资源数量,从而减少红框和蓝框处的等待时间。
同时,我们在UWA性能报告中发现了每次点击UI后,均有规律性的单帧高开销(Profiler中存在耗时卡顿,但未发现该具体耗时项,我们推测是Profiler统计时出现了跳帧问题),如下图红框所示。经过定位,其52%的开销来自于Resources.UnloadUnusedAssets API,如下图性能堆栈中的GarbageCollectAssetsProfiler所示。对此,建议研发团队尽可能避免频繁的Resources.UnloadUnusedAssets,根据资源用量每5~10分钟调用一次即可。
四、结论
该UI界面加载耗时较大主要有两方面组成:
(1)大量资源的异步加载,导致每帧CPU利用率较低;
(2)Resources.UnloadUnusedAssets API的不合理调用。
对此,建议研发团队根据第三节中的详细说明进行进一步地检测和完善。
文末,感谢DeNA对于UWA团队的认可,并同意将以上研究过程中的性能数据在此分享。同时,我们也欢迎大家在UWA问答社区(answer.uwa4d.com)积极提交研发过程中遇到的问题。也许随着时间的流逝,科技的进步,答案将变得廉价,但问题会变得更有价值,因为提问和研究将比回答更有力量。
PS:《为谁而炼金》是一款富有壮大的故事情节以及高度的战略性的RPG战棋游戏,喜欢这款手游的童鞋们可以在官方网站上预约啦:http://fwg.mobage.cn/