3.4 应用的生命周期 App's Lifecycle

发布于 2022-04-28 12:40:56 字数 3741 浏览 1078 评论 0

说到这个性能优化,是不是任何一毫秒你都必须保证你的应用运行在高效率之下呢?当然不是,这是有策略的。对响应时间要求紧的地方,需要极佳的性能;无关紧要的地方,慢一点无所谓。所谓好钢用在刀刃上。下面,我们就来看看应用有什么生命周期,以及每个部分所需的最慢响应时间是多少。

应用的生命周期,总结起来可以归结为四个部分:RAIL。

RAIL

一般来说,按时间顺序,会先发生加载(Load) -> 空闲(Idle) -> 用户交互 -> 视觉反馈(Response) -> 结果反馈(Animate)。

Load 加载时间

这是最关键的1秒钟,这一秒里,你需要加载所有的 基本功能文字页面样式等。这部分的优化策略,就是我们 3.1 #158 和 3.2 #159 节谈到的 CRP 关键路径优化策略。前面这许多知识和努力都是为了交付这个 1秒 的 Load time。

Idle 空闲时间

这个空闲时间特指 load 加载完成后,用户开始操作之前的这段时间,有50ms 左右。这段时间做什么呢?当然是做预加载。加载一些 不需要1秒里交付、但用户可能接下来就要操作的资源,包括 图片、视频预览、留言等。可见下图。

Idle Time

Response 响应用户交互时间

比如用户点了个按钮、滚动了一下页面,都属于用户交互。用户交互会触发特定事件发生,不过在事件执行中间,结果返回之前,我们需要先给用户一些立刻的反馈。这个反馈需要多快发生呢?100ms。

Response and Animate Time

Animate 渲染时间

这个时间是怎么得来的呢?人眼感知不出卡顿的最低频率是60Hz,就是一秒60次的刷新,那么每次刷新就是 1000 / 60 = 16ms。你的反馈需要在这16秒内完成,其中还要除去浏览器本身的一些调度时间,实际留给你的时间只有 11~12 ms。在这 12 毫秒里,你要完成至少一次 frame 的渲染,也就是从 Recalculate Styles -> Layout -> Paint -> Composite Layers。

后续我们可以看到,这个地方的优化策略就是实打实的代码了。怎么尽量减少触发的渲染阶段,怎么加快每个阶段的 CSS / JS 代码的执行速度,都是生死攸关的因素。

image

image

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文