Skip to main content
Comparison

Hydration vs INP (Interaction to Next Paint): What's the Difference?

By ยท Updated ยท 7 min read

Hydration and INP: Two Different Problems, One Slow Page

Hydration is the process by which a server-rendered HTML page gets JavaScript attached to it so the page becomes interactive. Until hydration completes, buttons do not fire, forms do not submit, and dynamic UI elements do not respond. It is a startup-phase event that happens once per page load.

INP (Interaction to Next Paint) is a Core Web Vital that measures the latency between any user input โ€” a click, a tap, a key press โ€” and the next visual update the browser paints in response. INP captures responsiveness throughout the entire session, not just at load time. A high INP score means the page feels sluggish every time a shopper interacts, regardless of how fast the page loaded.

The core distinction: hydration is a cause; INP is a measurement. Hydration delay can produce a bad INP score, but a page can pass hydration quickly and still post a poor INP due to heavy event handlers, long tasks on the main thread, or third-party scripts firing during interactions.

How Hydration Works and Where It Slows Things Down

During hydration, the browser downloads, parses, and executes the JavaScript bundle, then reconciles that JS with the existing DOM nodes. On a React or Next.js storefront, this means the entire component tree must be re-rendered in memory and event listeners attached before any interaction registers. On large ecommerce PDPs with carousels, variant selectors, and cart logic, hydration bundles routinely exceed several hundred kilobytes of parsed JavaScript.

The critical window is between First Contentful Paint (FCP) and Time to Interactive (TTI). The page looks ready to the shopper, but taps and clicks either queue silently or produce no response. If a shopper taps Add to Cart during this window, the interaction is dropped or delayed until hydration finishes โ€” a direct conversion risk.

Partial hydration and island architecture (used in frameworks like Astro or Fresh) address this by hydrating only the interactive components rather than the full page. This shrinks the hydration window and reduces the JavaScript that must execute before the first meaningful interaction is available.

How INP Is Measured and What Drives It

INP is defined as the single interaction latency at roughly the 98th percentile across all interactions in a session. Google's threshold for a 'good' INP is under 200 milliseconds; 200โ€“500 ms needs improvement; above 500 ms is poor. INP replaced First Input Delay (FID) as a Core Web Vital in March 2024 because FID only captured the first interaction, while INP reflects the full session.

The main contributors to a high INP are long JavaScript tasks blocking the main thread, synchronous layout and style recalculations triggered by event handlers, and render-blocking third-party scripts such as analytics, chat widgets, and ad trackers. None of these are exclusive to the hydration phase โ€” they occur throughout the page lifecycle.

INP is measured in the field via the Chrome User Experience Report (CrUX) and the web-vitals JavaScript library. Lab tools like Lighthouse and WebPageTest can simulate interactions, but field data from real users across device types and network conditions is the authoritative source for INP diagnosis.

Where Hydration and INP Directly Overlap

The overlap zone is the period immediately after a page becomes visually complete but before hydration finishes. Any interaction a user attempts in this window registers as an INP event with a long input delay, because the main thread is occupied executing the hydration workload. This is why audit tools sometimes surface high INP scores specifically on first interactions for SSR/SSG storefronts.

Streaming SSR and selective hydration (available in React 18 via Suspense boundaries) reduce this overlap by allowing parts of the UI to hydrate and become interactive before the full page finishes. Components above the fold โ€” the Add to Cart button, the image gallery โ€” can hydrate first, cutting the INP exposure window even if the full component tree is still loading.

Point-by-Point Comparison

Scope: Hydration is a one-time event at page load. INP is a continuous measurement across every interaction in a session. Fixing hydration improves the first-interaction experience; fixing INP requires attention to every event handler and rendering path.

Measurement: Hydration has no dedicated Web Vital metric โ€” its impact is inferred from TTI, Total Blocking Time (TBT), and the gap between FCP and first interaction success. INP is a first-class Core Web Vital with explicit good/needs-improvement/poor thresholds and direct influence on Google Search ranking signals.

Root causes: Hydration slowness stems from large JavaScript bundles, synchronous data fetching during mount, and client-side reconciliation cost. Poor INP stems from long tasks on the main thread, inefficient event handlers, excessive DOM size, and unoptimized third-party scripts. The two share the main thread as a constraint, but their causes and fixes differ substantially.

Fix priority: For a storefront that is newly interactive (just launched or recently migrated to a JS framework), hydration is the first bottleneck to address because it blocks all early interactions. For a mature storefront with acceptable TTI, INP diagnosis focuses on interaction-specific profiling using Chrome DevTools' Performance panel and the Event Timing API.

Actionable Steps to Improve Both Metrics Together

Start with field data. Pull CrUX data for INP and cross-reference it with lab-measured TTI and TBT for the same pages. If INP is high specifically on first interactions and TBT is also high, hydration is the likely culprit. If INP is high on repeat interactions (product filter toggles, cart quantity updates), the problem is event handler cost, not hydration.

Reduce hydration cost by code-splitting the JavaScript bundle, deferring non-critical components, and adopting progressive or partial hydration patterns. Reduce INP cost by breaking long tasks into smaller chunks using scheduler.postTask or setTimeout yielding, auditing third-party scripts for main-thread impact, and minimizing synchronous DOM reads inside click handlers.

Validate fixes in the field, not just in Lighthouse. INP field data takes 28 days to update in Google Search Console and CrUX, so run both a lab test and a real-user monitoring (RUM) instrument in parallel to confirm improvements register for actual shoppers before the next reporting cycle.

Frequently asked questions

Can a page have good INP even if hydration is slow?

Yes. If shoppers typically wait a few seconds before interacting โ€” reading product descriptions, scanning images โ€” hydration may complete before their first tap. INP is measured from when the input occurs, not from page load start, so a slow hydration that finishes before any user interaction does not directly inflate INP scores.

Does Google use hydration speed as a direct ranking signal?

No. Google's Page Experience signals use Core Web Vitals: LCP, INP, and CLS. Hydration speed is not a standalone ranking signal. It influences INP and TBT indirectly, and TBT is used in Lighthouse scoring, but only INP from field data feeds into Google's actual ranking evaluation.

What is a realistic INP target for an ecommerce product detail page?

Google classifies INP under 200 ms as 'good.' For ecommerce PDPs with variant selectors, image swaps, and cart interactions, achieving under 200 ms requires that no single event handler triggers a long task. Pages with heavy React re-renders on variant selection frequently land in the 300โ€“600 ms range before optimization.

How does partial hydration reduce INP exposure?

Partial hydration hydrates only the interactive islands of the page โ€” Add to Cart, size selectors โ€” instead of the entire component tree. The main thread is freed sooner for these critical components, so user interactions on them register and paint faster. Non-critical components like reviews or recommendation carousels hydrate later without blocking early INP events.

Which metric should a Shopify storefront operator prioritize: hydration or INP?

Shopify's Liquid-based storefronts use minimal client-side hydration, so hydration is rarely the bottleneck. INP issues on Shopify stores almost always trace to third-party app scripts โ€” review widgets, loyalty programs, chat tools โ€” that run long tasks during interactions. Audit third-party script impact using Chrome DevTools before investigating framework-level hydration patterns.

MG
Written by

Matt is the founder of RunOctopus. He built All Angles Creatures from zero to page-1 rankings in reptile feeder insects in under 60 days using exactly this method โ€” turning a hard, entrenched niche into RunOctopus's proof store for programmatic SEO and AI search citation.

Connect on LinkedIn →

See what Otto would build for your store

Free architecture preview. No card required. Five minutes.

Generate Preview →