通过基准配置文件改善应用性能

通过基准配置文件改善应用性能

作者 / Android 开发者关系工程师 Florina Muntenescu

启动时间的重要性

应用性能和用户参与度的相关性在许多应用中都有所体现。用户希望应用响应迅速且能快速加载,而 启动时间 就是衡量应用性能和质量的主要指标之一。

我们的一些合作伙伴已经投入大量时间和资源来优化应用启动情况。例如,您可以阅读了解 Facebook 的优化历程

本文我们将讨论基准配置文件和其改善应用和开发库性能的方式,包括它们如何将启动时间缩短了最高 40%。虽然本文侧重于应用启动,但是基准配置文件也可以极大改善卡顿情况。

回顾

Android 9 (API 级别 28) 在 Play Cloud 中引入了 ART 优化配置文件,以缩短应用启动时间。在云配置文件可用时,我们看到应用的冷启动在不同设备上平均快了至少 15%。

配置文件的工作原理

当应用在安装或更新后首次启动时,它的代码以解释模式运行,直到被 JIT。由于存储和加载完全编译的应用所需的开销较大,自 Android 6 开始,Java 和 Kotlin 代码在 APK 中编译为 dex 字节码,而不是完全编译为机器代码。应用中经常被使用以及用于应用启动的类和方法,都会被写入配置文件。一旦设备进入闲置模式,ART 就基于这些配置文件编译应用,以加快后续的应用启动。

从 Android 9 (API 级别 28) 开始,Google Play 也会提供云配置文件。当应用在设备上运行时,ART 生成的配置文件由 Play 商店应用上传并在云端聚合。为应用上传了足够的配置文件后,Play 应用将使用聚合的配置文件来进行后续的安装。

存在的问题

虽然云配置文件在可用时很有帮助,但并非总是在应用安装后即可使用。收集和聚合配置文件通常要几天时间,而许多应用会每周更新,这就是问题所在。而且许多用户会在云配置文件可用之前安装更新。Google Android 团队开始寻找其他方法来改善配置文件延迟。

解决方案

基准配置文件 是提供配置文件的一个全新机制,可在 Android 7 (API 级别 24) 和更高版本上使用。基准配置文件是由 Android Gradle 插件 生成的 ART 配置文件,使用可由应用和库提供的人类可读懂的配置文件格式。示例如下:‍

HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
HLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V
PLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
HLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I

△ Compose 库的示例

二进制文件存储在 APK 资源目录中的特定位置 (assets/dexopt/baseline.prof)。

基准配置文件在构建时创建,作为 APK 的一部分发送到 Play 中,然后在下载应用时,从 Play 发送至用户。基准配置文件在云配置文件尚不可用时,填补了 ART 云配置文件流水线中的空白,在云配置文件可用时,则会自动与其合并。

△ 此示意图展示了从创建到向最终用户交付的基准配置文件工作流程。

△ 此示意图展示了从创建到向最终用户交付的基准配置文件工作流程。

基准配置文件最大的优势之一是可以 在本地开发和评估,这样开发者可以看到真实的最终用户性能改进情况。它们还支持较低的 Android 版本 (7 和更高版本),而云配置文件只在 Android 9 及以上版本中提供。

影响

应用开发者

2021 年初,Google 地图的发布周期从两周改为一周。更频繁的更新意味着更频繁地舍弃本地预编译,以及更多用户在没有 Play Cloud 配置文件的情况下,遇到启动缓慢的情况。通过使用基准配置文件,Google 地图将平均启动时间缩短了 30%,搜索速度相应增长了 2.4%,对于这样一个成熟的应用来说,这是巨大的性能改进。

库开发者

库中的代码与应用中的代码类似,默认都不是完全编译,如果它在启动的关键路径中发挥重要作用,则可能存在问题。

Jetpack Compose 是一个不属于 Android 系统映像的界面库,因此与大多数 Android 视图工具包代码不同,它在安装时并未完全编译。这导致了性能问题,尤其是在应用前几次冷启动时。

为解决这一问题,Compose 使用了配置文件安装程序。该程序附带了基准配置文件规则,可以缩短 Compose 应用的启动时间并减少卡顿。

Google Play 商店的搜索结果页已经使用 Compose 进行重写。在集成 Compose 的基准配置文件规则后,渲染初始搜索结果页 (包括图像) 的时间缩短了约 40%。

Android 团队还将基准配置文件添加到了相关的 AndroidX 库。这可让所有使用这些库的 Android 应用受益。ConstraintLayout 发现 附带的配置文件规则 将动画帧时间缩短了超过 1 毫秒。

如何使用基准配置文件

创建自定义基准配置文件

所有应用和库开发者都可以从添加基准配置文件中获益。理想状态下,开发者为最关键的用户旅程创建配置文件,来确保不管云配置文件是否可用,这些旅程都拥有始终快速的性能。您可以查看 详细指南,了解如何为应用和库开发者设置基准配置文件。

更新依赖项

如果您还未准备好为应用生成基准配置文件,您仍然可以受益于更新依赖项。如果您使用 Android Gradle 插件 7.1.0-alpha05 或更高版本构建应用,您将获得包含在 APK 中的基准配置文件,这些配置文件已经由库 (例如 Jetpack) 提供。Google Play 在安装时借助这些配置文件编译应用。您可以将这些配置文件作为 构建应用的补充部分

衡量改进情况

不要忘记衡量应用改进情况。您可以 按照步骤操作,了解如何在本地衡量使用生成的配置文件的启动情况。

欢迎您分享体验反馈

如有其他发现的问题或者内容建议,欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!

版权声明

禁止一切形式的转载-禁止商用-禁止衍生 申请授权

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io WebMaster | GDG Zhengzhou Funder & Ex Organizer | http://Toast.show(∞) Podcast Host

你已经成功订阅到 Android 开发技术周报
太棒了!接下来,完成检验以获得全部访问权限 Android 开发技术周报
欢迎回来!你已经成功登录了。
Unable to sign you in. Please try again.
成功!您的帐户已完全激活,您现在可以访问所有内容。
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.