【求知探新】《为谁而炼金》UI界面加载性能分析

【求知探新】《为谁而炼金》UI界面加载性能分析

【求知探新】是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/