Interaction to Next Paint (INP)
INP is how long your page takes to visibly respond after someone taps, clicks or types, judged across the whole visit rather than just the first interaction.
The three phases of one interaction
INP measures the time from a tap, click or keypress until the next frame is painted. Tune the phases, then press the button to feel the delay.
360 ms Needs improvement
The main thread was busy with another task when the user tapped (third-party scripts, hydration).
Your event handlers run.
Style, layout and paint of the next frame.
Biggest phase: processing. Do the minimum in the handler, show feedback first, then yield (await scheduler.yield() or setTimeout) before the heavy work.
How INP is measured
For every click, tap and key press during a visit, the browser measures the time from the input until the next frame is painted. INP reports the worst of those interactions (for pages with many interactions, it ignores one outlier per 50 so a single hiccup doesn’t define the page). Hovering and scrolling are not counted.
INP became a Core Web Vital on 12 March 2024, replacing First Input Delay, which only measured the input delay of the first interaction and was passed by over 90% of sites on mobile.
Why you can’t get INP from a lab test
INP needs a real person interacting. Lighthouse’s standard navigation run doesn’t click anything, so PageSpeed Insights shows INP only in the field section. In the lab, Total Blocking Time is the best proxy: long main-thread tasks during load are exactly what delays early interactions. To measure INP yourself, use Chrome DevTools’ Performance panel (which shows live INP as you click) or the web-vitals library in production.
Fixes that move INP
- Yield inside long handlers. Update the UI first (spinner, pressed state), then
await scheduler.yield()before expensive work so the frame can paint. - Audit third-party scripts. Tag managers, chat widgets and A/B testing tools often run long tasks exactly when users start interacting.
- Reduce hydration cost. Frameworks that hydrate the whole page block input; use partial or lazy hydration and server components where available.
- Avoid layout thrashing. Reading
offsetHeightafter writing styles forces synchronous layout. Batch reads, then writes. - Keep the DOM lean. Style and layout cost scales with element count;
content-visibility: autoskips off-screen work. - Debounce input handlers on search boxes and filters, and move heavy computation to a Web Worker.
Check it on your own page
Field and lab numbers for mobile and desktop, in about 30 seconds.
Questions people ask
What is a good INP?
200 milliseconds or less at the 75th percentile. Above 500 ms is poor.
Why does PageSpeed Insights show no INP in the lab section?
INP requires real user interactions. Lighthouse does not interact with the page during a standard run, so it reports Total Blocking Time as the lab proxy instead.
What interactions count for INP?
Mouse clicks, taps on a touchscreen and key presses on a physical or on-screen keyboard. Hover and scroll are excluded.
What is the difference between INP and FID?
FID measured only the input delay of the first interaction. INP measures the full latency (input delay, processing and presentation) of nearly every interaction and reports one of the slowest.