Three phases of every interaction
Input delay: the main thread is busy with something else, so your handler has to wait. Processing: your event handlers run. Presentation delay: the browser recalculates styles and layout and paints the next frame. INP is the sum of all three.
Build a slow tap, then fix it
Interaction latency 250 ms → Needs improvement
How to improve INP
- Reduce input delay: break up long tasks during load, and defer third-party scripts so the main thread is free when people start tapping.
- Shorten processing: do the visible update first, then yield (
await scheduler.yield(), orsetTimeoutwhere unsupported) before analytics, storage or network work. Debounce input handlers. - Cut presentation delay: keep the DOM small (Lighthouse warns above about 1,400 elements), avoid forcing layout inside handlers, and use
content-visibility: autofor long off-screen sections. - Framework apps: avoid re-rendering large trees on every keystroke; use transitions (React
startTransition) for non-urgent updates.
Finding your slow interactions
The field data only tells you that INP is slow. To find which interaction, record in the Chrome DevTools Performance panel while using the page on a throttled CPU, or add the web-vitals JavaScript library with attribution to log the slow element to your analytics.