← 中文资源

简体中文版本

交互到下次绘制(INP)

INP 度量从用户交互到下一次视觉响应的延迟,覆盖页面全程所有交互并按接近最差的口径上报,是 Core Web Vitals 的响应性指标。

阅读英文原文

概念定义

响应性是逐交互的:用户行动后页面必须呈现承认该行动的帧。INP 跟踪所有交互并报告接近最高百分位的视图,让单个被忽视的流程无法藏在好看的均值后面。它取代了只看第一次交互的 First Input Delay。

工作机制

Event Timing 条目给出每次交互的输入延迟、处理时长与呈现时间。下次绘制的要求意味着足够同步地更新可见状态:先算最小反馈、其余用调度器原语推迟、处理器保持精瘦。长动画帧归因可以定位肇事代码。

使用场景

搜索输入、筛选、加购物车等高频重复交互的处理器。把处理器拆成“立即反馈”与“稍后工作”两段,中间向渲染器让步;传输成本允许时把纯计算移入 worker。

常见误区

INP 不是平均延迟:一次慢点击就能主导报告。只做防抖是把感知延迟往后挪,第一次按键仍需快速确认;处理器异步到底、直到完成才更新可见状态,INP 纹丝不动。现场数据有 28 天窗口滞后,先用合成追踪本地验证。

代码示例

public class StringBuilderManipulation {

    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder(64);

        sb.append("Hello");
        sb.append(" ");
        sb.append("World");
        System.out.println("Built: " + sb);

        sb.insert(5, " Java");
        System.out.println("After insert: " + sb);

        sb.delete(5, 10);
        System.out.println("After delete: " + sb);

        sb.replace(0, 5, "Hi");
        System.out.println("After replace: " + sb);

        sb.reverse();
        System.out.println("Reversed: " + sb);

        String csv = String.join(", ",
            "Apple", "Banana", "Cherry", "Date");
        System.out.println("CSV: " + csv);

        String formatted = String.format(
            "Name: %s, Age: %d, Score: %.2f",
            "Alice", 30, 95.5
        );
        System.out.println(formatted);

        String stripped = "  padded  ".strip();
        System.out.println("Stripped: '" + stripped + "'");
    }
}