Facebook 是如何缩短 iOS 应用启动时间的

  • Sergio De Simone
  • 谢丽

2015 年 12 月 9 日

话题:移动FacebookiOS语言 & 开发架构

Facebook 工程师 Natansh Verma阐释了他们如何将 Facebook iOS 应用的启动时间缩短了几秒钟。

据 Verma 介绍,他们在优化启动时间时所采取的第一个步骤是定义一个稳定的指标。对他们而言,他们发现订阅加载完成的时刻是一个很好的参考,可以视为启动进程完成的时间。此外,他们决定优化所谓的“冷启动”,也就是一个完全没有运行的应用的启动时间,与热启动(应用已经在后台运行,某个事件将其带至前台)相比,它可以提供更大的调整空间。

Facebook 工程师通过检测发现,会发出第一次订阅请求的初始化阶段耗时太长。他们从以下两个方面进行了处理:

  • 通过分析,删除第一次网络请求之前不必要的依赖项,仅保留所必需的有效身份验证令牌和订阅游标;
  • 借助一种他们称之为 UDP priming 的技术减少建立安全 TCP 连接(需要三次服务器往返通信)的时间。简单来说,应用会向服务器发送一个加密过的 UDP 数据包,其中包含订阅请求。这可以提示服务器将会有一个真正的 TCP 请求到达,那样服务器就可以提前获取和缓存数据。

重要通知:接下来 InfoQ 将会选择性地将部分优秀内容首发在微信公众号中,欢迎关注 InfoQ 微信公众号第一时间阅读精品内容。

在确保最初的订阅请求尽早发出之后,Facebook 工程师确定的另外一个改进项是故事获取策略。那就是,他们将用两个批次(第一批次 3 个,第二批次 7 个)提供故事改为一种更像流的模型,即按 1+1+X 提供故事。

有意思的是,第一个故事返回时间缩短使得一些应用服务的部分资源争用情况突显,降低了渲染引擎的速度。这个具体问题是通过引入一种队列机制解决的,所有那些服务在应用启动完成后才开始执行。

Verma 表示,那些优化总共将应用的启动时间缩短了几秒钟。

移动应用的启动时间是用户体验的一个重要方面,苹果一直建议尽可能的缩短启动时间,防止用户不愿意使用它们。

移动FacebookiOS语言 & 开发架构