英雄基准测试是一组基准测试,涵盖了应用用户的高级体验历程,例如应用启动或在开源 Pokedex 应用中滚动。
- 启动英雄基准测试: 跟踪从打开应用到显示内容所用的时间。
- 滚动英雄基准测试: 衡量包含图片的延迟网格的滚动性能。
测试设置
- 应用选择: 我们使用开源 Pokedex 应用进行了这些测试,并比较了其基于 View和基于 Compose的版本。之所以选择该应用,是为了代表真实场景,该应用并非由 Compose 团队开发。
- 硬件设置: 我们在运行 Android 12 (API 31) 的 Pixel 3a 上运行了基准测试,并锁定了 CPU 和 GPU。此设备用作英雄基准测试的标准性能基准。
- 构建设置: 基准测试使用在发布模式下构建且启用了 R8 的应用。该应用已完全预编译,以减少即时 (JIT) 编译带来的不稳定性。
- 结果选择:为确保最坏情况分析,基准测试结果中排除了极端离群值和 不具代表性的噪声。然后,通过选择上限性能数据的中间值来建立基准
启动英雄基准测试
为了衡量启动,我们使用了 PokedexStartupBenchmark。PokedexStartupBenchmark 用于衡量 Pokedex 应用向用户显示所需的时间。
应用有三种启动状态:冷启动、温启动、 或热启动。每种状态都会影响应用向用户显示所需的时间。在冷启动中,应用从头开始启动。在此基准测试中,我们衡量了冷启动状态下的应用启动性能。我们建议您始终在假定冷启动的基础上优化应用。这样做也可以提升温启动和热启动的性能。
我们用于衡量应用启动时间的指标是初步显示 所用时间和完全显示所用时间。
初步显示所用时间
初步显示所用时间 (TTID) 用于衡量应用生成第一帧所用的时间,包括冷启动期间的进程初始化、冷启动或温启动期间的 activity 创建,以及显示第一帧。
在 PokedexStartupBenchmark 中,对于冷启动的 TTID,Compose 1.11 比 View 慢 2.5%。
完全显示所用时间
完全显示所用时间 (TTFD) 用于衡量应用达到可交互状态所需的时间。 这意味着所有数据都已加载并已绘制。如需详细了解完全显示所用时间,请参阅应用启动时间。
在 PokedexStartupBenchmark 中,对于冷启动的 TTFD,Compose 1.11 比 View 慢 13.0%。
滚动英雄基准测试
为了衡量滚动性能,我们使用了 PokedexScrollBenchmark。 它用于衡量包含图片的延迟网格的 Pokedex 应用屏幕的滚动性能。在此基准测试中,整个屏幕会多次滚动和滑动,并加载新项。滚动性能通过卡顿率来衡量。
卡顿率
Android 设备以最高 60 或 120 帧/秒 (fps) 的帧率进行渲染。这意味着系统有一个严格的截止时间(例如,60fps 为 16.6 毫秒)来生成帧。如果应用完成工作的时间过长,可能会导致明显的卡顿,我们称之为“jank”。
在 PokedexScrollBenchmark 中,自 Compose 1.9.0 以来,Compose 和 View 的性能相同,卡顿率为 0.21%。从绝对值来看,每 485 帧中就有 1 帧卡顿。
这些基准测试表明,Compose 1.9 及更高版本在滚动时与 View 的卡顿性能相匹配。
运行英雄基准测试
如需验证性能结果并在本地运行基准测试,请执行以下操作:
- 按照 AndroidX 指南 查看源代码。
- 按照英雄基准测试源代码中的说明操作。
您可以在任何受支持的设备上运行这些基准测试,例如您要针对其优化应用的特定设备。不过,如需验证官方结果, 请使用相同的 硬件设置。