英雄基准

核心基准是一组涵盖高级应用用户体验历程的基准,例如应用启动或在开源 Pokedex 应用中滚动。

  • 启动主打基准:跟踪从打开应用到显示内容的时间。
  • 滚动主打基准:衡量包含图片的延迟网格的滚动性能。

测试设置

  • 应用选择:我们使用开源 Pokedex 应用进行了这些测试,比较了其基于 View 的版本和基于 Compose 的版本。该应用旨在代表真实场景,并非由 Compose 团队开发。
  • 硬件设置:基准测试在搭载 Android 17(API 级别 37)且锁定 CPU 和 GPU 的 Pixel 6 上运行。在 Compose 1.12 之前,基准测试是在 Pixel 3a 上进行的。从 Compose 1.12 开始,Pixel 6 被用作核心基准测试的标准性能基准,并且 Compose 1.11 也在 Pixel 6 上进行了测量,以便进行比较。
  • 构建设置:基准测试使用在发布模式下构建且启用了 R8 的应用。应用已完全预编译,以减少即时 (JIT) 编译带来的不稳定性。
  • 结果选择:为确保进行最坏情况分析,基准结果中排除了极端离群值和不具代表性的噪声。然后,通过选择性能数据上限的中位数来建立基准。

初创公司英雄基准

为了衡量启动时间,我们使用了 PokedexStartupBenchmark。PokedexStartupBenchmark 用于衡量 Pokedex 应用向用户显示所需的时间。

应用有三种启动状态:冷启动、温启动或热启动。每种状态都会影响应用向用户显示所需的时间。在冷启动中,应用从头开始启动。在此基准测试中,我们测量冷启动状态下的应用启动性能。我们建议您始终在假定冷启动的基础上优化应用。这样做也可以提升温启动和热启动的性能。

我们用于衡量应用启动时间的指标是初步显示所用时间和完全显示所用时间。

初步显示所用时间

初步显示所用时间 (TTID) 用于测量应用生成第一帧所用的时间,包括冷启动期间的进程初始化、冷启动或温启动期间的 activity 创建,以及显示第一帧。

在 PokedexStartupBenchmark 中,Compose 1.13 在冷启动时达到初始显示状态的时间为 147.65 毫秒。此结果在 Compose 1.12.1 (145.51 ms) 和 Compose 1.11.4 (147.78 ms) 的正常运行间噪声范围内,并且比 View (152.87 ms) 快 3.4%。

初步显示所用时间(以毫秒为单位),在 Pixel 6 上测试
版本初步显示所用时间(毫秒)
Compose 1.11147.78
Compose 1.12145.51
Compose 1.13147.65
观看次数152.87
图 1. 此图表比较了 Compose 1.11、1.12 和 1.13 与 View 的 TTID。

完全显示所用时间

完全显示所用时间 (TTFD) 用于衡量应用达到可互动状态所需的时间。这意味着所有数据都已加载并绘制。如需详细了解完全显示用时,请参阅应用启动时间。

在 PokedexStartupBenchmark 中,Compose 1.13 在冷启动时需要 202.79 毫秒才能完全显示。此结果在 Compose 1.12.1 (201.96 ms) 和 Compose 1.11.4 (203.33 ms) 的正常运行间噪声范围内。Views 在 180.32 毫秒内完成完整显示,因此 Compose 1.13 的 TTFD 比 Views 慢 12.5%。

完全显示所用时间(以毫秒为单位),在 Pixel 6 上测试
版本完全显示所用时间(毫秒)
Compose 1.11203.33
Compose 1.12201.96
Compose 1.13202.79
观看次数180.32
图 2. 此图表比较了 Compose 1.11、1.12 和 1.13 与 View 的 TTFD。

滚动主打内容基准

为了衡量滚动性能,我们使用了 PokedexScrollBenchmark。 它会测量 Pokedex 应用屏幕上包含图片的延迟网格的滚动性能。在此基准测试中,整个界面会多次滚动和快速滑动,并加载新内容。滚动性能通过卡顿率来衡量。

卡顿率

Android 设备的渲染速率最高可达每秒 60 或 120 帧 (fps)。这意味着系统必须在严格的截止时间(例如,60fps 对应 16.6 毫秒)内生成帧。如果应用花费太长时间来完成其工作,可能会导致明显的卡顿。

在 PokedexScrollBenchmark 中,自 Compose 1.9.0 起,Compose 的性能与 View 相当,多余卡顿百分点为 0。在 Pixel 6 上,View 和 Compose 在 Compose 1.11.4、1.12.1 和 1.13 中均保持 0.00% 的卡顿率。

Compose 相比 View 的额外卡顿(以百分点为单位,按 Compose 版本划分,越低越好)
Compose 版本设备卡顿率(个百分点)
1.3.3Pixel 3a+0.35
1.4.3Pixel 3a+0.41
1.5.4Pixel 3a+0.42
1.6.8Pixel 3a+0.21
1.7.8Pixel 3a+0.36
1.8.0Pixel 3a+0.38
1.9.0Pixel 3a0
1.10.0Pixel 3a0
1.11Pixel 60
1.12Pixel 60
1.13Pixel 60
图 3. 自 Compose 1.9.0 起,Compose 的滚动卡顿情况与 View 相当。

运行英雄基准测试

如需验证性能结果并在本地运行基准测试,请执行以下操作:

  1. 按照 AndroidX 指南查看源代码。
  2. 按照 Hero Benchmarks 源代码 README 中的说明构建基准和目标 APK(pokedex-macrobenchmark 和 pokedex-macrobenchmark-target),将其安装到测试设备上,然后使用 adb 或 Android Studio 运行 PokedexStartupBenchmark 和 PokedexScrollBenchmark 套件。

您可以在任何受支持的设备(例如您要针对其优化应用的特定设备)上运行这些基准。不过,如需验证官方结果,请使用相同的硬件设置。