Capítulo 23 de 456
Meça e reporte métricas de performance (Web Vitals) usando o hook useReportWebVitals, ou instrumente analytics/tracking globais via instrumentation-client.js|ts, executado antes do código frontend da aplicação.
instrumentation-client.js|ts: arquivo na raiz do projeto que roda antes do frontend começar a executar; ideal para inicializar analytics, error tracking ou monitoring globais.useReportWebVitals (de next/web-vitals): hook client-only ('use client') que recebe uma callback chamada para cada métrica coletada.WebVitals separado importado no root layout, para confinar o client boundary só a esse componente.console.log('Analytics initialized')
window.addEventListener('error', (event) => {
reportError(event.error)
})
'use client'
import { useReportWebVitals } from 'next/web-vitals'
export function WebVitals() {
useReportWebVitals((metric) => {
switch (metric.name) {
case 'FCP': { /* handle FCP */ }
case 'LCP': { /* handle LCP */ }
}
})
}
metric.name.useReportWebVitals((metric) => {
const body = JSON.stringify(metric)
const url = 'https://example.com/analytics'
if (navigator.sendBeacon) {
navigator.sendBeacon(url, body)
} else {
fetch(url, { body, method: 'POST', keepalive: true })
}
})
sendBeacon com fallback para fetch com keepalive.useReportWebVitals direto no root layout: como exige 'use client', isso expande o client boundary desnecessariamente; extraia para um componente WebVitals isolado.useReportWebVitals para reportar Web Vitals manualmente, ou o serviço gerenciado da Vercel para coleta/visualização automática.instrumentation-client.js|ts roda antes do app, ideal para setup global de analytics/error tracking.navigator.sendBeacon para enviar métricas, com fallback para fetch(..., { keepalive: true }).id da métrica permite construir distribuições/percentis manualmente.