Uma landing page rápida pode ficar lenta aos poucos. Entra uma fonte. Depois um pixel, um vídeo, outra biblioteca e uma imagem maior. Nenhuma mudança parece grave isoladamente. A soma chega à produção sem que o time tenha definido quanto a página pode gastar.
Um orçamento de performance é um conjunto de limites verificáveis. Ele diz quanto JavaScript, imagem e trabalho de terceiros uma rota pode enviar, além de quão cedo o conteúdo precisa aparecer e responder.
O orçamento não escolhe produto no lugar da equipe. Ele torna o custo visível antes da republicação.
Comece pela rota e pela tarefa principal
Não use um único limite para todo o site. Uma página de campanha, uma área autenticada e uma galeria têm conteúdo e interações diferentes.
Para cada rota importante, anote:
rota:tarefa principal:elemento de LCP esperado:primeira interação esperada:recursos obrigatórios:integrações opcionais:dispositivo e rede prioritários:Na landing page, a tarefa pode ser entender a oferta e enviar um formulário. Nesse caso, título, prova, CTA e formulário têm prioridade. Chat, mapa e vídeo podem esperar uma intenção real.
O guia de Core Web Vitals mostra como medir LCP, INP e CLS na URL publicada antes de definir limites.
Meça uma linha de base reproduzível
Gere uma build limpa e escolha as rotas que representam o produto. Rode pelo menos três medições por rota com a mesma versão de navegador, viewport, CPU e rede.
Registre a mediana de:
- LCP;
- CLS;
- Total Blocking Time no laboratório;
- bytes de JavaScript, CSS, imagens e fontes;
- quantidade de requisições;
- origens e requisições de terceiros;
- maior cadeia crítica;
- elemento e tamanho do LCP.
Depois consulte dados reais quando houver tráfego suficiente. O fluxo de análise de uma landing page publicada inclui Core Web Vitals agregados do Site. Uma janela vazia em um Site novo significa apenas que a agregação ainda não produziu dados.
Laboratório e campo respondem perguntas diferentes. O teste local mantém condições controladas e cabe no PR. Os dados reais mostram aparelhos, redes, rotas e interações que o laboratório não reproduziu.
Escolha poucos limites que levem a uma decisão
Um orçamento com vinte métricas vira um relatório ignorado. Comece com limites que indiquem qual recurso revisar.
| Limite | O que protege | Ação quando estoura |
|---|---|---|
| LCP em laboratório | conteúdo principal | revisar descoberta, prioridade e tamanho do elemento |
| CLS em laboratório | estabilidade visual | reservar espaço e evitar inserções tardias |
| JavaScript transferido | rede, parse e execução | remover código, dividir rota ou adiar função |
| imagens transferidas | rede e LCP | redimensionar, converter ou aplicar seleção responsiva |
| terceiros | rede e CPU fora do seu controle | remover, adiar ou limitar por rota |
| requisições críticas | tempo de descoberta | encurtar a cadeia de iniciadores |
A definição do web.dev para performance budget inclui tamanho, quantidade de requests e tempos percebidos. Use essa divisão como estrutura, não copie números de outro projeto.
Defina o limite a partir do que a página precisa fazer
O primeiro orçamento de uma página existente pode usar a linha de base como teto provisório. Isso bloqueia crescimento enquanto o time prepara uma redução.
Exemplo:
Página /campanha em celular simulado
LCP de laboratório: aviso acima de 2.500 msCLS de laboratório: erro acima de 0,10JavaScript transferido: erro acima de 180 KBimagens transferidas: erro acima de 650 KBscripts de terceiros: aviso acima de 3 requests antes do LCPcadeia crítica: aviso acima de 3 descobertas sequenciaisEsses valores são um exemplo de formato, não uma recomendação universal. Uma rota que hoje transfere 900 KB de JavaScript não deve adotar 180 KB no CI e permanecer vermelha por meses. Comece com um teto que passe na versão revisada, crie uma meta de redução separada e aperte o limite quando a correção entrar.
Para Core Web Vitals de campo, os patamares documentados pelo web.dev consideram boa experiência LCP de até 2,5 segundos, INP de até 200 milissegundos e CLS de até 0,1 no percentil 75. Esses valores ajudam a definir o destino. A medição de laboratório não substitui esse percentil nem reproduz INP real.
Não use a nota geral como único orçamento
Uma nota 90 no Lighthouse é fácil de comunicar, mas pode esconder a origem da regressão. Os pesos e as curvas da nota mudam entre versões da ferramenta. A própria documentação de pontuação do Lighthouse alerta para variações de ambiente e para a distribuição dos resultados.
Mantenha a nota como sinal. Aplique limites diretos para os custos que a equipe consegue corrigir:
- bytes de script;
- bytes de imagem;
- quantidade de fontes;
- terceiros;
- LCP;
- CLS;
- Total Blocking Time.
Uma nota que continua verde não justifica adicionar 100 KB de JavaScript sem função clara.
Separe aviso de bloqueio
Nem todo limite precisa falhar o PR no primeiro dia.
Use aviso quando:
- a métrica tem variação alta;
- o time ainda está confirmando a linha de base;
- um fornecedor externo introduz ruído;
- a rota tem poucos dados reais;
- a correção precisa de uma decisão de produto.
Use erro quando:
- o valor é determinístico, como bytes gerados;
- a regressão é grande o bastante para superar o ruído;
- o time já validou o teste em execuções repetidas;
- existe uma ação clara para voltar ao limite.
Um gate que falha sem explicar o delta ensina a equipe a ignorá-lo. Mostre valor anterior, valor atual, teto, rota e recurso responsável.
Aplique limites de recursos no Lighthouse CI
O Lighthouse CI aceita assertions para tamanhos e contagens. Um arquivo de configuração pode começar assim:
{ "ci": { "collect": { "numberOfRuns": 5, "url": ["http://localhost:4321/", "http://localhost:4321/campanha"] }, "assert": { "assertions": { "largest-contentful-paint": [ "warn", { "maxNumericValue": 2500, "aggregationMethod": "median" } ], "cumulative-layout-shift": [ "error", { "maxNumericValue": 0.1, "aggregationMethod": "median" } ], "resource-summary:script:size": ["error", { "maxNumericValue": 184320 }], "resource-summary:image:size": ["error", { "maxNumericValue": 665600 }], "resource-summary:third-party:count": ["warn", { "maxNumericValue": 3 }] } } }}Na configuração de assertions, maxNumericValue usa bytes para tamanho de recursos. Um budgets.json usa kilobytes. A documentação atual do Lighthouse CI chama essa diferença de unidade explicitamente.
Rode várias coletas e escolha uma agregação declarada. Mediana costuma ser mais útil que a melhor execução. Não altere para optimistic apenas para fazer o gate passar.
Use limites diferentes por rota
A home pode ter uma imagem editorial grande. A página de preços pode ser quase toda texto. A campanha pode precisar de um único script de experimento por período.
O Lighthouse CI aceita assertMatrix para aplicar assertions por padrão de URL. Mesmo sem essa ferramenta, mantenha uma tabela versionada:
| Rota | JS | Imagens | Terceiros | LCP lab | CLS lab |
|---|---|---|---|---|---|
/ |
180 KB | 650 KB | 3 | 2.500 ms | 0,10 |
/precos |
150 KB | 300 KB | 2 | 2.200 ms | 0,05 |
/campanha |
130 KB | 500 KB | 2 | 2.300 ms | 0,10 |
Os números continuam sendo exemplos. Meça a sua página e explique por que cada rota recebe um teto diferente.
Faça o agente mostrar a troca
Quando uma alteração ultrapassa o orçamento, peça um diagnóstico antes de aceitar a exceção.
Recurso novo: player de vídeoCusto: +82 KB de JavaScript, +6 requests, +1 origemRota: /campanhaBenefício esperado: demonstração após cliqueAlternativa: poster e fachada até interaçãoDecisão: usar fachada e manter o orçamento inicialO artigo sobre scripts de terceiros mostra como medir por fornecedor. O guia de vídeos e iframes mostra como evitar que um player opcional consuma o carregamento inicial.
Uma exceção válida precisa de responsável, prazo e novo valor. Sem isso, o teto só cresce.
Meça o pacote e a URL publicada
O build informa tamanho de arquivos. A URL revela compressão, cache, redirects, terceiros e ordem real de carregamento. Use os dois.
Antes da publicação:
- gere o pacote limpo;
- rode os limites determinísticos de tamanho;
- sirva a build no mesmo modo usado pelo CI;
- execute as medições repetidas;
- compare o delta com a base da branch;
- publique apenas se o resultado passar ou tiver exceção registrada.
Depois da publicação:
- acompanhe
deploy_statusaté sucesso; - abra a URL padrão e o domínio próprio;
- confirme headers, compressão e cache;
- rode uma medição de fumaça na rota principal;
- acompanhe dados reais quando a janela tiver volume suficiente.
A documentação de Publicação descreve o deploy por Version. O guia de republicação sem assets antigos ajuda a conferir se HTML e arquivos pertencem à mesma versão.
Revise o orçamento sem apagar o histórico
Um orçamento não fica congelado. A página muda, os navegadores mudam e a equipe aprende a medir melhor.
Ao revisar um teto, registre:
- valor anterior;
- valor novo;
- motivo;
- rota afetada;
- medição usada;
- responsável;
- data para nova revisão.
Reduza o limite quando uma otimização comprovada entrar. Aumente apenas quando a função nova justificar o custo e a equipe tiver testado uma alternativa menor.
Prompt para criar o orçamento
Defina um orçamento de performance para estas rotas sem publicar ainda.
Build e URL atual: [caminhos e URL]Rotas e tarefas principais: [lista]Público e dispositivo prioritário: [contexto]
1. Rode cinco medições comparáveis por rota.2. Registre LCP, CLS, TBT, bytes por tipo, requests e terceiros.3. Separe métricas de laboratório, dados reais e valores determinísticos.4. Proponha poucos limites com aviso ou erro e explique cada ação.5. Configure gates por rota e mostre unidades e agregação.6. Compare a branch com a linha de base.7. Não afrouxe limites para esconder uma regressão.O orçamento funciona quando muda uma decisão antes do deploy. Se ele só produz uma tabela depois que a página ficou lenta, chegou tarde.
