Pular para o conteúdo
upgbp

Performance Web

Core Web Vitals, hidratação e o JavaScript que você não precisava enviar.

Performance Web8 min

Push não chega no iOS: as regras da Apple para PWA instalada

ReferenceError: Can't find variable: Notification

No Safari móvel a API de notificação nem existe até o site ser adicionado à tela de início. As cinco condições, e como detectar cada uma.

  • iOS 18
  • Safari 18
  • Next.js 15.3
  • web-push 3.6
Performance Web8 min

Web Push do zero: Service Worker, VAPID e o pedido de permissão

DOMException: Registration failed - permission denied

A implementação inteira, do registro do worker ao envio. E o erro de UX que queima a permissão do usuário para sempre, sem possibilidade de desfazer.

  • Next.js 15.3
  • web-push 3.6
  • Chrome 140
  • Firefox 142
Performance Web8 min

INP acima de 200 ms: achando a long task que trava o clique

O INP mede o clique mais lento da sessão, não a média. Como achar exatamente qual interação e qual linha de código estão travando a thread principal.

  • Next.js 15.3
  • React 19.1
  • web-vitals 5
  • Chrome DevTools
Performance Web9 min

O 'use client' que dobrou o bundle: onde fica a fronteira

A diretiva não marca um arquivo, marca uma fronteira. Tudo que ela importa desce junto para o navegador — inclusive o que você jurava ser código de servidor.

  • Next.js 15.3
  • React 19.1
  • @next/bundle-analyzer 15.3
Performance Web9 min

Hydration mismatch no App Router: as 5 causas reais

Hydration failed because the server rendered HTML didn't match the client.

O erro de hidratação do React quase sempre vem de uma destas cinco origens. Como identificar qual é a sua em minutos, em vez de tentar no escuro.

  • Next.js 15.3
  • React 19.1
  • Node 22
Performance Web7 min

Por que este blog sobre Next.js roda em Astro

A escolha não foi ideológica: um site de conteúdo tem exigências diferentes das de um aplicativo. Os números deste site e onde o Next.js ganharia.

  • Astro 7.2
  • Tailwind CSS 4.3
  • Cloudflare Pages
  • Node 22