如何改善应用启动性能 | Facebook 应用的经验分享

2021-12-16  本文已影响0人  谷歌开发者
image

作者 / Google 和 Facebook 团队
撰稿 / Google Android 团队的 Kateryna Semenova 和 Facebook 团队的 Tim Trueman、Steven Harris、Subramanian Ramaswamy

简介

缩短应用的启动时间并非小事,我们必须深入了解其影响因素。今年,Google Android 团队和 Facebook 应用团队一直在合作研究这方面的量化指标,并共享优化方法,以改善应用启动情况。Google Android 的公开文档中包含了很多关于 应用启动优化 的信息。这里我们想进一步分享其在 Facebook 应用中的实践情况,以及哪些因素有助于改善应用启动性能。

现在,每个月有超过 29 亿人使用 Facebook。Facebook 帮助人们构建社区,并让世界更紧密地联系在一起。用户会在这里分享生活的瞬间,了解和讨论正在发生的事情,建立和培养人际关系,共同合作以创造收入机会。

Facebook 应用开发者则致力于确保用户享受最佳体验,并让应用在任意设备、任何国家/地区和不同网络条件下都能流畅运行。Google Android 团队和 Facebook 团队精诚合作,在应用启动时间的指标定义和最佳实践上达成共识,并在这里分享给大家。

从哪里开始

首先自然是测量应用的启动时间。您可借此获悉用户启动体验的健康程度,追踪启动时间恶化的情况,并计算进行改进需要投入的资源量。归根结底,您的启动时间需要与用户满意度、参与度或用户增长相关联,以确定投入的优先次序。

Android 定义了两个衡量应用启动时间的指标: 完全显示所用时间 (TTFD) 和 初步显示所用时间(TTID)。虽然您可以进一步将其划分为冷/暖启动时间,但本文不会解释它们之间的区别,而 Facebook 的方法是,衡量和优化与应用交互的所有用户所经历的启动时间 (有些是冷启动,有些是暖启动)。

完全显示所用时间 (Time-To-Full-Display, TTFD)

TTFD 会记录您的应用完成渲染并可供用户交互和使用时所需的时间,可能包括显示本地存储或来自网络上的内容所需的时间。如果网络较慢,这可能会花费一段时间,并会视用户的使用设备而有所差异。因此,我们有必要立即展示一些内容,让用户看到应用启动的进程,而这就要提到 TTID 了……

初步显示所用时间 (Time-To-Initial-Display, TTID)

TTID 会记录您的应用显示背景、导航、可快速加载的本地内容、加载较慢的本地或网络内容的占位块所需要的时间。TTID 应该是用户可以四处导航并前往其目标的所需时间。

不要改变太多: 有一件事需要注意,就是在 TTID 和 TTFD 之间应用内容的视觉变化问题,例如在页面里先展示的是已缓存的内容,然后在网络内容加载完成后突然切换页面内容。这种突然的变化可能会让用户感到不快和沮丧,所以请确保您的应用可在 TTID 期间显示足够有意义的内容,尽可能地向用户展示其将在 TTFD 期间看到的内容。

达成用户目标

用户访问您的应用是为了获取内容,这可能需要一段时间完成加载,而您希望应用可以尽快把这些内容呈现给他们。

Facebook 应用开发者专注于基于 完全显示所用时间 (TTFD) 的指标,包含显示所有内容和图像,因为这代表了用户访问应用的完整体验。开发者想要知道,网络加载内容和图像是否花费了较长时间,或者加载失败,以便让团队可以从头到尾改善整个启动体验。

良好的 TTID 和 TTFD 目标应当是多少?

Facebook 将启动时间指标设定为他们认为应用启动耗时 "不佳" 的百分比,即任何 TTFD 超过 2.5 秒的启动或启动失败的部分 (例如,图像无法加载或应用崩溃)。Facebook 致力于通过改进时间超过 2.5 秒的启动,使其摆脱 "不佳" 状态,以及修复导致启动失败的问题,从而降低启动时间 "不佳" 的比例。选择 2.5 秒是因为,研究表明,这对于 Facebook 用户来说很重要。这也与 Web Vitals 为网站建议的 最大内容绘制 (LCP) 指标相符。

与 TTID 相比,提供完整体验,尤其是用网络获取最近的内容,会让您的 TTFD 启动指标看起来相当缓慢。而这其实是一件好事!它反映了用户对您应用的真实体验。您对此所做的改进,可能会像 Facebook 那样,提高用户的应用使用率以及对其性能的认可。

测量 TTFD 的棘手程度可能会视您的应用而异。如果太难,不妨从 初步显示所用时间 (TTID) 着手。虽然由于占位块或图像的存在可能会导致无法量化部分内容的加载性能,但这依然是一个着手点,毕竟这部分也是用户日常与应用交互的内容 (虽然不是全部)。

检测 TTID

在 Android 4.4 (API 级别 19) 及更高版本中,logcat 提供了 "Displayed" 值,用于记录从启动进程到完成在屏幕上绘制相应 Activity 第一帧所经过的时间。

报告的日志行类似于以下示例:

ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms

检测 TTFD

要检测 TTFD,只需在您的所有内容都在屏幕上显示后,在 Activity 中调用 reportFullyDrawn()。请确保包含替换占位符的任何内容,以及您渲染的任何图像 (务必计算图像本身显示的时间,而不仅是其占位符显示的时间)。在您调用 reportFullyDrawn() 后,就可以在 logcat 里看到它:

ActivityManager: Fully drawn {package}/.MainActivity: +1s54ms

来自 Facebook 应用开发者的建议

多年来,Facebook 应用开发者一直在为众多设备、平台以及国家/地区的数十亿用户优化应用。本节分享了 Facebook 应用开发者在优化应用启动时运用的一些关键经验。

Google Android 团队给出的建议

Google Android 团队关于衡量和优化应用启动的建议请查阅官方文档 "应用启动时间"。

本节总结了一些适用于所有 Android 应用开发者且与上述 Facebook 建议相关的要点。

总结

本文介绍了一些关键的启动时间指标和优化最佳实践,以改善启动体验,帮助提升 Facebook Android 应用的用户参与度和使用率。本文还分享了 Google Android 团队建议的指标、开发库和工具。任何 Android 应用都可从本文分享的策略中受益。请大家动起手来,认真量化应用的启动情况,并为用户打造快速且令人愉悦的应用启动体验!

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

上一篇下一篇

猜你喜欢

热点阅读