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

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

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

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

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

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

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

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

余下全文(1/3)

本文最初发表在infoq,文章内容属作者个人观点,不代表本站立场。

分享这篇文章:

请关注我们:

发表评论

邮箱地址不会被公开。 必填项已用*标注