Fast load times系列翻译——使用 RAIL 模型来衡量性能

Fast load times系列翻译——使用 RAIL 模型来衡量性能

RAIL 是一个 以用户为中心 的性能模型,它提供了一个如何思考性能的体系。该模型将用户体验分解为关键操作(例如:点击、滚动、加载)并帮助你为它们定义性能指标。

RAIL代表web应用程序生命周期的四个不同方面:响应、动画、闲置、加载(response, animation, idle, load)。用户对每种操作都有不同的性能期望,因此性能指标是[根据内容和用户如何感知延迟的UX(user Experience:用户体验)来定义的](UX research on how users perceive delays.)。

四个指标:响应、动画、点击、加载

以用户为中心

让用户体验成为你性能优化的焦点。下表描述了用户感知性能的关键指标:

用户对性能延迟的感知:

延迟时间用户体验
0 到16 ms用户非常注重顺滑的动作,他们讨厌动画不流畅。只要每秒渲染 60 帧,用户就会认为是平滑的动画。也就是 16 帧每秒,这包括了浏览器绘制新帧的时间,留给程序约 10ms 内生成一个帧。
0 到100 ms在这个时间范围内响应用户的操作,用户会认为结果是即时返回的。再长一点,用户动作和反应之间的联系就断开了。
100 到1000 ms在这个范围内,用户会认为这是自然的或连续的进程的一部分。对于 web 页面上的大多数用户,他们会认为加载页面和渲染视图是同一件任务。
1000 ms 或更多超出 1000 ms(1 秒钟),用户就会失去对正在执行的任务的关注。
10000 ms 或更多超出 10000 ms(10 秒钟),用户会感到沮丧,并可能会放弃任务。他们可能会回来,也可能不再回来了。

用户对性能延迟都抱着不同的观点,这些观点取决于当时的网络条件和硬件性能。比如说:在快速的 WIFI 和高配的电脑上加载 web 网站通常会在 1s 之内,用户已经习惯了这种情况。在移动端的慢速的 3G 网络中会耗费更多时间,所以手机用户通常更有耐心,在 5s 内加载手机页面是一个更现实的目标。

目标和方针

在 RAIL 中,“目标” 和 “方针” 有着明确的含义:

  • 目标。与用户体验相关的关键性能指标。例如:点击后在 100 毫秒内渲染完成。因为用户的感知是相对稳定的,这些目标短时间内不会改变。
  • 方针。帮助你完成目标的建议。这些可能特指当前的硬件和网络环境,并且它们随时可能修改。

响应:在 50 毫秒内处理完成

目标:在 100 毫秒内完成用户输入到启动的转换,让用户感觉交互是即时的。

方针:

  • 确保可见的响应在 100 毫秒内,用户输入的处理在 50 毫秒内。这大多用于输入,例如单击按钮、切换表单或启动动画。这不适用于拖拽或滚动。
  • 虽然这听起来可能违反直觉,但立即响应用户输入并不总是正确的做法。你可以多加 100 毫秒的时间来处理其他事情,但是要注意不要阻止用户操作,如果可以的话尽量在后台处理。
  • 对于需要超过 50 毫秒才能完成的操作,要始终提供反馈信息。

50ms 还是 100ms?

目标是在 100ms 内响应输入,那么为什么我们的预算只有 50ms?这是因为除了输入操作外,通常还有其他工作需要处理,并且这部分工作占用了响应的可用时间。如果一个应用在空闲的时间以建议的 50ms 块执行工作,这意味着如果输入发生在其中一个工作块期间,输入最多还可以排队 50 毫秒。下图演示了这种情况,它显示了在空闲期间接收的输入是如何排队的,因而减少了可用的处理时间。

空闲任务是如何影响输入响应预算的

动画:在 10 毫秒内生成一帧

目标:

  • 在 10ms 或更少的时间内生成动画中的每一帧,最大预算是每帧 16 ms(1000 ms / 60 frame/s ≈ 16 ms),但是浏览器需要大约 6 ms 去渲染他们所以目标是每 10 ms生成一帧。
  • 以视觉平滑流畅为目的。当帧率波动时,用户很容易就会发现。

方针

  • 像动画这样的高消耗内容,关键是在你能做的地方什么也不做,在你不能做的地方做最小值。利用100毫秒的响应预先计算昂贵的工作,使你最大限度地达到60帧每秒。TODO:优化上面这段话。
  • 有关各种动画优化策略,请参阅渲染性能

要意识到什么是动画。动画不仅仅只是酷炫的 UI 效果,这些交互都算是动画:

  • 视觉效果,如输入输出、补间动画、加载动画
  • 滚动,例如:快速滚动时,在用户停止后,页面会有一段继续滚动(惯性滑动)。
  • 拖拽。动画通常遵循用户的交互,如平移或缩放地图。

闲置时间:充分利用闲置时间

目标:

充分利用闲置时间来尽量达到响应时间在 50ms 内

方针:

  • 使用空闲时间来完成耗时工作。例如,在第一次页面加载时,尽可能少的加载数据,然后使用空闲时间去加载。
  • 即使是空闲时间也要在 50 ms 内或更少的时间范围内工作,如果超过了这个范围,你可能会干扰到应用程序响应用户输入。
  • 如果用户在空闲时间时发生页面交互,要始终让交互拥有最高优先级并终端空闲时间的工作。

加载:在五秒内完成发送和交互

当页面加载是否缓慢时,用户的注意力会被分散,用户可能会认为操作执行失败了。加载速度越快的公司访问量越大,反弹率更低,用户持续访问的时间越长

目标:

注意,上面的这些目标可能会随着时间而发生改变。

方针:

  • 站在在用户的角度测试你在移动设备和 web 上的负载性能。你可以使用Chrome用户体验报告找出你的用户的分布。如果你的站点没有可用的数据,根据《2019年移动经济》,一部中等规模的Android手机,比如Moto G4,以及一个慢速的3G网络(定义为400ms RTT和400kbps传输速度)是一个很好的全球基准。这里有个可用的测试工具
  • 请记住,虽然你的移动用户的设备可能声称它是在2G、3G或4G连接上,但实际上,由于丢包和网络差异,有效的连接速度通常要慢得多。
  • 删除阻塞渲染的内容
  • 你不需要在5秒内加载所有东西。考虑使用 懒加载、javaScript 代码分割已经 web.dev 上的其他优化建议

学会识别影响页面加载性能的可能因素:

  • 网络速度和延迟
  • 硬件(比如说慢速的 CPU)
  • 缓存被清除
  • L2 / L3缓存的差异 (L2/L3:CPU的两种缓存技术,L3 更高级)
  • JavaScript 的解析

测量 RAIL 的工具

有一些工具可以帮助你计算 RAIL 模型。使用哪种工具取决于你需要什么类型的信息,以及你喜欢什么类型的工作流。

Chrome 开发工具

Chrome 开发工具对页面加载或运行时发生的所有事情进行了深度分析并提供报告。详情参见从分析运行时性能开始这篇文章来熟悉界面 UI。

一下这些特性比较有意义:

Lighthouse

可以在Chrome DevTools,web.dev / measure,Chrome扩展程序,Node.js模块以及WebPageTest中使用Lighthouse。你给它一个 URL,他会模拟使用慢速 3G 的中档设备,在页面上运行一系列检查,然后给出关于负载性能的报告,以及关于如何改进的建议。

以下的内容比较有意义:

响应

加载

WebPageTest

WebPageTest 是一个 web 性能工具,它使用真正的浏览器访问 web 页面并收集各项时间参数。在webpagetest.org/easy输入一个 URL ,以获取真实Moto G4设备上使用慢速 3G 网络的页面加载性能的详细报告。 您还可以在这个里面配置Lighthouse的相关配置。

总结

如果用户体验是一段旅程,那么 RAIL 模型就是旅程中的一个镜头。了解用户如何看待你的网站,以便制定对用户体验影响最大的性能目标。

  • 以用户为中心。
  • 在 100 毫秒内响应用户输入。
  • 当动画播放时要在 10 毫秒内产生一帧。
  • 最大化利用空闲时间。
  • 在 5000 毫秒内加载好交互内容。

译者的话

这一章对 RAIL 模型和性能方针和目标进行了大概的介绍和举例,先让你知道有那么个东西,在后文中会详细介绍每一步骤如何操作。

RAIL 模型的概念贯穿整个系列,理解 RAIL 模型非常重要。通过对这几个用户体验的解析和归纳,得出了 RAIL 模型,通过 RAIL 模型再反过来优化加载过程和用户体验。再一个比较重要的就是确认了性能延迟指标:1s 以内。

理解 RAIL 模型中目标和方针的概念。目标有着明确的目的和限制,并且是长期稳定的。方针是有实效性的,用来辅助完成目标,是短期的可变的。我们可以对自己的项目进行研究思考,参照例子,针对项目写出四个操作的目标和方针。

最后给出了如何利用 RAIL 模型和 RAIL 模型的工具,并给出了如何使用的教程。有一些在平时开发中已经使用到了,有一些比较生僻但很有意义。可惜的是里面的教程也是英文的,有空再翻译一下吧。

欢迎关注我的个人微信公众号:前端 stack,每周分享一篇外文技术翻译哦
在这里插入图片描述


原文地址:https://web.dev/rail/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值