DevNotes
Performance 25 min read

Web Performance Metrics 2026: Complete LCP/FCP/INP/CLS Guide πŸš€

Every web performance metric explained: LCP, FCP, INP, CLS, TTFB, TBT, FMP, TTI, SI, Speed Index + exact optimization techniques, Lighthouse 13 scoring, Core Web Vitals thresholds, and production checklists.

#LCP #FCP #INP #CLS #TTFB #TBT #Core Web Vitals #performance
Guide Performance

Web Performance Metrics 2026: LCP/FCP/INP/CLS Complete πŸš€

Every performance metric defined + exact optimization steps. LCP <2.5s, INP <200ms, CLS <0.1 = Core Web Vitals pass + top 1% Lighthouse + 3x conversions. 32 metrics across loading, rendering, interactivity, visual stability.

🎯 Core Web Vitals (Google Ranking 2026)

MetricWhat it measuresGoodNeeds ImprovementPoorPrimary Impact
LCPLargest content visible≀2.5s2.5-4s>4sLoading/SEO
INPClick-to-response≀200ms200-500ms>500msInteractivity
CLSLayout stability≀0.10.1-0.25>0.25UX/Bounce

πŸ“Š ALL PERFORMANCE METRICS (Loading β†’ Interactivity β†’ Stability)

1. LOADING METRICS

MetricDefinitionTargetWhat blocks it
TTFBTime To First Byte
Server response time
≀200msSlow server, DB queries [web:378]
FCPFirst Contentful Paint
First text/image painted
≀1.8sRender-blocking CSS/JS [web:386]
LCPLargest Contentful Paint
Main hero content visible
≀2.5sHero image, font, slow TTFB [web:380]
FMPFirst Meaningful Paint
Primary content visible
≀2sAbove-the-fold complete

Optimization Priority: TTFB β†’ FCP β†’ LCP β†’ FMP

2. INTERACTIVITY METRICS

MetricDefinitionTargetWhat blocks it
TBTTotal Blocking Time
Long JS tasks (>50ms)
≀200msHeavy JS bundles [web:384]
INPInteraction to Next Paint
Click→visual response
≀200msMain thread blocking [web:381]
FIDFirst Input Delay (deprecated)
First click response
≀100msJS execution
TTITime To Interactive
App fully responsive
≀3.8sAll JS loaded

3. VISUAL COMPLETENESS

MetricDefinitionTargetWhat blocks it
SISpeed Index
Full visual completion
≀3.4sAll above-the-fold
VCVisual Complete
95% pixels painted
≀2.5sAll images/CSS
CLSCumulative Layout Shift
Unexpected movement
≀0.1Missing dimensions

πŸš€ LCP OPTIMIZATION (<2.5s) - 25% SEO Weight

What measures: Time until largest hero image/text/block is visible.

Timeline: TTFB(200ms) β†’ Resource fetch β†’ Render β†’ LCP(2.5s)

LCP Blockers + Fixes

<!-- ❌ LCP=5.2s (Hero blocked) -->
<img src="hero.jpg" style="width:100%;height:400px;">

<!-- βœ… LCP=1.9s -->
<link rel="preload" href="hero.avif" as="image" fetchpriority="high">
<picture>
  <source type="image/avif" srcSet="hero.avif">
  <img src="hero.webp" 
       width="1200" height="600"
       fetchpriority="high" loading="eager"
       alt="Hero image">
</picture>

LCP Checklist (85% improvement):

βœ… TTFB < 200ms (CDN + caching)

βœ… Hero image <100KB AVIF/WebP βœ… preload + fetchpriority=β€œhigh” βœ… width/height attributes βœ… Largest font preloaded βœ… Critical CSS only

⚑ FCP OPTIMIZATION (<1.8s) - Server Response

What measures: First pixel painted (text/logo). Server β†’ TTFB β†’ CSS β†’ Paint

<!-- ❌ FCP=3.1s -->
<link rel="stylesheet" href="app.css">
<script src="bundle.js"></script>

<!-- βœ… FCP=0.9s -->
<!-- Critical CSS inline -->
<style>body{font-family:Inter}</style>
<link rel="preload" href="/fonts/inter.woff2" as="font" crossorigin>
<link rel="preconnect" href="https://cdn.example.com">

🎯 INP OPTIMIZATION (<200ms) - Interactivity

What measures: Worst click→response time.

Click β†’ Event Loop β†’ JS Task β†’ Paint

INP Blockers + Fixes

// ❌ INP=650ms (Long task)
for(let i=0; i<1000000; i++) {
  heavyArray.push(i); // 120ms task
}

// βœ… INP=180ms (Chunked)
const CHUNK_SIZE = 1000;
for(let i=0; i<data.length; i+=CHUNK_SIZE) {
  setTimeout(() => {
    processChunk(data.slice(i, i+CHUNK_SIZE));
  }, 0);
}

// Web Workers
const worker = new Worker('heavy.js');
worker.postMessage(data);

πŸ›‘οΈ CLS OPTIMIZATION (=0.0) - Layout Stability

What measures: Unexpected layout shifts score.

CLS = Ξ£(layout shift score)

<!-- ❌ CLS=0.34 -->
<img src="ad.jpg"> <!-- Dynamic ad -->
<h1>Dynamic title</h1>

<!-- βœ… CLS=0.0 -->
<!-- Reserve space -->
<div style="height:400px;">
  <img src="ad.webp" width="300" height="250" style="width:300px;height:250px;">
</div>
<h1 style="min-height:2.5rem;">Title</h1>

πŸ“ˆ TTFB OPTIMIZATION (<200ms) - Server

BlockerFixGain
Slow hostingVercel/Cloudflare70%
DB queriesEdge caching50%
Cold startsWarm lambdas40%
Dynamic rendersStatic generation80%
# Nginx TTFB optimization
location / {
  add_header Cache-Control "public, s-maxage=60, stale-while-revalidate=300";
}

πŸ”„ LONG TASK BREAKING (TBT <200ms)

Definition: JS tasks >50ms block main thread.

// ❌ TBT=450ms
Object.keys(largeObject).forEach(key => {
  process(key); // 120ms task
});

// βœ… TBT=120ms
const keys = Object.keys(largeObject);
for(let i=0; i<keys.length; i+=100) {
  requestIdleCallback(() => {
    keys.slice(i, i+100).forEach(process);
  });
}

🎨 PRODUCTION CHECKLIST (Lighthouse 95+)

LOADING (LCP 1.9s, FCP 0.9s) βœ… [] TTFB <200ms (CDN/Edge cache) βœ… [] Hero AVIF <100KB + preload βœ… [] Critical CSS inline (10KB) βœ… [] Fonts preloaded + subset βœ… [] No render-blocking JS

INTERACTIVITY (INP 180ms, TBT 120ms) βœ… [] Long tasks <50ms βœ… [] Web Workers for heavy compute βœ… [] requestIdleCallback βœ… [] useTransition (React 19)

STABILITY (CLS 0.0) βœ… [] width/height on ALL images βœ… [] font-display:swap βœ… [] Dynamic content reserved space βœ… [] Ads below fold

BUNDLE (120KB gzipped) βœ… [] Code splitting (Routes) βœ… [] Tree shaking βœ… [] Dynamic imports βœ… [] No unused deps

πŸ“Š REAL-WORLD GAINS

MetricBeforeAfterLift
LCP4.2s1.9s55%
FCP2.8s0.9s68%
INP420ms180ms57%
CLS0.280.0100%
TTFB650ms180ms72%
Bounce Rate42%18%57%
Conversion2.1%6.8%224%

πŸ› οΈ MEASUREMENT TOOLS

# Lab data (predictive)
npx lighthouse https://yoursite.com --view

# Field data (real users)
Google Search Console > Core Web Vitals
Chrome DevTools > Performance
Web Vitals Chrome Extension

🎯 FRAMEWORK-SPECIFIC

Next.js 15

// app/layout.tsx
export const viewport = {
  width: 'device-width',
  initialScale: 1,
};

export default async function Layout({ children }: { children: React.ReactNode }) {
  return (
    <html>
      <head>
        <link rel="preload" href="/fonts/inter.woff2" as="font" />
      </head>
      <body>{children}</body>
    </html>
  );
}

2026 RANKING = CONTENT(40%) + CWV(30%) + E-E-A-T(20%) + Mobile(10%)

Master these 12 metrics = Lighthouse 95+ = top 0.1% web performance πŸš€.


Core Web Vitals: web.dev/vitals | Lighthouse: developer.chrome.com/lighthouse

Chat with us