INP Target
≤ 200ms
Google standard for responsive pages
Performance + SEO + UX Intelligence
INP measures browser responsiveness to user inputs. Learn how to locate blocking tasks, yield to the main thread, and improve interaction timing.
INP Target
≤ 200ms
Google standard for responsive pages
Input Delay Goal
< 50ms
Target timing for user input registration
Processing Budget
< 100ms
Target budget for running event handlers
In modern web performance, INP (Interaction to Next Paint) is a critical measure of how quickly a page responds to user input. This INP Optimization Guide will help you understand, measure, and improve browser responsiveness and interaction speeds for a smoother user experience.
INP captures the latency between a user interaction (click, tap, keyboard input) and the next visual update (paint) on the screen.
It reflects real-world user experience more accurately than some other metrics, especially on pages with complex JavaScript.
A lower INP means snappier interactions, fewer perceived delays, and better usability.
Reduce interaction to next paint latency below the 200ms Google threshold.
Identify and split long-running script tasks to keep the browser main thread responsive.
Ensure event handlers trigger immediate visual feedback before executing complex calculations.
Identify slow analytics or tracking scripts that block inputs during load.
Tools: Use the browser's Performance panel, Web Vitals reports, Lighthouse, and the User Timing API to measure INP.
Real-world data: Collect field data from users to understand how INP varies across devices and networks.
Target: Aim for an INP score that consistently stays low across typical user paths, not just on a single interaction.
JavaScript execution: Long tasks block the main thread, delaying response to user input.
Rendering work: Styles recalculation, layout, and paints triggered by interactions add latency.
Use browser dev tools to record CPU activity during clicks, taps, and scrolls.
Locate callback handlers that block the main thread for longer than 50ms.
Use yield patterns (like setTimeout or scheduler.yield) to break up complex tasks.
Update layout states immediately to signal input registration before running heavy code.
Debounce or throttle frequent event handlers (scroll, resize, input) to prevent queue backlogs.
Ensure third-party trackers or widgets do not load during critical user paths.
Network latency: Slow resource loading can delay script execution and event handling.
Main-thread contention: Third-party scripts, heavy frameworks, and inefficient code compete for time.
Google evaluates page responsiveness starting with input delay, tracking initial event registration times.
Ensuring handler code executes efficiently and browser layout engine paints updates quickly supports low INP.
This guide explains how to allocate your performance budget across these phases.
| INP Phase | Budget Target | Optimization Focus |
|---|---|---|
| Input Delay | < 50ms | Minimize main thread blocking and remove eager third-party scripts. |
| Processing Time | < 100ms | Yield execution, optimize event handler code. |
| Presentation Delay | < 50ms | Simplify DOM styling rules and avoid layout thrashing. |
Input handling: Debounced or poorly implemented event listeners can introduce lag.
Minimize main-thread work
This page naturally covers adjacent search intent around website performance, technical SEO, and user experience. Terms such as website speed, website performance, Core Web Vitals, Google PageSpeed, page load speed, Lighthouse score, performance optimization, and web performance are included in context to support relevance without keyword stuffing.
Each section below includes a modern flat-illustration concept with deployment-ready metadata. Use SVG for vector graphics and WebP for screenshot-style visuals. Keep file sizes compressed, include descriptive alt text, and preserve clear captions for accessibility and SEO context.
Suggested illustration: Bar chart separating input delay, processing time, and presentation delay.
Image filename: inp-guide-phases.webp
Alt text: INP timing chart showing phase allocations
Title attribute: INP Timing Breakdown
Caption: Understand the timing components from user click to browser pixel paint.
Suggested illustration: Flame chart highlighting a 150ms script blocking the main thread.
Image filename: inp-guide-long-tasks.webp
Alt text: Flame chart highlighting a 150ms script blocking the main thread
Title attribute: Main Thread Long Task
Caption: Identify long-running tasks that delay input responses.
Suggested illustration: JavaScript snippet showing scheduler.yield implementation.
Image filename: inp-guide-yield.webp
Alt text: JS snippet illustrating scheduler yield implementation
Title attribute: Thread Yield Configuration
Caption: Break up long tasks using yield patterns to allow layout paints.
Suggested illustration: Code sample showing debounced input handlers.
Image filename: inp-guide-debounce.webp
Alt text: JS code snippet illustrating debounced event handlers
Title attribute: Debounce Implementation
Caption: Debounce input events to prevent layout calculations queue backlogs.
Suggested illustration: Timeline showing active state classes applied before logic runs.
Image filename: inp-guide-feedback.webp
Alt text: Timeline showing UI updates applied before execution logic
Title attribute: Visual Feedback Timing
Caption: Provide immediate visual feedback to signal input registration.
Suggested illustration: INP dashboard showing reduced latency trend lines.
Image filename: inp-guide-summary.webp
Alt text: INP dashboard showing reduced latency trend lines
Title attribute: INP Optimization Results
Caption: Confirm responsiveness improvements by tracking rolling INP trends.
FID only measured the delay of the first interaction on a page. INP evaluates all user interactions throughout the entire session lifecycle, making it a more comprehensive responsiveness metric.
Presentation delay is the time it takes the browser to calculate page layouts and paint pixels after event handlers finish. It is often caused by a complex DOM size or layout thrashing.
Web workers let you run JavaScript code in background threads, keeping the browser main thread free to parse page layouts and respond to user inputs.
Break up long tasks into smaller chunks using requestIdleCallback or setImmediate-like patterns (or microtasks where appropriate).
Use compression, code-splitting, and lazy-loading to reduce initial JavaScript payload.
Move non-critical work off the main thread with web workers when feasible.
Optimize JavaScript event handling
Debounce or throttle high-frequency events (scroll, resize) to reduce redundant work.
Avoid heavy work in event handlers; delegate work to smaller, faster paths.
Precompute or cache values where possible to reduce repeated calculations during interaction.
Reduce rendering work per interaction
Minimize layout thrash: avoid forcing style recalculation and layout during user interactions.
Use CSS will-change for anticipated changes to reduce reflow costs.
Prefer CSS transforms and opacity changes for animations (they’re typically compositor-thread friendly).
Streamline critical path for interactions
Identify and optimize the most time-consuming user interactions; prioritize reducing latency for those paths.
Inlining critical CSS and reducing unused CSS reduces style recalculation time.
Preload essential assets and font files to avoid stalls during input.
Improve memory efficiency
Watch for memory leaks and excessive memory usage that can slow down the main thread.
Use efficient data structures and avoid creating large temporary objects in hot paths.
Optimize third-party scripts
Audit third-party widgets and analytics for impact on INP; lazy-load or defer when possible.
Remove or replace heavy libraries with lighter alternatives if feasible.
Network and resource optimizations
Use HTTP/2 or HTTP/3, enable server push where appropriate, and optimize resource timing to reduce blocking.
Prioritize critical resources; preconnect, prefetch, and preloads can speed up resource availability.
Testing and iteration
Reproduce user scenarios with low-power devices and slower networks to identify real-world INP issues.
Measure INP across a range of interactions (clicks, taps, key presses) to find bottlenecks.
Implement small, iterative changes and re-measure to confirm improvements.
[ ] Measure INP for key user journeys and interactions.
[ ] Identify long tasks (>50 ms) on the main thread around interaction points.
[ ] Decompose long tasks into smaller chunks and schedule updates efficiently.
[ ] Debounce/throttle high-frequency handlers; minimize work in handlers.
[ ] Reduce rendering and style recalculation costs during interactions.
[ ] Optimize critical rendering path: CSS, assets, and fonts.
[ ] Audit and optimize third-party scripts; defer non-critical ones.
[ ] Test on real devices and networks; iterate based on data.
A robust INP Optimization Guide centers on reducing latency between user input and the next paint by minimizing main-thread work, optimizing rendering, and prioritizing critical interactions. By focusing on browser responsiveness and interaction speeds through careful profiling and incremental improvements, you’ll deliver faster, more responsive experiences that delight users.
If you’d like, I can tailor this guide to your specific tech stack and provide a practical measurement plan and a prioritized action list.
Use our tools to record user interaction timings, locate long tasks, and optimize event handlers.