fbpx
Desenvolvimento

Compressão de dados: gzip, zlib e deflate

Utilizar a compressão de dados é uma excelente prática de otimização de páginas web, além de ser muito fácil de ser implementada . O processo é bem simples: o servidor comprime todo o HTML, CSS e Javascript antes de enviar para o navegador, dessa forma a transferência dos arquivos acontece muito mais rápida.

Pesquisando sobre o assunto, me deparei com esses três nomes: gzip, zlib e deflate. What? Qual usar?

Deflate – é um algoritmo de compressão de dados.

Gzip – é um programa de compressão de dados para sistemas baseados em Unix. Utiliza o algoritmo deflate.

Zlib – é uma biblioteca multiplataforma de compressão de dados, criada para popularizar o algoritmo deflate.

Resumindo, tanto faz se você vai usar o Gzip ou o Zlib, já que o algoritmo de compactação é o mesmo.  O importante é ativar a compressão para melhorar a performance do seu site, diminuindo cerca de 70% do tráfego total. Geralmente eu dou preferência para o zlib, pois acho mais rápido de habilitar (veja abaixo). Se ele não estiver disponível então eu habilito o gzip.

Ativando o Zlib

Para usar o Zlib você precisa verificar se a biblioteca está ativa no servidor através da função phpinfo().

zlib2

Se estiver, basta adicionar essas linhas de código no header do seu site antes do html.

[code lang=”php”]
<?php
/** Coloque essas duas linhas no cabeçalho do site **/
ini_set(‘zlib.output_compression’,’On’);
ini_set(‘zlib.output_compression_level’,’1′);
?>
<!doctype html>
<html dir="ltr" lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Comprenssão de dados: gzip, zlib e deflate</title>
[/code]

Ativando o Gzip

Caso você prefira usar o Gzip  ou esteja impedido de usar o Zlib, em servidores linux é possível ativá-lo através do arquivo .htaccess adicionando o código abaixo:

[code lang=”xml”]
<IfModule mod_deflate.c>
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
<IfModule filter_module>
FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
FilterProvider COMPRESS DEFLATE resp=Content-Type $image/x-icon
FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
</IfModule>
<IfModule !mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/x-icon image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
</IfModule>
</IfModule>
[/code]

Comprovando o resultado

Com uma ferramenta disponibilizada pelo site Port80 é possível verificar o status da compressão, comparar o tamanho do arquivo original com o do arquivo comprimido e ter uma estimativa de tempo de carregamento da página. Veja o teste que fiz:

verifica-compressao-gzip1

Basta adicionar a url do seu site no campo compression check e clicar em check para fazer o teste com o seu site.

http://www.port80software.com/support/p80tools.asp

Referências

Gzip.org

Zlib.net

Wikipedia.org/Zlib

Wikipedia.org/Gzip

Template de htacess modelo simples focado em seo

Forum Microsoft