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,请参阅要包含的内容

实施

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%)
  • 中位冷启动延迟从 1,058 毫秒降至 901 毫秒(15%)
  • 中位热启动延迟从 453 毫秒降至 378 毫秒(17%)
  • 日程和月视图中的中位卡顿帧率降低了 42-60%

请记住,如果您将云配置文件与基线配置文件结合使用,那么在生成云配置文件的第一周内,您可能会看到性能提升略有下降。但是,在您现有的其他优化基础上,您仍然会观察到基线配置文件带来的显著性能提升。

要了解有关工具和功能的更多信息,请参阅以下资源: