Android 日历团队如何使用基线配置文件改善应用启动速度和卡顿

基线配置文件通过避免常见的用户旅程的解释器和即时 (JIT) 编译步骤,将代码执行速度提高了高达 30%。基线配置文件让您可以选择要优化的用户旅程,并有助于改善应用启动速度,减少卡顿等等,从而改善业务指标,例如用户留存率和评分。了解有关基线配置文件的更多信息.

Android 日历团队实施了基线配置文件,观察到应用启动时间缩短了约 20%,缓慢或冻结的帧减少了约 50%。以下是他们为实现这些性能提升而进行的端到端操作,从他们决定使用基线配置文件的原因到他们如何衡量影响。

云配置文件与基线配置文件

Android 日历团队已经一直在使用 云配置文件,这是另一种基于应用的现实世界用户交互的配置文件引导优化 (PGO) 方法。以下是云配置文件和基线配置文件的比较

配置文件类型 设置 包含的用户旅程 用户群规模适合时效果最佳 实现的影响 支持的 Android 版本

云配置文件

默认启用

根据现实世界用户数据自动选择

庞大

在几天内

Android 9(API 级别 28)及更高版本

基线配置文件

由您配置

由您选择

所有规模

立即

Android 7(API 级别 24)及更高版本

Android 日历团队决定在其代码库中添加基线配置文件的主要原因之一是,他们正在转向更快的每周发布周期。虽然云配置文件可以显著提高性能,但它们需要在应用程序发布后 1-2 天才能达到峰值影响,因为它们依赖于聚合现实世界中的用户数据。使用基线配置文件补充云配置文件可以让用户在下一个应用程序版本发布之前有更多时间体验到性能提升的峰值。

此外,对于 Android 日历团队来说,能够选择哪些关键用户旅程 (CUJ) 特别包含在配置文件中非常重要,而使用基线配置文件可以做到这一点。

通常,我们建议将基线配置文件与默认启用的云配置文件结合使用,以获得最佳的性能结果。

包含的用户旅程

Android 日历团队选择在其基线配置文件中包含两个 CUJ:

  • 在日程视图中打开应用程序:最初的默认视图,因此对于首次使用该应用程序或未更改默认设置的用户来说,对其进行优化非常重要。
  • 在月视图中打开应用程序:根据用户数据,许多用户选择的视图。要跟踪用户如何使用您的应用程序,您可以使用诸如 Firebase 等工具。

通常,您应该添加对业务有利可图的 CUJ(如果适用)以及最常见的 CUJ。要详细了解如何选择要优化的 CUJ,请参阅 要包含的内容

实施

Android 日历团队使用 Jetpack Macrobenchmark 库 的内部包装器生成基线配置文件,以方便集成到内部工具中并实现通用可扩展性。

以下是用于在日程视图中打开应用程序的 Macrobenchmark 测试配置示例:

@Test
fun generateProfile() =
    baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
        startActivityAndWait()
        // Verify pre-existing recurring events and tasks are shown.
        device.waitAndFindObject(By.text("Recurring event"), 20_000)
        device.waitAndFindObject(By.text("Recurring task"), 20_000)

        // Open drawer and verify selected view.
        device.findObject(By.desc("Show Calendar List and Settings drawer")).click()
        device.waitAndFindObject(By.desc("Schedule view, Selected"), 1_000)
    }

使用受控发布测量影响

由于基线配置文件与它们随附的 APK 紧密耦合并在应用程序运行之前被整合,因此无法运行标准的 A/B 实验来了解它们的影响。但是,Android 日历团队能够使用 *受控发布* 来准确测量影响,在受控发布中,您实际上仅向一小部分用户发布新应用程序版本,并将他们与使用与以前版本相似的版本的用户进行比较。

借助基线配置文件,他们在多个方面看到了以下直接且显著的改进。这些统计数据是在各种设备和所有用户(在日程和月视图中开始的用户可能获得最大收益,但其他用户也受益于对共享进程(例如从数据库加载日历数据)的优化)之间汇总的。

  • 交互式应用程序启动(最常见场景)的中位延迟从 775 毫秒降至 644 毫秒(17%)
  • 冷启动的中位延迟从 1058 毫秒降至 901 毫秒(15%)
  • 暖启动的中位延迟从 453 毫秒降至 378 毫秒(17%)
  • 日程和月视图中的中位卡顿帧率下降了 42-60%

请记住,如果您将云配置文件与基线配置文件一起使用,您可能会看到在第一周内改进略有下降,因为云配置文件正在生成。但是,您仍然应该观察到基线配置文件在您已实施的其他优化之上产生的显著性能提升。

要详细了解工具和功能,请参阅以下资源: