[Web翻译]用RAIL模型测量性能

1,381 阅读11分钟

出现在:快速加载时间

原文地址:web.dev/rail/

原文作者:

发布时间:2020年6月10日

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

RAIL代表Web应用生命周期的四个不同方面:响应、动画、闲置和加载。用户对这些情境中的每一个情境都有不同的性能预期,因此,性能目标的定义要基于情境和用户体验研究,即用户如何感知延迟

RAIL性能模型的4个部分

关注用户

让用户成为你绩效工作的焦点。下表描述了用户如何看待性能延迟的关键指标。

用户对业绩延迟的看法

//
0到16毫秒用户特别擅长跟踪运动,他们不喜欢动画不流畅。他们认为,只要每秒钟呈现60个新帧,动画就很流畅。每一帧需要16毫秒,其中包括浏览器将新帧绘制到屏幕上所需的时间,因此,一个应用程序产生一帧画面的时间大约为10毫秒。
0到100毫秒在这个时间窗口内响应用户的操作,用户会觉得结果是即时的。再长一点,动作和反应之间的联系就会被打破。
100到1000毫秒在这个窗口内,事情会让人觉得是自然而连续的任务进展的一部分。对于网络上的大多数用户来说,加载页面或改变视图代表着一项任务。
1000毫秒或更多超过1000毫秒(1秒),用户就会失去对正在执行的任务的关注。
10000毫秒或更多超过10000毫秒(10秒),用户会感到沮丧,很可能放弃任务。他们可能会,也可能不会再回来。

根据网络条件和硬件的不同,用户对性能延迟的感知也不同。例如,在功能强大的台式机上通过快速的Wi-Fi连接加载网站通常会在1秒内完成,用户已经习惯了这一点。而在移动设备上用慢速3G连接加载网站则需要更多的时间,所以移动用户通常更有耐心,在移动设备上5秒内加载是一个更现实的目标。

目标和准则

在RAIL的背景下,目标准则这两个术语有特定的含义。

  • 目标。与用户体验相关的关键性能指标。例如,在100毫秒内点选到画。由于人类的感知是相对恒定的,所以这些目标不太可能在短时间内改变。
  • 准则。帮助你实现目标的建议。这些可能是针对当前硬件和网络连接条件的,因此可能会随着时间的推移而改变。

响应:在50ms以下处理事件

目标:在100毫秒内完成用户输入发起的过渡,让用户感觉到交互是即时的。

准则

  • 为了确保在100毫秒内获得可见的响应,在50毫秒内处理用户输入事件。这适用于大多数输入,如点击按钮、切换表单控件或启动动画。这不适用于触摸拖动或滚动。

  • 虽然这听起来可能有悖直觉,但立即响应用户输入并不总是正确的呼吁。你可以利用这100毫秒的窗口来做其他昂贵的工作,但要注意不要阻挡用户。如果可能的话,在后台进行工作。

  • 对于需要超过50毫秒才能完成的操作,一定要提供反馈。

50毫秒还是100毫秒?

我们的目标是在100毫秒内响应输入,为什么我们的预算只有50毫秒?这是因为除了输入处理之外,一般还有其他工作正在进行,而这些工作占据了可接受的输入响应的部分时间。如果一个应用程序在空闲时间内以推荐的50毫秒分块执行工作,这意味着如果输入发生在其中一个工作块期间,可以排队长达50毫秒。考虑到这一点,可以肯定的是,只有剩余的50毫秒可用于实际的输入处理。下图直观地显示了这种效果,它显示了在空闲任务期间收到的输入如何被排队,从而减少了可用的处理时间。

闲置任务如何影响输入响应预算。

动画:在10毫秒内制作一帧动画

目标:在10毫秒或更短的时间内制作出动画中的每一帧。

  • 在10毫秒或更短的时间内制作动画的每一帧。从技术上讲,每一帧的最大预算是16毫秒(1000毫秒/60帧/秒≈16毫秒),但浏览器需要大约6毫秒的时间来渲染每一帧,因此,每一帧的准则是10毫秒。

  • 追求视觉上的流畅性。当帧率变化时,用户会注意到。

准则

  • 在动画这样的高压点,关键是能不做的地方就不做,不能做的地方就做绝对的最小。只要有可能,就利用100毫秒的响应来预先计算昂贵的工作,这样你就能最大限度地提高达到60帧的机会。

  • 关于各种动画优化策略,请参见渲染性能

认识所有类型的动画。动画不仅仅是花哨的UI效果。每一种交互都被认为是动画。

  • 视觉动画,如出入口、微调和加载指示器。
  • 滚动。这包括甩动,即用户开始滚动,然后放手,页面继续滚动。
  • 拖动。动画经常跟随用户交互,比如平移地图或捏住放大。

闲置:最大化闲置时间

目标:最大化闲置时间,增加页面在50毫秒内响应用户输入的几率。

准则

  • 利用空闲时间来完成延迟的工作。例如,对于最初的页面加载,尽可能少地加载数据,然后利用空闲时间加载其余部分。

  • 在空闲时间内执行工作,时间不超过50毫秒。任何更长的时间,你就有可能干扰应用程序在50毫秒内响应用户输入的能力。

  • 如果用户在闲置时间工作期间与页面进行交互,那么用户交互应始终处于最高优先级,并中断闲置时间工作。

加载:在5秒内传递内容并实现交互

当页面加载缓慢时,用户的注意力会游离,用户会认为任务被破坏。加载速度快的网站,平均会话时间长,跳出率低,广告浏览量高

目标

  • 根据用户的设备和网络能力,优化快速加载性能。目前,对于首次加载来说,一个好的目标是在3G慢速连接的中端移动设备上,在5秒或更短的时间内加载页面并进行交互

  • 对于后续加载,一个好的目标是在2秒内加载页面。

请注意,这些目标可能会随着时间的推移而改变。

指南

认识影响页面加载性能的因素:

  • 网络速度和延迟
  • 硬件(例如,较慢的CPU)
  • 缓存驱逐
  • L2/L3缓存的差异
  • 解析JavaScript

测量RAIL的工具

有一些工具可以帮助您实现RAIL测量的自动化。您使用哪一个取决于您需要什么类型的信息,以及您喜欢什么类型的工作流程。

Chrome DevTools

Chrome DevTools 提供对页面加载或运行时发生的所有事情的深入分析。请参阅 "开始分析运行时性能 "以熟悉性能面板用户界面。

以下 DevTools 功能特别相关:

灯塔

Lighthouse可以在Chrome DevTools、web.dev/measure、Chrome扩展、Node.js模块以及WebPageTest中使用。你给它一个URL,它就会模拟一个3G慢速连接的中端设备,在页面上运行一系列审计,然后给你一份关于加载性能的报告,以及如何改进的建议。

以下的审计特别相关:

响应

加载时间

WebPageTest

WebPageTest是一款使用真实浏览器访问网页并收集计时指标的网络性能工具。在webpagetest.org/easy输入网址,就可以在3G慢速连接的真实Moto G4设备上获得详细的网页加载性能报告。你也可以将其配置为包括Lighthouse审计。

总结

RAIL是将网站的用户体验看作是由不同的互动组成的旅程的一个视角。了解用户如何看待您的网站,以便设定对用户体验影响最大的性能目标。

  • 关注用户。

  • 在100毫秒内响应用户的输入。

  • 在动画或滚动时,在10毫秒内制作一帧画面。

  • 最大限度地延长主线程的空闲时间。

  • 在5000毫秒内加载交互式内容。


www.deepl.com 翻译