案例研究

Monzo 通过简单的 R8 更新将性能指标提升了 35%

阅读用时:2 分钟
Ben Weiss
开发者关系工程师

Monzo 是一家英国数字银行,拥有 1,500 万客户,并且客户数量还在不断增长。随着应用规模的扩大,工程团队发现应用启动时间是一个需要改进的关键领域,但担心这需要对代码库进行重大更改。

通过完全启用 R8 优化,Monzo 将应用无响应 (ANR) 发生率大幅降低了 35%。这一简单的更改证明,有影响力的优化并不总是需要复杂的工程工作。

通过 R8 完整模式实现广泛的性能提升

Monzo 认为 R8 完全模式是一种值得尝试的简单修复方法;事实证明,它确实奏效了,全面提升了性能:

  • 启动可靠性:冷启动性能提升了 30%,温启动性能提升了 24%,热启动性能提升了 14%。
  • 启动速度:P50 启动时间缩短了 11%,P90 启动时间缩短了 12%。
  • 效率:应用总体大小减少了 9%。
  • 稳定性:ANR 减少了 35%。
AANDDM_Monzo_Quote-1.png
large_AANDDM_Monzo_Quote-2.png

通过一次更改启用优化

许多 Android 应用使用过时的默认配置文件,这会停用 R8 优化器的大部分功能。Monzo 为实现这些性能改进而做出的主要更改是将 proguard-android.txt 默认文件替换为 proguard-android-optimize.txt。此更改移除了 -dontoptimize 指令,使 R8 能够正常工作。

buildTypes {
  release {
    isMinifyEnabled = true
    isShrinkResources = true
    proguardFiles(
      getDefaultProguardFile("proguard-android-optimize.txt"),
    )
  }
}

进行此更改后,建议您查看 Keep 配置文件。这些文件会告知 R8 哪些代码部分无需处理(通常是因为这些代码部分是动态调用或由外部库调用的)。清理不必要的 Keep 规则意味着 R8 可以做更多事情。

使用基准配置文件提升滚动性能

为了进一步提升用户体验,Monzo 实施了 Baseline Profiles,专门针对其主要 Feed 中的滚动和渲染性能。此策略可确保最常见的用户体验历程(打开应用和滚动信息流)得到充分优化。对渲染的影响非常大:P90 滚动性能提升了 71%,P95 滚动性能提升了 87%。现在,滚动应用比以前更顺畅了。

Monzo 将此功能纳入其发布流程,以便长期保持这些改进。“我们会在每个工作日触发基准配置文件生成操作(在运行每晚 build 之前),并在完成后提交最新更改,”Neumayer 解释道。

紧跟 Modern Android Development 的步伐

Monzo 的经验表明,及时了解 Android build 工具建议可以实现哪些功能。虽然旧版应用通常难以应对复杂的反射使用情况,但 Monzo 通过正确记录其 Keep 规则,发现过渡过程非常简单。“我们始终会添加一条注释来解释设置保留规则的原因,以便我们知道何时可以安全地移除这些规则,”Neumayer 说道。

Neumayer 对其他团队的建议是什么?定期对照当前标准检查您的做法:“查看 Google 针对应用性能提供的最新建议,并检查您是否遵循了所有最新建议。”

如需开始使用并详细了解 R8,请访问 https://d.android.com/r8

作者:

继续阅读