INP指标

什么是INP(Interaction to Next Paint)

参考网站:webVital-INP文档


定义与核心目标

  • INP 是一项稳定的 Core Web Vitals 指标,通过统计用户访问期间所有符合条件的互动约定时间,评估网页对用户操作的总体响应能力。
  • 最终值:取观察到的最长互动时间(可能忽略高群值)。
  • 用户体验目标
    INP 应 ≤ 200 毫秒,建议以 P75(按设备类型细分)作为达标基准。

检测工具

  1. Chrome插件
    Web Vitals
  2. 其他测试网站
    PageSpeed Insights

指标计算规则

互动延迟由三阶段组成:

  1. 输入延迟,从用户发起与网页的互动开始,在互动的事件回调开始运行时结束。
  2. 处理时间,由事件回调运行完成所需的时间组成。
  3. 呈现延迟时间,即浏览器呈现下一帧(包含互动的视觉效果)所需的时间。

这三个阶段的总和就是总互动延迟时间,总延迟 = 输入延迟 + 处理时间 + 呈现延迟。
互动的每个阶段都会计入互动总延迟时间,因此了解如何优化互动的每个部分,以尽可能缩短互动的运行时间。


优化措施

关键策略

  1. 具体分析查找卡顿原因
    https://web.dev/articles/find-slow-interactions-in-the-field?hl=zh-cn#get_field_data_quickly_with_crux
    还可以使用 Chrome DevTools 定位缓慢的交互事件。
  2. 将非关键更新推迟到下一帧执行,让渡主线程执行关键业务
    避免让当前执行的任务阻塞用户交互、阻塞页面渲染;或者页面渲染任务过重阻塞业务代码执行。
    学会使用requestAnimationFrame() 放置于代码中,它可以确保非关键代码不会阻塞下一帧。
  3. 避免过于冗长的回调方法,它们都是顺序执行的,可以在关键更新执行后,剩下的回调方法放置于requestAnimationFrame()中执行。
    textBox.addEventListener('input', (inputEvent) => {
      // 关键更新立即执行
      updateTextBox(inputEvent);
      
      // 非关键逻辑延后
      requestAnimationFrame(() => {
        setTimeout(() => {
          const text = textBox.textContent;
          updateWordCount(text);
          checkSpelling(text);
          saveChanges(text);
        }, 0);
      });
    });
    
<think>嗯,用户之前问了关于`window.performance`方法以及如何计算用户感知时间,现在他们接着问`PerformanceObserver`有什么指标。看来用户可能在前端性能优化方面有需求,或者是在开发需要监控网页性能的应用。用户可能已经了解了一些传统的性能API,现在想转向更现代的指标,比如通过PerformanceObserver来获取更详细的性能数据。 首先,我需要确认PerformanceObserver的指标,这些指标可能包括FCP、LCP、CLS、FID等等。这些都是现代Web性能指标,用于更精确地衡量用户体验。用户可能想知道这些指标具体代表什么,以及如何利用它们来优化网站性能。 接下来,我需要回忆每个指标的定义和用途。比如,FCP是首次内容绘制,LCP是最大内容绘制,CLS是累积布局偏移,FID是首次输入延迟,还有TTFB、INP等。需要确保每个指标的解释准确,同时用用户容易理解的语言表达。 另外,用户可能关心这些指标如何通过PerformanceObserver来监听,是否需要特定的配置或代码示例。可能需要提供一些基本的代码片段,说明如何注册observer并捕获这些指标的数据。 还要注意兼容性问题,不同浏览器对这些指标的支持情况可能不同,可能需要提到这一点,让用户知道在实际应用中需要注意测试和回退方案。 另外,用户之前的问题提到了模拟用户感知时间,所以这里可能需要强调这些现代指标如何更准确地反映用户的实际体验,比如LCP和CLS如何影响用户对页面加载速度和稳定性的感知。 最后,可能需要总结一下各个指标的重要性,以及在实际项目中如何优先考虑哪些指标,帮助用户制定优化策略。确保回答结构清晰,分点说明,让用户能够逐步理解每个指标的作用和用法。</think>以下是关于 `PerformanceObserver` 的指标分步说明: --- ### **1. `PerformanceObserver` 是什么?** `PerformanceObserver` 是浏览器提供的现代性能监测 API,用于**实时监听并收集性能指标**。相比传统的 `performance.getEntries()`,它更高效且支持动态监听,适用于现代 Web 性能优化场景。 --- ### **2. 核心性能指标** 通过 `PerformanceObserver` 可监听以下关键指标: #### **(1) 加载性能类** | 指标 | 名称 | 描述 | 计算公式 | |------|------|------|----------| | **FCP**<br>(First Contentful Paint) | 首次内容绘制 | 页面首次渲染任意文本、图片或非空白 Canvas 的时间 | `FCP时间 = FCP事件时间 - navigationStart` | | **LCP**<br>(Largest Contentful Paint) | 最大内容绘制 | 页面可视区域内最大元素(如图片、标题)的渲染完成时间 | `LCP时间 = LCP元素渲染时间 - navigationStart` | | **TTFB**<br>(Time to First Byte) | 首字节时间 | 从发起请求到接收到服务器第一个字节的时间 | `TTFB = responseStart - requestStart` | #### **(2) 交互性能类** | 指标 | 名称 | 描述 | 计算公式 | |------|------|------|----------| | **FID**<br>(First Input Delay) | 首次输入延迟 | 用户首次与页面交互(点击、输入)到浏览器响应的延迟 | `FID = 处理回调开始时间 - 交互触发时间` | | **INP**<br>(Interaction to Next Paint) | 交互到下次渲染 | 用户交互(如点击)到页面下次渲染的时间(取代 FID 的新指标) | 统计所有交互的 75% 分位数 | #### **(3) 视觉稳定性类** | 指标 | 名称 | 描述 | 计算公式 | |------|------|------|----------| | **CLS**<br>(Cumulative Layout Shift) | 累积布局偏移 | 页面生命周期内意外布局偏移的累积分数 | `CLS = ∑(影响比例 * 距离比例)` | #### **(4) 资源性能类** | 指标 | 名称 | 描述 | |------|------|------| | **Resource Timing** | 资源加载性能 | 监听脚本、图片等资源的加载耗时(`duration`)和阶段时间 | --- ### **3. 监听指标的代码示例** ```javascript // 监听 LCP 和 CLS const observer = new PerformanceObserver((list) => { const entries = list.getEntries(); entries.forEach((entry) => { switch (entry.entryType) { case 'largest-contentful-paint': console.log('LCP:', entry.startTime); break; case 'layout-shift': console.log('CLS:', entry.value); break; } }); }); // 指定监听的指标类型 observer.observe({ type: ['largest-contentful-paint', 'layout-shift'], buffered: true // 捕获历史数据 }); ``` --- ### **4. 各指标的目标值(优化参考)** | 指标 | 良好阈值 | 需优化阈值 | |------|----------|------------| | **FCP** | ≤1.8秒 | >3秒 | | **LCP** | ≤2.5秒 | >4秒 | | **CLS** | ≤0.1 | >0.25 | | **FID** | ≤100ms | >300ms | | **INP** | ≤200ms | >500ms | --- ### **5. 注意事项** 1. **兼容性**: - LCP/CLS/FID 需 Chrome 77+、Firefox 88+ 支持 - INP 是 2023 年新指标,需 Chrome 109+ 2. **数据准确性**: - CLS 需在页面生命周期结束后统计最终值 - LCP 可能在页面加载后持续更新(如延迟加载图片) 3. **性能影响**: 避免过度监听,在不需要时调用 `observer.disconnect()` 释放资源。 --- ### **总结** `PerformanceObserver` 的核心指标包括 **FCP(加载速度)、LCP(主要内容可见)、CLS(视觉稳定性)、FID/INP(交互响应)**。通过实时监听这些指标,可精准量化用户体验并指导性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值