domingo, 12 de outubro de 2008

O módulo mod_deflate do Apache

O mod_deflate permite comprimir de forma automática os arquivos servidos no apache que são baixados pelos clientes, de forma a economizar banda e a reduzir o tempo de carregamento das páginas. Se os sites hospedados no servidor utilizam páginas com grandes volumes de texto, a redução pode ser bastante significativa.

O uso da compressão é negociado entre o servidor e o cliente no momento em que ele requisita a página, de forma que você não precisa se preocupar em excluir navegadores móveis ou clientes com browsers antigos. Ao perceber que o cliente não suporta o recurso, o servidor simplesmente envia a página sem compressão.
O uso do deflate aumenta um pouco  uso de processamento no servidor, já que ele terá o trabalho de comprimir cada página solicitada antes de enviá-la ao cliente, mas isso é compensado pelo fato de o cliente demorar menos tempo para carregar cada página, o que permite que o servidor mantenha um número menor de instâncias do Apache carregadas na memória, sem contar que o consumo de banda é reduzido consideravelmente.

Do ponto de vista tando do cliente como do servidor, o deflate é bastante benéfico, para o cliente o texto das páginas carrega mais rápido e para o servidor o consumo de banda diminui. Uma página html comprimida pelo deflate fica com, tipicamente, um quarto do tamanho original. Com isso, uma página de 100 KB, que demoraria até 15 segundos para ser carregada por um cliente acessando via modem, passaria a ser carregada em apenas 3 ou 4 segundos. Depois disso, ainda teríamos o tempo de carregamento das imagens e de outros elementos da página.

Nas distribuições derivadas do Debian, o módulo é ativado usando o a2enmod:
# a2enmod deflate


Nas distribuições derivadas do Red Hat, verifique se a linha a seguir está presente dentro da seção "Dynamic Shared Object (DSO) Support" do arquivo "/etc/httpd/conf/httpd.conf". Adicione-a manualmente caso necessário (reinicie o Apache para que a configuração entre em funcionamento):
LoadModule deflate_module modules/mod_deflate.so

Em seguida, vem a configuração do módulo. No Debian, a configuração vai no arquivo "/etc/apache2/mods-available/deflate.conf", enquanto do CentOS e no Fedora é usado o arquivo "/etc/httpd/conf.d/httpd-deflate.conf".
Uma configuração simples, e bastante usada, é fazer com que o deflate comprima apenas arquivos em html, texto puro ou xml, sem tentar comprimir outros tipos de arquivos como imagens, que em teoria já são arquivos compactados. Esta configuração exige uma única linha e é a configuração padrão no Debian:

AddOutputFilterByType DEFLATE text/html text/plain text/xml


Outra abordagem é orientar o deflate a comprimir todos os tipos de arquivos, com exceção das imagens em .gif, .png e .jpg. Isso pode ser interessante se, além das páginas html, você disponibiliza arquivos em formatos com baixos índices de compressão, como arquivos .doc ou .xls. Nesse caso, a configuração ficaria:

# Comprime tudo, com exceção de arquivos .gif, .jpg e .png:
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary


Note que esta configuração deve ser usada apenas em casos específicos, pois ela faz com que o servidor tente comprimir todo tipo de arquivo, incluindo arquivos em formatos já compactados, o que resultará em um grande aumento no uso de processamento, sem que haja uma redução no tamanho dos arquivos.

Uma recomendação geral é incluir exceções para versões antigas dos browsers que não são capazes de negociar a compressão de páginas com o servidor corretamente. Estes navegadores são extremamente raros hoje em dia, por isso mesmo os sites movimentados não recebem mais do que algunhas visitas diárias de clientes utilizando estes navegadores, mas não custa deixar o servidor preparado para atender a esses casos específicos. Para isso, devemos incluir três linhas adicionais na configuração:

AddOutputFilterByType DEFLATE text/html text/plain text/xml
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
 
I hope you like it !!!

Abs.
Wilton Paulo.

Referências: GdhPress.

0 comentários:

Postar um comentário

Gostou do artigo? Então deixe um comentário !!!