英雄基准

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

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

测试设置

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

初创公司英雄基准

为了衡量启动时间,我们使用了 PokedexStartupBenchmark。PokedexStartupBenchmark 用于衡量 Pokedex 应用对用户可见所需的时间。

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

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

初步显示所用时间

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

在 PokedexStartupBenchmark 中,Compose 1.12 的冷启动 TTID 与 View 相当。

Compose 1.12 的 TTID 与 View 相当
图 1:Compose 1.12 与 View 的 TTID 比较。

完全显示所用时间

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

在 PokedexStartupBenchmark 中,Compose 1.12 的冷启动 TTFD 比 View 慢大约 2%。

Compose 1.12 的 TTFD 比 View 慢约 2%
图 2:Compose 1.12 与 View 的 TTFD 比较。

滚动主打内容基准

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

卡顿率

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

在 PokedexScrollBenchmark 中,自 Compose 1.9.0 起,Compose 的性能与 View 相当,多余卡顿百分点为 0。在 Pixel 6(从 Compose 1.11 开始测试)上,Compose 和 View 的卡顿率均为 0%。

自 Compose 1.9.0 起,Compose 的滚动卡顿情况与 View 相当
自 Compose 1.9.0 起,Compose 的滚动卡顿情况与 View 相当。

运行英雄基准测试

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

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

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