mod_deflate em 15 minutos

Sempre achei compressão de dados na transmissão via HTTP uma coisa muito bacana. Já brinquei bastante com o mod_gzip e andei brincando com o mod_deflate.

O mod_deflate vem com o Apache 2.0, portanto qualquer pessoa que esteja usando o Apache 2.0 pode usar o mod_deflate. O pacote do Apache que vem com o Fedora tem disponível todos os módulos extras, basta então descomentar a seguinte linha no httpd.conf

LoadModule deflate_module      modules/mod_deflate.so

Eu costumo compilar o Apache do tarball mesmo. Para habilitar o mod_deflate nesse caso, como um módulo compartilhado, basta um:

$ ./configure --enable-so --enable-deflate=shared
$ make && make install

Uma vez com o módulo instalado, basta configurar. Essa é a configuração que eu uso no meu personal server (em casa, não o LSDR.net, infelizmente) e passei para o Jean usar no Salacious Crumb:

<IfModule mod_deflate.c>
   SetOutputFilter DEFLATE

   # Comprime apenas HTML para o Netscape 4.x
   BrowserMatch ^Mozilla/4 gzip-only-text/html

   # Não comprime nada em caso de encontrarmos
   # o IE ou o Netscape 4.06-4.08
   BrowserMatch ^Mozilla/4\.0[678] no-gzip
   BrowserMatch \bMSIE no-gzip

   # Excluindo imagens, binários e PDFs
   SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
   SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2)$ no-gzip dont-vary
   SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

   # Configurando o nível de compressão
   DeflateCompressionLevel 9
   DeflateBufferSize 8192

   # Logando o trabalho do mod_deflate
   DeflateFilterNote Input instream
   DeflateFilterNote Output outstream
   DeflateFilterNote Ratio ratio

   LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
   CustomLog logs/deflate_log deflate
</IfModule>

Essa configuração eu tirei do manual do Apache e do excelente WebCompression.org. Com essa configuração, dá até para obter 70% de compressão nos arquivos de saída, tais como HTML, CSS e etc…

Exemplo rápido: O site do iG, cuja página principal tem em torno de 50 Kb, teria que transmitir apenas 15 Kb. Chute um valor para o número de pessoas que acessam o iG todo dia e calcule vc mesmo a redução de consumo de banda que o iG poderia ter.

O único porém, que é o verdadeiro limitante, é que o IE - browser utilizado por 90% da web - não suporta direito o envio de conteúdo comprimido. Teremos que esperar sair o IE 7.0. Sigh.


Comentário de Alex Hubner - 03.05.04 @ 22h26 #

O IE (5.0 para cima) suporta compressão HTTP no formato gzip numa boa. Aliás, o IIS 5.0 conta com um “compressor” HTTP nativo bastante eficaz. O problema da compressão HTTP é o seguinte: só funciona bem para arquivos plain text (HTML/CSS puros) e aumenta o tempo de processamento no servidor e no cliente, podendo não ser uma opção viável (processamento custa mais caro que banda em alguns casos, especialmente nos EUA, onde banda é como água) para provedores de sites de grande volume.

Comentário de Luiz Rocha - 04.05.04 @ 01h31 #

Para reduzir a carga no servidor, pode ser feito cache de páginas estáticas. Tá certo que hoje é muito mais comum encontrar conteúdo dinâmico do que estático na internet.

Agora, vc tem certeza que o IE tem um suporte adequado para compressão? Pq eu tinha feito uma configuração para o Jean que estava comprimindo apenas-texto quando o browser em questão era o IE, mas quando eu fui visitar o site dele com o IE 6.0 deu uns problemas…

A princípio, não acredito que tenha sido erro de configuração. Mas posso estar enganado.

Pingback de Saber explicar » LSDR.net - 29.11.07 @ 23h40 #

[…] explicação* sobre compressão de dados usando mod_deflate significativamente mais clara que a que eu tentei fazer a alguns […]

LSDR.net

Feeds: Posts, Comentários


© 2004 - 08, Luiz Rocha
(GPG key)

Todo conteúdo sob licenca Creative Commons by-sa, a não ser que explicitado.

As opiniões expressas nesse website não representam necessariamente a visão estratégica, as opiniões e posições do meu empregador, nem são endossadas pelo mesmo.

Caveat Lector


OpenID friendly website