Performance

Interaction to Next Paint (INP)

Last updated: April 2026

INP measures how quickly your page responds to user interactions โ€” clicks, taps, and key presses. It replaced FID as a Core Web Vital in March 2024. Target: under 200ms.

What INP measures

INP tracks every interaction during a page visit and reports the worst one (excluding outliers). A high INP usually means JavaScript is blocking the main thread and preventing the browser from painting the response.

Fix 1 โ€” offload third-party scripts with Partytown

<!-- Move GA4, Meta Pixel, TikTok Pixel to a Web Worker -->
<!-- Install: npm install @builder.io/partytown -->

<!-- Change type to text/partytown -->
<script type="text/partytown" src="https://www.googletagmanager.com/gtag/js"></script>

Fix 2 โ€” break up long tasks with scheduler.yield()

async function processLargeList(items) {
  for (const item of items) {
    process(item);
    // yield to browser between items to allow painting
    await scheduler.yield();
  }
}

Fix 3 โ€” defer non-critical JavaScript

<script src="analytics.js" defer></script>
<script src="non-critical.js" async></script>

Diagnose INP

# Chrome DevTools -> Performance tab
# Record a session -> look for long tasks (red bars)
# Each long task over 50ms contributes to poor INP
📚 HttpFixer Glossary โ€” all terms โ†’