29th out 2009

Usando compressão gzip no Apache e vendo os resultados num log

Existem muitos posts em diversos blogs falando de como melhorar a performance do seu site diminuindo o tráfego de dados do tipo texto (html, css e javascript, na grande maioria). Já discuti – no bm sentido – algumas vezes sobre o fato de achar desnecessário fazer aqueles minify de javascript, fazer CSS em uma linha e tirar os espaços em branco no html, se você estiver usando compressão pelo webserver.

Não vou entrar em detalhes – o Google está aí pra isso – mas você pode consigurar o Apache (imagino que outros webservers tenham algo parecido) para que ele faça compressão de arquivos (como se fosse um zip) a serem enviados. O (protocolo) http se encarrega de verificar se o browser possui a capacidade de descompactar (e acredite, qualquer browser mais ou menos atual possui) arquivos nesse formato.

Como habilitar? Habilite o módulo deflate do Apache (como fazer isso, varia de versão para versão; cheque a documentação da sua instalação do Apache) e dentro do Virtualhost do seu site, insira:

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|rar|zip|pdf)$ no-gzip dont-vary
<IfModule mod_headers.c>
Header append Vary User-Agent
</IfModule>
</IfModule>

Isso vai fazer com que qualquer arquivo que não seja de uma das extensões listadas na terceira linha seja comprimido com gzip. Ah, porque não comprimir esses? Comprimir com gzip qualquer tipo de um desses formatos é desnecessário, pois eles já possuem compressão.

Reinicie o Apache e de um refresh na sua página, com o Firebug aberto, e veja a diferença.

Para melhorar, se você quiser fazer um log para acompanhar se está mesmo fazendo a compressão, e o quanto está comprimindo cada arquivo. Para isso, dentro do seu Virtualhost também:

<IfModule mod_log_config.c>
<IfModule mod_deflate.c>
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.js image-request
SetEnvIf Request_URI \.css image-request
LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate
CustomLog /var/log/apache2/deflate.log deflate env=!image-request
</IfModule>
</IfModule>

Vale lembrar que esses são apenas exemplos, e você pode customizar tanto a compressão quanto o formato do log e afins ao seu prazer :)

Posts relacionados

Avalie

1 estrela2 estrelas3 estrelas4 estrelas5 estrelas (No Ratings Yet)

3 Responses to “Usando compressão gzip no Apache e vendo os resultados num log”

  1. Alexsandro says with Firefox on Windows Vista

    Eu gosto de manipular o gzip direto no php.

  2. Chris says with Firefox on Ubuntu

    Alex, é bacana essa solução se você não tem controle do webserver… mas, se você tiver acesso a ele, fica muito mais prático – você não tem que fazer “microgerenciamento”…

  3. Alexsandro says with Firefox on Windows Vista

    Criei um framework open source onde eu consigo gerenciar o gzip por cada uri inclusive manipular o header do cabeçao HTTP fazendo cache gerenciado de forma transparente.
    Esta for ai acima tb é muito boa e aconselhavel. Mas não vai ser legal eu usa-la em conjunto deste framework.

Leave a Reply