tempo de leitura:

Recentemente efetuei alguns testes com o mod_deflate, um módulo que vem em conjunto com apache 2.0 que efetua a compressão de dados (html, xml, etc) antes de enviá-los ao browser. Fiquei satisfeito com o funcionamento e gostaria de compartilha-lo.

No primeiro exemplo que efetuei, o site do De-Grátis que tem seu tamanho avaliado (pelas propriedades do FireFox) em 3.81KB (3901 bytes) passou para 1.37KB (1407 bytes) – ou seja, a transferência foi reduzida em aproximadamente 64%. Já no segundo teste, utilizei o site do GSI Soluções que passou de 11.31KB (11579 bytes) para 2.94KB (3009 bytes), ou seja 25% do tamanho original (economia de banda de 75%).

Qualquer ganho entre 50% e 80% justifica a instalação de uma solução dessas, só deve ser avaliado o custo/benefício em relação ao uso de rede e cpu. a Tabela abaixo pode auxiliar na configuração:

| |Falta em tempo de CPU | Abundância em tempo de CPU | |---|---|---| |Falta de largura de banda | Compressão mínima | Compressão máxima |Abundância em largura de banda | Sem compressão | Compressão mínima

Abaixo existem algumas referências que utilizei para chegar ao meu objetivo. De qualquer forma, listo a configuração que utilizei:

No arquivo /etc/httpd/conf.d/httpd.conf logo abaixo da seção <IfModule mod_mime_magic.c>:

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE


# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html


# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip


# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html


# Don't compress these extensions
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
</IfModule>

No exemplo acima, é habilitado a compressão usando o módulo deflate. As linhas BrowserMatch tem por finalidade configurar a compactação de acordo com o browser que acessa. Na primeira linha, tratamos o browser Netscape Navigator 4.x que só permite compressão de tipos text/html. Já as versões 4.0.6, 4.0.7 e 4.0.8 possuem problemas na descompressão de htmls, e nesse caso (segunda linha) desabilitamos a compactação para não haver problemas. Na última linha BrowserMatch é efetuada uma correção dos browsers Internet Explorer que identificam-se como “Mozilla/4″ mas trabalha corretamente com compressão de dados, e neste caso é liberada a compressão.

As três linhas a seguir (SetEnvIfNoCase) informam para não compactar arquivos do tipo gif, jpeg, jpg, png, ico, exe, tgz, gz, zip, bz2 e pdf.

Em seguida é definido o nível de compressão que será aplicado no arquivo (DeflateCompressionLevel 9) e o tamanho do buffer de compressão para cada iteração da zlib (DeflateBufferSize 8192).

Por fim, as linhas DeflateFilterNote colocam uma “nota” que será utilizada no momento de logging. Neste caso registrei as três possibilidades (Input, Output e Ratio) mas só utilizo a última, que é a porcentagem de compressão.

Como eu utilizo os logs no modo combined, alterei a linha de formatação adicionando o tamanho do arquivo original (%b) e o percentual de compactação do arquivo (mod_deflate: %{ratio}n pct.). Segue abaixo as linhas referentes ao logging:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %b mod_deflate: %{ratio}n pct." combined
CustomLog /var/log/apache/gsibr.com-access_log combined

Com isso pode-se escrever um script, para tirar a média de economia de banda feita com esse software. Acho que é isso… qualquer dúvida não relacionada aqui, consulte as referências recomendadas, ou me envie um e-mail.

REFERÊNCIAS:

Apache 2 mod_deflate Benchmark Página oficial do Módulo Deflate Compressing Web Output Using mod_deflate and Apache 2.0.x

Blog Logo

José Morelli Neto


Publicado em

Image

Notas do Neto

De tudo um pouco...

Ir para início