Skip to main content

Interaction to Next Paint (INP)

Interaction to Next Paint (INP) measures how quickly your page responds to user interactions like taps, clicks, and typing. Unlike loading metrics (LCP/FCP), INP is about responsiveness after the page is visible: can the browser handle input promptly, or does it feel delayed?

Quick Summary

High INP usually comes from main-thread congestion. When heavy JavaScript (often third-party scripts, page builders, or expensive DOM work) blocks the browser, clicks and taps take longer to produce a visible response.

Core Benchmarks

Metric RatingINP Value CeilingUser Perception
Good≤ 200msImmediate, app-like responsiveness
Needs Improvement200–500msNoticeable input lag
Poor> 500msInteractions feel delayed

INP is uniquely critical for WooCommerce storefronts and Membership platforms where heavy DOM interactivity (dynamic add-to-carts, search filters, course advancement) dominates the funnel.

What Constitutes an INP Interaction

INP evaluates latency across three specific interaction paradigms:

Input MechanismAssociated WordPress ActionPerformance Threat
Clicks / tapsOpening a mobile menu or tapping "Add to Cart"Long tasks delay the UI update tied to the click handler.
Keyboard inputTyping in search bars or checkout fieldsSlow key handlers make input feel laggy.
Pointer inputOpening mega-menu dropdownsExpensive hover/state logic delays updates.

Note: Scrolling and hovering (when not tied directly to state changes) do not typically factor into INP scoring.

Common Main-Thread Bottlenecks

CategoryPrimary CulpritMechanism of Failure
Bloated JS ExecutionLong Tasks (> 50ms)Gigantic scripts monopolize the browser's single execution thread, blocking any UI updates.
Third-Party InjectionsChat widgets, Ad networks, heavy TrackersConstant background polling competes directly against the user for CPU priority.
AJAX thrashingUncached WooCommerce admin-ajax.php hitsUser actions trigger slow backend work, delaying the callback that updates the UI.
DOM Size CrushingPage builders emitting > 2,000 HTML elementsComplex document structures force the browser to recalculate massive layout mathematics on every click.

Step-by-Step Diagnosis

Profile INP Visually via DevTools

  1. Launch Chrome DevTools and navigate directly to the Performance tab.
  2. Hit the circular Record icon.
  3. Rapidly click your heaviest element (e.g., "Add to Cart" or "Filter Products").
  4. Halt the recording and scan the visualization for Long Tasks (distinctly highlighted blocks exceeding the 50ms threshold).
  5. Drill into the Bottom-Up tab to explicitly name which .js file hijacked the click event.

Defer Non-Critical JavaScript

Using an optimization plugin like Perfmatters or LiteSpeed Cache:

script-delay-configuration.txt
Delay JavaScript Execution:
Delay: analytics.js, gtag-manager
Delay: widget-chat-support.js
Delay: marketing-popup-engine.js

Do not delay (functional scripts):
checkout.js, woocommerce-gateway.js, add-to-cart.js

Eliminate AJAX Execution Stalls

If your buttons trigger backend functions, the PHP server must be equally responsive. Use WP-CLI to confirm session object caching is actively intercepting database queries.

verify-redis-caching.sh
# Confirm Redis is running to block heavy PHP overhead
redis-cli ping

Practical Scenarios

WooCommerce "Add to Cart" Freeze

Problem: INP is ~650ms. The click handler triggers admin-ajax.php, which is slow, while other scripts keep the main thread busy. Fix: Add Redis object caching to reduce repeated backend work and delay non-essential third-party scripts. INP improves to ~180ms.

Massive Elementor Layout Reflows

Problem: A mobile mega-menu takes 400ms to open (Poor INP) because it forces the browser to recalculate the bounding boxes of 3,000 nested DOM <div> elements simultaneously. Fix: Reduce DOM complexity in the header and animate with CSS transforms instead of layout-affecting properties.

Common Mistakes & Troubleshooting

MistakeExplanationSolution
Deferring checkout gateways globallyDelaying Stripe/PayPal SDKs can break payment flows.Whitelist critical checkout/payment scripts and test checkout end-to-end.
Testing only on fast hardwareHigh-end devices can hide main-thread problems that show up on mid-range phones.Validate on throttled/mobile profiles and confirm with field data (CrUX/Search Console).
Assuming "Load Time" fixes INPINP triggers precisely AFTER the page has finished initially loading.Standard HTML caching cannot fix heavy JavaScript interaction delays.

Visual Thread Pathway

What's Next