R
Interview Deckreact · next.js · senior/staff
0·0·122
Performance

Web Vitals (LCP, INP, CLS)

Métricas oficiais Google para UX: Largest Contentful Paint, Interaction to Next Paint, Cumulative Layout Shift.

Web Vitals são métricas Google para experiência do usuário. Core Web Vitals: LCP (tempo até maior elemento visível < 2.5s), INP (tempo até resposta a interação < 200ms — substituiu FID em 2024), CLS (layout shift acumulado < 0.1). Afetam SEO.

Problema
Performance subjetiva é difícil de medir. Usuários percebem 'lento' diferentemente. Google penaliza no SEO sites com Web Vitals ruins.
Solução
Otimizar especificamente: LCP via image optimization e lazy load. INP via code splitting e debounce. CLS via dimensões fixas em imagens/ads. Monitorar com next/web-vitals em produção.
Tip
INP (2024) é mais rigoroso que FID. Mede TODAS as interações, não só a primeira. JavaScript pesado em handlers prejudica diretamente.
// Reportar Web Vitals em Next.js
// app/layout.tsx
export function reportWebVitals(metric) {
  // Enviar para analytics
  if (metric.label === 'web-vital') {
    sendToAnalytics({
      name: metric.name,    // LCP, INP, CLS
      value: metric.value,
      id: metric.id
    });
  }
}

// Próximo image previne CLS automaticamente
import Image from 'next/image';
<Image src="/foto.jpg" width={800} height={600} alt="..." />
Q.O que mais impacta LCP?
A.1) Imagens grandes não otimizadas. 2) Fontes web carregadas sem font-display:swap. 3) JS bloqueante no <head>. 4) CSS render-blocking. 5) Servidor lento (TTFB alto).
Q.Como melhorar INP?
A.1) Code splitting agressivo. 2) Debounce em handlers pesados. 3) startTransition para updates não-urgentes. 4) Web Workers para cálculos. 5) Remover libs grandes desnecessárias.
Q.O que causa CLS?
A.Imagens sem width/height. Anúncios injetados. Web fonts trocando. Conteúdo carregando após inicial render. Solução: reservar espaço (aspect-ratio, min-height).
41/122← →