Find what's blocking your main thread and slowing down interactions.
INP measures how quickly your page responds to user interactions like clicks, taps, and keyboard input. It captures the worst interaction latency during a page visit, reporting when the browser finally paints a response. Google replaced FID with INP as a Core Web Vital in March 2024.
Since INP requires real user interactions, lab tools like Lighthouse use Total Blocking Time (TBT) as a proxy. TBT measures how long the main thread was blocked by long tasks during page load—a strong predictor of poor INP.
JavaScript executing for >50ms blocks the main thread. Break up work with requestIdleCallback or scheduler.yield().
Analytics, chat widgets, and ads often block the main thread. Load them async or use Partytown to run in a web worker.
Framework hydration can block interactions. Use progressive hydration, islands architecture, or server components.
Too many DOM nodes slow down style calculations and layout. Keep nodes under 1,500 and virtualize long lists.
Reading and writing layout properties in a loop forces synchronous reflows. Batch DOM reads and writes.
Large JavaScript bundles take longer to parse and execute. Use code splitting, tree shaking, and lazy loading.
Interaction to Next Paint (INP) is a Core Web Vital that measures responsiveness. It tracks the delay between user interactions (clicks, taps, key presses) and the visual feedback. A good INP score is 200 milliseconds or less, indicating a responsive experience.
INP replaced FID as a Core Web Vital in March 2024. While FID only measured the first interaction, INP measures ALL interactions throughout the page lifecycle and reports the worst one. This makes INP a more comprehensive measure of real-world interactivity.
Poor INP is typically caused by: long JavaScript tasks blocking the main thread, heavy third-party scripts (analytics, ads, widgets), unoptimized event handlers, layout thrashing from DOM manipulation, and large JavaScript bundles that take time to parse and execute.
To improve INP: break long tasks into smaller chunks using yield patterns, defer non-critical JavaScript, use code splitting to reduce bundle size, optimize event handlers to avoid forced layouts, move heavy computation to web workers, and audit third-party scripts for performance impact.
Total Blocking Time (TBT) is used as a lab proxy for INP because true INP requires real user interactions. TBT measures time spent on long tasks (>50ms) during page load, which correlates with interactivity. Field data from real users provides actual INP measurements.