No seu dia a dia, provavelmente você já deve ter se deparado com sites que demoram uma eternidade para serem carregados devido ao fato de terem páginas muito pesadas (não discutiremos a qualidade do código, da infraestrutura e de outros detalhes que estão por trás). A situação fica pior ainda se a sua internet é discada ou móvel.
Essa é, pois, a angústia de seus clientes. Por outro lado, sua angústia está no consumo de banda. É desesperador ver o seu link a ponto de ser estrangulado, principalmente se você hospeda sites ou aplicações WEB com um grande número de acessos simultâneos.
Não entre em pânico! Pois existe a possibilidade de comprimir os dados entre você e o seu cliente. Ele fica feliz, pois as páginas são carregadas rapidamente. E você desafoga o seu link. Tudo isso graças ao
módulo deflate do
Apache.
Descrição do módulo deflate
Conforme Morimoto (2008, p. 406), o Módulo Deflate do Apache:
"Permite comprimir de forma automática as páginas HTML (e também outros tipos de arquivos) enviados aos 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 de 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 sutilmente o 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."
Ativando o módulo deflate
Tendo por pressuposto que você já tem um servidor WEB devidamente instalado rodando o Apache, vamos à ativação do módulo deflate (mod_deflate).
No
Debian e seus derivados a ativação é bastante simples através do comando
a2enmod:
# a2enmod deflate
No Red Hat e seus derivados, conforme Morimoto (2008, p. 407), 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:
LoadModule deflate_module modules/mod_deflate.so
Em algumas outras distribuições, em
/etc/httpd/conf/httpd.conf ou similar, usa-se o caminho completo até o arquivo:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Para que o módulo entre em ação, reinicie o Apache.
No Debian e seus derivados:
# /etc/init.d/apache2 restart
No Red Hat e seus derivados:
# service httpd restart
Configurando o módulo deflate
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.
a) A configuração mais básica com a qual o deflate comprime somente os aquivos HTML, texto puro e XML é (configuração padrão do Debian):
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>
b) O Deflate comprime todos os arquivos, exceto as imagens '.gif', 'jpg' e 'png':
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>
c) O deflate comprime HTML, texto puro, XML, Javascript e CSS:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
d) O deflate comprime os arquivos de acordo com a sua extensão:
<Files *.html>
SetOutputFilter DEFLATE
</Files>
<Files *.css>
SetOutputFilter DEFLATE
</Files>
<Files *.js>
SetOutputFilter DEFLATE
</Files>
<Files *.jpg>
SetOutputFilter DEFLATE
</Files>
<Files *.gif>
SetOutputFilter DEFLATE
</Files>
<Files *.jpeg>
SetOutputFilter DEFLATE
</Files>
<Files *.png>
SetOutputFilter DEFLATE
</Files>
<Files *.swf>
SetOutputFilter DEFLATE
</Files>
<Files *.txt>
SetOutputFilter DEFLATE
</Files>
<Files *.ico>
SetOutputFilter DEFLATE
</Files>
e) Ou ainda, outro modo de comprimir pela extensão dos arquivos:
<ifmodule mod_deflate.c="">
<filesmatch .(.jpg|.gif|.png|.tiff|.ico|js|css)$="">
SetOutputFilter DEFLATE
</filesmatch>
</ifmodule>
f) Resolvendo alguns problemas com navegadores antigos:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
# Netscape 4.X
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
g) Definindo o nível de compressão através de "DeflateCompressionLevel":
Se não for adicionado nenhum parâmetro, o 'mod_deflate' assumirá o compressão padrão (Default: DeflateCompressionLevel 6).
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
# Compressão Mínima = 1
# Compressão Máxima = 9
DeflateCompressionLevel 9
</IfModule>
Vendo os resultados:
Antes de tudo, após ter definido as devidas configurações, faz-se necessário reiniciar o Apache para que tais configurações entrem em vigor.
a) Você pode medir os resultados criando logs do módulo deflate:
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
DeflateCompressionLevel 9
#Criando deflate_log
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate
</IfModule>
b) Ou usando algum aplicativo específico:
Eu usei a extensão
Web Developer 1.1.9 para o Mozilla Firefox.
Usei também a extensão
Yslow para o Google Chrome.