Interaction to Next Paint (INP) (与下次绘制的交互)

浏览器支持

  • Chrome: 96.
  • Edge: 96.
  • Firefox:不支持。
  • Safari:不支持。

来源

Chrome 使用数据表明,用户在页面上花费的时间有 90% 是在加载后花费的。因此,在整个页面生命周期中仔细衡量响应速度非常重要。这正是 INP 指标评估的内容。

良好的响应速度意味着页面能够快速响应交互。当页面响应交互时,浏览器会在其绘制的下一帧中呈现视觉反馈。视觉反馈告诉您,例如,您添加到在线购物车的商品是否确实已添加、移动导航菜单是否已打开、登录表单的内容是否正在被服务器验证等等。

有些交互自然会比其他交互花费更长的时间,但对于尤其复杂的交互,快速呈现一些初始视觉反馈以告诉用户正在发生某些事情非常重要。浏览器将绘制的下一帧是执行此操作的最早机会。

因此,INP 的目的不是衡量交互的所有最终效果(例如网络获取和来自其他异步操作的 UI 更新),而是衡量下次绘制被阻止的时间。通过延迟视觉反馈,用户可能会认为页面响应不够快,而开发 INP 是为了帮助开发者衡量用户体验的这一部分。

在以下视频中,右侧的示例立即提供视觉反馈,表明手风琴正在打开。左侧的示例演示了较差的响应速度,以及它如何导致糟糕的用户体验。

一个关于较差与良好响应速度的示例。在左侧,长时间任务阻止了手风琴的打开。这导致用户多次单击,认为体验已损坏。当主线程赶上时,它会处理延迟的输入,导致手风琴意外地打开和关闭。在右侧,响应速度更快的页面可以快速且无意外地打开手风琴。

本指南解释了 INP 的工作原理、如何衡量它,并指出了改进它的资源。

什么是 INP?

INP 是一个指标,用于评估页面对用户交互的整体响应速度,通过观察用户访问页面期间发生的所有点击、触摸和键盘交互的延迟。最终 INP 值是观察到的最长交互,忽略异常值。

关于 INP 如何计算的详细信息

INP 通过观察与页面进行的所有交互来计算。对于大多数网站,延迟最差的交互将报告为 INP。

但是,对于具有大量交互的页面,随机的小故障可能会导致在其他方面响应迅速的页面上出现异常高延迟的交互。

给定页面上发生的交互越多,这种情况发生的可能性就越大。

为了更好地衡量具有大量交互的页面的实际响应速度,我们每 50 次交互忽略一次最高交互。绝大多数页面体验的交互次数不超过 50 次,因此通常报告最差的交互。然后像往常一样报告所有页面浏览量的第 75 百分位数,这进一步消除了异常值,从而给出一个绝大多数用户体验或更好的值。

交互是一组在同一逻辑用户手势期间触发的事件处理程序。例如,触摸屏设备上的“触摸”交互包括多个事件,例如 pointeruppointerdownclick。交互可以由 JavaScript、CSS、内置浏览器控件(例如表单元素)或它们的组合驱动。

要点: 有关 INP 如何测量的更多详细信息,请阅读“交互中包含什么?”部分。

什么是好的 INP 分数?

在响应速度指标上贴上“好”或“差”之类的标签是很困难的。一方面,您希望鼓励优先考虑良好响应速度的开发实践。另一方面,您必须考虑到人们使用的设备的功能存在相当大的差异,以便设定可实现的开发期望。

  • 为了确保您提供具有良好响应速度的用户体验,一个好的衡量阈值是在现场记录的页面加载的 75% 百分位数,按移动设备和桌面设备细分
  • INP 低于或等于 200 毫秒意味着页面具有良好的响应速度
  • INP 高于 200 毫秒且低于或等于 500 毫秒意味着页面的响应速度需要改进
Good INP values are 200 milliseconds or less, poor values are greater than 500 milliseconds, and anything in between needs improvement.
INP 高于 500 毫秒意味着页面具有较差的响应速度

良好的 INP 值是 200 毫秒或更少。较差的值大于 500 毫秒。

A diagram depicting an interaction on the main thread. The user makes an input while blocking tasks run. The input is delayed until those tasks complete, after which the pointerup, mouseup, and click event handlers run, then rendering and painting work is kicked off until the next frame is presented.
交互中包含什么?

交互的生命周期。在事件处理程序开始运行之前会发生输入延迟,这可能是由主线程上的长时间任务等因素引起的。然后,交互的事件处理程序回调会运行,并且在呈现下一帧之前会发生延迟。

交互性的主要驱动因素通常是 JavaScript,尽管浏览器确实通过并非由 JavaScript 驱动的控件提供交互性,例如复选框、单选按钮和由 CSS 驱动的控件。

  • 出于 INP 的目的,仅观察以下交互类型:
  • 使用鼠标点击。
  • 在触摸屏设备上触摸。

要点: 用户也可能以其他方式与页面交互,例如悬停、缩放或滚动。出于 INP 的目的,不会观察这些交互。但是,这些交互的某些变体可能包括 INP 确实会衡量的手势,例如点击、触摸或按键。

交互发生在主文档或嵌入在文档中的 iframe 中——例如,单击嵌入视频上的播放。最终用户不会知道 iframe 中包含什么,因此,需要 iframe 中的 INP 来衡量顶级页面的用户体验。由于 JavaScript Web API 无权访问 iframe 的内容,这可能会显示为 CrUX 和 RUM 之间的差异

A depiction of more complex interaction containing two interactions. The first is a mousedown event, which produces a frame before the mouse button is let up, which kicks off more work until yet another frame is presented as the result.
交互可以包含多个事件。例如,按键包括 keydownkeypresskeyup 事件。触摸交互包含 pointeruppointerdown 事件。交互中最长持续时间的事件是导致交互总延迟的原因。

具有多个事件处理程序的交互的描述。交互的第一部分在用户单击鼠标按钮时接收输入。但是,在他们释放鼠标按钮之前,会呈现一个帧。当用户释放鼠标按钮时,在呈现下一个帧之前,必须运行另一系列事件处理程序。

页面的 INP 在用户离开页面时计算。结果是一个单一值,代表页面在其整个生命周期内的整体响应速度。低 INP 值意味着页面能够可靠地响应用户输入。

INP 与首次输入延迟 (FID) 有何不同?

INP 是 首次输入延迟 (FID) 的后继指标。虽然两者都是响应速度指标,但 FID 仅衡量页面上首次交互的输入延迟。INP 通过观察页面上的所有交互来改进 FID,从输入延迟开始,到运行事件处理程序所需的时间,最后一直到浏览器绘制下一个帧。

这些差异意味着 INP 和 FID 是不同类型的响应速度指标。FID 是一个加载响应速度指标,旨在评估页面给用户的最初印象,而 INP 是整体响应速度的更可靠指标,无论交互发生在页面生命周期的哪个阶段。

如果没有报告 INP 值怎么办?

  • 页面有可能不返回 INP 值。这可能是由于多种原因造成的,包括以下原因
  • 页面已加载,但用户从未单击、触摸或按下键盘上的按键。
  • 页面已加载,但用户使用未衡量的手势与其交互,例如滚动或悬停在元素上。

页面正在被机器人(例如搜索爬虫或无头浏览器)访问,这些机器人未被脚本化以与页面交互。

如何衡量 INP

要点: 衡量您网站 INP 的最佳方法是从现场的实际用户那里收集指标。如果您习惯于依赖实验室数据来评估性能,请花一些时间阅读《为什么实验室数据和现场数据可能不同(以及如何处理)》

在现场

阅读以了解更多信息: 《在现场查找缓慢的交互》

如果您的网站符合纳入 Chrome 用户体验报告 (CrUX) 的条件,您可以通过 PageSpeed Insights 中的 CrUX(以及其他 Core Web Vitals)快速获取 INP 的现场数据至少,您可以获得网站 INP 的来源级别概览,但在某些情况下,您也可以获得 URL 级别的数据。

但是,虽然 CrUX 可以告诉您是否存在问题,但它无法告诉您问题的原因。RUM 解决方案可以帮助您发现有关页面、用户或用户交互的更多详细信息,这些页面、用户或用户交互正在经历响应速度问题。能够将 INP 归因于个别交互可以避免猜测和浪费精力。

在实验室中

最佳情况下,一旦您拥有表明页面存在缓慢交互的现场数据,您就希望开始在实验室中进行测试。现场数据将使在实验室中重现有问题的交互的工作变得更加直接。

然而,完全有可能您没有现场数据。虽然 INP 可以在某些实验室工具中进行衡量,但在实验室测试期间页面的最终 INP 值将取决于在测量期间执行的交互。用户行为可能是不可预测且高度可变的,这意味着您在实验室中的测试可能无法以与现场数据相同的方式发现问题交互。此外,某些实验室工具不会报告页面的 INP,因为它们仅观察页面的加载而没有任何交互。在这种情况下,总阻塞时间 (TBT) 可能是 INP 的合理代理指标,但它本身不能替代 INP。

阅读以了解更多信息: 《在实验室中手动诊断缓慢的交互》

如何改进 INP

提供了一系列关于优化 INP 的指南,以指导您完成在现场识别缓慢交互以及使用实验室数据帮助您识别原因并优化它们的过程。

更新日志

有时,在用于衡量指标的 API 中会发现错误,有时在指标本身的定义中也会发现错误。因此,有时必须进行更改,这些更改可能会在您的内部报告和仪表板中显示为改进或回归。

为了帮助您管理这一点,对这些指标的实现或定义的所有更改都将在此更新日志中公布。

如果您对这些指标有反馈,请在 web-vitals-feedback Google 网上论坛中提供。

测试您的知识

INP 指标的主要目标是什么?
衡量页面首次内容显示所需的时间。
不正确 - 这描述的是首次内容绘制 (FCP)
量化页面的视觉稳定性并最大限度地减少意外的布局偏移。
不正确 - 这描述的是累积布局偏移 (CLS)
评估页面完全变为交互式所需的时间。
不正确 - 这与可交互时间 (TTI) 相关,但 INP 专门关注对用户输入的响应速度
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。

正确!

出于 INP 的目的,仅观察以下交互类型:
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。
以下哪些交互类型用于计算 INP?(选择所有适用项。)
使用鼠标滚轮或触控板滚动页面。
不正确 - INP 不考虑滚动
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。
触摸触摸屏。
将鼠标光标悬停在元素上。
不正确 - INP 不考虑悬停
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。
按下键盘上的按键。
放大或缩小页面。

不正确 - INP 不考虑缩放

对于 INP,交互的“延迟”是如何定义的?
浏览器处理交互的事件处理程序所需的时间。
不正确 - 这仅考虑了处理持续时间,而不考虑输入延迟或呈现下一个帧的时间
页面上所有交互产生视觉响应所需的平均时间。
不正确 - INP 关注最长的交互,而不是平均值
浏览器开始处理与交互关联的事件处理程序所需的时间。
不正确 - 这仅考虑了输入延迟,而不考虑处理和渲染时间
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。

从交互开始到完全呈现下一个帧的时刻的时间。

INP 和 FID 之间有什么区别?
INP 衡量页面首次内容显示所需的时间,而 FID 衡量对用户输入的响应速度。
INP 考虑所有交互的完整持续时间,而 FID 仅测量首次交互的输入延迟。
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。
INP 和 FID 衡量页面变为可交互状态的不同时间戳。
不正确 - INP 和 FID 衡量页面响应交互的速度,与交互发生的时间无关
没有区别;INP 和 FID 只是同一指标的两个不同名称。
不正确 - 它们确实有不同的定义

在 PageSpeed Insights 等工具中,在什么情况下页面的 INP 数据可能不可用?

该页面正在使用不报告 INP 数据的自定义性能测量库。
不正确 - INP 是使用 Web 平台 API 自动测量的,不依赖于页面通过自定义库自行报告其性能。
来自 Chrome 用户的交互数据不足以在 CrUX 数据集中计算有意义的 INP 值。
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。
用户仅通过滚动和悬停与页面交互,而滚动和悬停不计入 INP。
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。
该页面是使用自动针对 INP 进行优化的框架构建的,因此无需报告它。
不正确 - 框架可以帮助改进 INP,但如果数据可用,该指标仍然相关且会被报告

在实验室环境中重现慢速交互的最有效策略是什么?

模拟具有缓慢且不可靠的网络连接的高端设备,以创建具有挑战性的条件。
不正确 - 虽然网络可能起作用,但设备性能更有可能暴露慢速交互
仅在页面完全加载并处于空闲状态后才测试交互。
不正确 - 这可能会错过加载期间速度较慢的交互
在加载期间与页面交互并遵循常见的用户流程,以识别潜在的瓶颈。
对于用户发起的所有或大多数交互,最大限度地减少从用户发起交互到绘制下一个帧的时间。
专注于大多数用户不太可能遇到的复杂、边缘情况交互。
不正确 - 常见的用户流程更适合识别典型的 INP 问题

此测验由 Gemini 1.5 生成,并经过人工审核。 分享您的反馈