...

Pós-compressão: Brotli vs Gzip – qual formato realmente acelera os sites

Em brotli vs gzip Decido qual formato vou utilizar com base em efeitos mensuráveis no TTFB, volume de dados e Core Web Vitals. A partir de benchmarks fiáveis, sei que: Pauzinho de pão Comprime HTML, CSS e JS em média 15–21 % mais e descomprime no navegador em muitos casos mais rapidamente, em alguns casos até 64 % [1][4][5].

Pontos centrais

  • taxa de compressão: O Brotli reduz os recursos de texto em média 15–21 % mais do que o Gzip – perceptível para FCP/LCP [1][4][5].
  • Cenários: Recursos estáticos na borda com Brotli, respostas dinâmicas frequentemente com Gzip ou nível moderado de Brotli.
  • níveis de desempenho: O Brotli nível 4 é frequentemente mais rápido e eficiente do que o Gzip nível 6; níveis elevados apenas em pré-compressão [4][5].
  • Hospedagem: A hospedagem de compressão eficiente com HTTP/2/3, cache e CDN reduz significativamente as viagens de ida e volta [3][5][8].
  • Monitorização: Verifique sempre as alterações através do RUM e de testes sintéticos sobre FCP, LCP e TTFB.

Compatibilidade, cabeçalhos e chaves de cache

Para que o Brotli ou o Gzip funcionem de forma estável, presto atenção à limpeza Negociação de conteúdo. O navegador envia Aceitar codificação, o servidor responde com Codificação de conteúdo (br, gzip ou identity). Importante: Vary: Aceitar codificação é necessário em todas as respostas comprimidas, para que os caches e CDNs separem corretamente as diferentes variantes. Caso contrário, o cache fornece um ficheiro Brotli a um cliente que só compreende Gzip. Ao nível do CDN, verifico se Aceitar codificação Parte do Chaves de cache e que os nós de borda podem armazenar variantes .br e .gz.

Além disso, considero que um robusto Recuo Pronto: se um cliente não aceita Brotli, recebe Gzip; se não aceita nada, recebe sem compressão. Para proxies locais ou dispositivos mais antigos, esse caminho vale ouro – e não me custa tempo no dia a dia, se a cadeia Vary estiver correta. Trabalho conscientemente com ETags: ETags fortes por variante ou um hash que inclui a forma de compressão evita erros. 304 Não modificado Resultados entre br/gz.

O que a pós-compressão realmente traz para o dia a dia

Eficiente Compressão Não só reduz a transmissão, como também estabiliza os tempos de carregamento em condições de qualidade de rede móvel instável. Quanto menores forem os HTML, CSS, JavaScript e JSON, mais rapidamente os primeiros conteúdos serão exibidos, porque o navegador terá menos bytes para obter e descompactar. Por isso, dou prioridade aos recursos de texto, pois imagens e vídeos beneficiam mais de seus próprios codecs do que da compressão HTTP. Em hosts bem configurados, o tempo até o primeiro byte pode ser reduzido visivelmente, pois o tempo de CPU e o tempo de espera da rede são melhor equilibrados. Quem limpa seu pipeline ganha duas vezes: menos largura de banda para o Dados e menos reflows graças a estilos e scripts disponíveis antecipadamente.

Que conteúdos comprimir – e quais não

Eu comprimo de forma direcionada baseado em texto Tipos: text/html, text/css, application/javascript, application/json, application/xml, image/svg+xml, application/manifest+json e similares. Para formatos binários já comprimidos (imagens, vídeos, PDFs em muitos casos, WOFF2), poupo a CPU: o efeito é mínimo e a latência pode aumentar. Também importante: uma valor limiteRegra (por exemplo, a partir de 1024–2048 bytes), para que respostas minúsculas sem ganho perceptível não sejam desnecessariamente atrasadas. No CI, verifico regularmente o tipo de conteúdo e o tamanho para detectar configurações incorretas antecipadamente.

Brotli vs Gzip: números que alteram os tempos de carregamento

Comprimido em testes Pauzinho de pão HTML cerca de 21 %, JavaScript cerca de 14 % e CSS cerca de 17 % mais forte que Gzip [1][4]. Outras medições confirmam cerca de 20 % de vantagem em relação ao Deflate, o processo por trás do Gzip [5][6]. Essa diferença torna as páginas visivelmente mais rápidas, especialmente com muitos recursos de texto e em dispositivos móveis com largura de banda variável. Além disso, a descompressão no navegador é, em muitos casos, mais rápida com o Brotli; foram medidos tempos de descompactação até 64 % mais rápidos no front-end [1]. Em suma, melhores Taxas de compressão e a rápida descompactação tornam o caminho crítico até ao conteúdo visível bastante claro.

Pensando em termos de rede: primeiros RTTs e CWV

Muitos ganhos tangíveis surgem porque respostas mais curtas se encaixam melhor nas primeiras Voos TCP/QUIC caber. Se o HTML inicial couber em um ou dois pacotes a menos graças ao Brotli, o tempo até o FCP/LCP e o bloqueio para recursos críticos de renderização serão reduzidos. Com o HTTP/3, as ligações também se beneficiam de uma menor Chefe de filaBloqueio. Em redes móveis com uma taxa de perda de pacotes mais elevada, as transferências mais pequenas suavizam o JitterCurva – Os dados RUM mostram então menos valores atípicos para cima. Para mim, isso é um motivo para reduzir consistentemente o primeiro HTML e o CSS crítico [3][5][8].

Quando utilizar o Brotli – e quando utilizar o Gzip

Para estático Para ativos como HTML, CSS, JS, SVG e WOFF2, utilizo Brotli com nível elevado, pré-comprimido na compilação ou diretamente na borda do CDN. Os ficheiros ficam na cache e são entregues milhares de vezes sem custos de CPU. Para respostas muito dinâmicas – visualizações HTML personalizadas, API JSON, pesquisa – geralmente utilizo Gzip ou Brotli com nível moderado, para que o servidor transmita a resposta rapidamente. A curva TTFB continua a ser decisiva: se ela disparar, reduzo o nível ou entrego conteúdos parciais desbloqueados mais cedo. Assim, mantenho Tempos de resposta baixo, sem perder as vantagens dos ficheiros compactos.

Escolher corretamente os níveis de qualidade (nível)

Começo de forma pragmática: Brotli nível 4 para on-the-fly, níveis 9-11 apenas para pré-compressão; Gzip nível 6 como ponto de partida sólido [4][5][6]. Se a carga da CPU aumentar durante os picos de tráfego, primeiro reduzo o nível Brotli e verifico se o cabeçalho de cache e o CDN Edge estão a funcionar corretamente. Muitas vezes, um pequeno ajuste no Cache mais do que um nível de compressão elevado. Em medições, Brotli apresentou frequentemente melhores tamanhos de ficheiro no nível 4 com latência semelhante ou inferior ao Gzip nível 6 [4]. Quem mede as iterações com precisão, chega rapidamente a uma configuração que Servidor preserva e, ainda assim, economiza dados de forma significativa.

Configuração: Nginx, Apache, Caddy – predefinições seguras

Aposte em predefinições simples e verificáveis. Para o Nginx, isso significa: usar variantes estáticas, moderadas em tempo real, tipos corretos, tamanhos mínimos razoáveis, definir Vary de forma clara.

# Nginx (exemplo) brotli on; brotli_comp_level 4; brotli_static on; brotli_types text/html text/plain text/css application/javascript application/json application/xml image/svg+xml;

gzip on; gzip_comp_level 6; gzip_min_length 1024; gzip_static on; gzip_vary on; gzip_types text/plain text/css application/javascript application/json application/xml image/svg+xml; add_header Vary "Accept-Encoding" always;

No Apache, eu ativo mod_brotli e mod_deflate com responsabilidades claras: Brotli em primeiro lugar, Deflate como alternativa. Os tamanhos mínimos e os tipos permanecem consistentes.

# Apache (exemplo)  AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css application/javascript application/json application/xml image/svg+xml BrotliCompressionQuality 4 BrotliWindowSize 22
  AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/json application/xml image/svg+xml DeflateCompressionLevel 6  Header append Vary "Accept-Encoding"

Os guardas continuam a ser importantes: sem compressão para meios já comprimidos, testes para compressão dupla e proxies. sem transformação evitar, caso os caches suprimam variantes. Verifico com curl: -H „Accept-Encoding: br,gzip“ e -I, se Codificação de conteúdo, Variar e os tamanhos são plausíveis.

Pré-comprimir recursos estáticos: Build, Edge, Cache

Para front-ends com muitos pacotes, eu pré-comprimo Activos na compilação e coloque variantes .br/.gz ao lado dos originais, para que o Nginx ou um CDN forneça diretamente a versão adequada. Bibliotecas grandes, classes CSS repetidas e código de framework beneficiam-se acima da média, porque o Brotli usa uma janela de pesquisa maior e um dicionário integrado [2][9]. Caches legítimos de longo prazo (imutáveis + controle de versão) reduzem ainda mais as solicitações e o trabalho de descompactação. Quem deseja entregar globalmente, combina isso com um inteligente Otimização de CDN, para que os nós Edge próximos do utilizador forneçam os dados. Assim, ficheiros mais pequenos e proximidade geográfica garantem, em conjunto, custos mais baixos. Latências.

Controlar respostas dinâmicas e TTFB

No caso de HTML-As visualizações contam mais com streaming e baixa latência do que com os últimos pontos percentuais do tamanho do ficheiro. Eu comprimo em tempo real com Gzip ou Brotli em um nível moderado, verifico o TTFB e a CPU por trabalhador e aumento o nível apenas quando há reservas suficientes. Uma sequência inteligente de modelos envia os primeiros bytes antecipadamente para que o navegador possa começar a renderizar. Além disso, estabiliza Armazenamento em cache do lado do servidor o tempo de resposta, porque os fragmentos recorrentes não são recalculados todas as vezes. Esta configuração mantém Dicas sem prejudicar a experiência do utilizador.

Entrega correta de streaming e conteúdos parciais

Especialmente nas visualizações HTML, eu confio em rios precoces: CSS inline crítico, secção head inicial, depois streaming rápido do corpo. A compressão não deve atrasar isso. Por isso, fico atento aos tamanhos dos buffers e pontos de flush e evito níveis Brotli complexos em tempo real. O Gzip nível 6 ou o Brotli nível 3–4 oferecem um bom equilíbrio aqui. Decisivo: o servidor não deve esperar até que „tudo esteja pronto“, mas enviar em blocos significativos – isso melhora o FCP e a capacidade de resposta percebida.

HTTP/2 e HTTP/3: combinando compressão de forma eficaz

Multiplexação sob HTTP/2 O QUIC e o HTTP/3 funcionam perfeitamente com ficheiros menores, pois mais objetos fluem em paralelo e com menos bloqueio de cabeça de linha. Especialmente em redes móveis, RTTs reduzidos e menor perda de pacotes no HTTP/3 proporcionam estabilidade adicional. Por isso, verifico sempre se o host suporta ambos os protocolos com a priorização correta e a substituição do servidor push (Early Hints). Quem comparar a configuração encontrará detalhes úteis no compacto HTTP/3 vs HTTP/2 Visão geral. Em combinação com o Brotli para ficheiros estáticos e o Gzip para HTML ao vivo, o tempo de espera e Jitter percetível.

Estratégias de CDN: chaves de cache, stale e pré-compressão de borda

No CDN, eu me certifico de que .br e .gz As variantes são armazenadas em cache separadamente e os nós de borda preferencialmente entregam os artefactos já pré-comprimidos. Eu ativo obsoleto-enquanto-revalidado e stale-if-error, para que picos ou falhas no backend não fiquem visíveis. Para rotas API, costumo deixar o CDN comprimir ao vivo, mas com níveis conservadores. Importante: cabeçalhos como Controlo da cache, ETag, Variar e Codificação de conteúdo devem formar uma imagem coerente – caso contrário, surgem ondas de cache erradas que pioram o TTFB.

Utilizadores móveis: poupar largura de banda, poupar bateria

No smartphone, cada centavo economizado conta Byte diretamente no tempo de carregamento e no consumo de energia. Os ficheiros Brotli 15–21 % menores reduzem o tempo de transferência e a atividade de rádio; quando a largura de banda é limitada, a redução é particularmente notável [4][5]. Cargas úteis menores também estabilizam as métricas FCP e LCP, porque os recursos críticos para renderização chegam mais rapidamente. Também presto atenção ao CSS crítico limpo e tomo uma decisão clara sobre quais scripts podem realmente bloquear a renderização. No final, as taxas de rejeição diminuem e as interações começam mais cedo, porque o navegador fica menos Carga carrega.

Fluxo de trabalho da equipa, CI e orçamentos

Eu faço compressão para um Tema Pipeline: As etapas de compilação geram .br/.gz, a CI mede o tamanho dos artefactos e compara com os orçamentos. Um pedido de pull que aumenta os ativos críticos em 30 % é imediatamente notado. Além disso, eu armazeno testes de fumo (verificações curl em codificação de conteúdo, Vary, comparação de tamanho) para que os erros não sejam notados apenas na produção. Eu executo rollouts como Canário: Divida o tráfego em novos níveis, observe as métricas RUM e do servidor e, em seguida, implemente totalmente. Alavancas de reversão claras (sinalizadores de funcionalidade, mapa Nginx para níveis de qualidade) me dão segurança durante picos de tráfego.

Tabela comparativa: pontos fortes num relance

A seguinte visão geral ajuda-me nas conversas com Equipas, tomar decisões rápidas. Não substitui um teste na sua própria pilha, mas mostra onde estão os maiores efeitos. Eu avalio sempre a combinação entre tamanho do ficheiro, perfil da CPU e impacto no utilizador. Quem se concentra claramente em recursos de texto estáticos ficará quase sempre satisfeito com o Brotli. Para aplicações muito dinâmicas, o Gzip continua a ser uma opção fiável. Todo-o-terreno.

Critério Pauzinho de pão Gzip Efeito prático
taxa de compressão ~15–21 % menor em HTML/CSS/JS [1][4][5] Bom, mas maior do que Brotli Menos bytes, mais rápido Transmissão
Descompressão no navegador Muitas vezes mais rápido; até 64 % em testes [1] Velocidade sólida Início mais rápido visível Conteúdo
Perfil da CPU em tempo real Níveis moderados rápidos; níveis elevados dispendiosos Níveis médios muito rápidos Selecione o nível conservador para Live-HTML
Melhores utilizações Ativos estáticos, pré-compressão, cache de borda Respostas dinâmicas, streams, APIs Separar configurações por tipo de recurso
Etapas típicas 4 (em tempo real), 9–11 (pré) [4][5][6] 6 como ponto de partida Equilíbrio entre tamanho e TTFB
Compatibilidade Amplamente suportado, fallback possível [3][5][6] Disponível em quase todos os locais Sem obstáculos reais nas pilhas modernas

Monitorização e testes: como medir o progresso

Primeiro, instalo claramente Métricas: TTFB, FCP, LCP, bytes/solicitação e CPU por trabalhador. Em seguida, comparo variantes – Gzip vs. Brotli, ajustes de nível, cache de borda ativado/desativado – em intervalos de tempo idênticos. Testes sintéticos mostram diferenças reproduzíveis, e o monitoramento de utilizadores reais confirma o efeito em utilizadores reais. É importante fazer um rollback limpo, caso ocorram picos de CPU ou ondas de cache miss. Só quando os efeitos estiverem estáveis é que eu rolo a configuração para Tráfegorotas difíceis.

Resolução de problemas: erros típicos e verificações rápidas

  • Compressão dupla: A codificação de conteúdo mostra „br, br“ ou „gzip, gzip“. A causa é frequentemente cadeias de filtros ou proxy + origem. Solução: atribuir a responsabilidade a apenas um local, dar preferência a variantes estáticas.
  • Variante incorreta da cache: O Brotli chega aos clientes sem suporte br. Na maioria das vezes, falta Vary: Aceitar codificação ou a chave de cache CDN não contém o campo. Solução: forçar Vary e ajustar a chave CDN.
  • Explosão do TTFB Após ativação: nível on-the-fly demasiado alto, saturação da CPU ou falta de cache de borda. Solução: reduzir o nível, ativar a pré-compressão, verificar o cabeçalho do cache.
  • Sem aumento de tamanho: tipos incorretos (meios já comprimidos), comprimento mínimo muito baixo ou falta de minificação agressiva. Solução: selecionar tipos, aumentar o comprimento mínimo, verificar a otimização da compilação.
  • Downloads danificados: O Content‑Length não corresponde à resposta comprimida ou o upstream removeu o Content‑Encoding. Solução: ao comprimir, utilize Transfer‑Encoding: chunked ou recalcule o comprimento corretamente.
  • Caminhos de renderização instáveis: HTML a transmitir tarde, apesar de estar comprimido. Solução: estruturar o modelo, enviar bytes antecipadamente, CSS crítico, selecionar níveis moderados.

Resumindo: a minha estratégia padrão

Para todos os recursos de texto que podem ser armazenados em cache, eu ativo Pauzinho de pão e entrego pré-comprimido através de Build ou CDN‑Edge. Conteúdos altamente dinâmicos recebem Gzip ou Brotli em nível moderado, para que o TTFB e a interatividade permaneçam estáveis. HTTP/2 ou HTTP/3 funcionam com cabeçalhos de cache definidos de forma clara, Early Hints e carregamento priorizado dos recursos críticos. Mantenho as configurações de qualidade tão baixas quanto possível, desde que os tamanhos dos ficheiros apresentem uma vantagem clara. Esta abordagem combina baixo Volume de dados com baixa carga do servidor – e acelera as páginas de forma perceptível.

Artigos actuais