Contactar o apoio

Respondemos por e-mail, normalmente em dois dias.

Para prevenir abusos, o Google reCAPTCHA verifica este envio; alguns dados são transmitidos ao Google. O script só é carregado quando abre este formulário.

← Todos os artigos

Comprimir o mesmo ficheiro de cada vez

O Apache comprime as respostas no momento. Para uma página que é diferente de cada vez, é a única via. Para uma folha de estilos que muda uma vez por mês, significa que o servidor repete o mesmo trabalho para cada visitante, durante semanas, e deita fora o resultado de cada vez. Cache para isso não existe.

Medido a 19 de agosto de 2026 sobre uma ligação já existente, com o style.css (124 kB) e o world.js (102 kB) deste sítio:

tempobytes
sem compressão2,9 ms124 755
gzip, no momento18,1 ms34 995
brotli, no momento14,5 ms32 685
world.js, gzip47,9 ms38 283
world.js, brotli15,9 ms38 086

Quarenta e oito milissegundos de processador, por pedido, para produzir um resultado idêntico byte a byte. Num Raspberry Pi isso não é um erro de arredondamento.

Comprimir uma vez, para o disco

Um passo de construção escreve o ficheiro comprimido ao lado do original, e uma regra de reescrita serve-o quando o navegador diz que aceita gzip. Servir um ficheiro já pronto custa o que custa servir qualquer ficheiro.

gzip e não brotli, por uma razão aborrecida: nesta máquina não está instalado nenhum executável brotli. Os ficheiros saem cerca de 7 % maiores do que o brotli os faria, e o tempo de servidor é um quinto do que custa o brotli no momento. Essa troca valia a pena ser feita já em vez de esperar por uma resposta mais bonita.

A versão vai no nome do ficheiro

A construção escreve style.css.<mtime>.gz, e o ?v= na marcação é essa mesma hora de modificação. A reescrita só dispara quando existe um ficheiro com o número correspondente.

Este arranjo tem uma propriedade pela qual vale a pena desenhar de propósito: se mudares a folha de estilos e te esqueceres de reconstruir, o número na marcação aponta para um ficheiro que não existe, a reescrita não dispara e o Apache serve normalmente o original. O pior caso é faltar a aceleração. Uma folha de estilos desatualizada não pode sair. Todo o esquema de cache devia ser confrontado com esta pergunta — quando corre mal, fica lento ou fica errado?

A avaria no meio disto tudo

O ficheiro servido já é gzip, portanto não pode ser comprimido segunda vez à saída. Na configuração estava primeiro no-gzip, que trava um dos dois compressores do Apache. O outro, o mod_brotli, empacotava alegremente em brotli o ficheiro gzip acabado, enquanto o cabeçalho da resposta continuava a afirmar gzip.

Os navegadores recebiam conteúdo ilegível. Não foi descoberto a olhar para a página — foi descoberto a somar os bytes e a encontrar um número que não fazia sentido. São precisos os dois, no-gzip e no-brotli, e só um deles é o óbvio.

Publicidade