07

Out

Comprimir (gzip) Javascript e CSS

Escrito por Gonçalo Martins   
comprimir javascript Com a evolução da Internet para a Web 2.0 os websites começaram a apresentar efeitos mais, ou menos complexos, uns aplicados com enormes quantidades de CSS, outros aplicados com Flash ou ainda muitos deles obtidos através de javascript.

 

Esta evolução fez com que o tempo de carregamento das páginas aumenta-se consideravelmente. Felizmente com esta evolução ocorreu também um aumento da velocidade dos serviços contratados para fornecimento de Internet. No entanto apesar do aumento da velocidade contratada muitas vezes as páginas demoram mais de 10 segundos a abrir o que para o internauta é um bilhete para fechar o Browser.

Estes tempos de load excessivos estão muitas vezes associados ao load de enormes ficheiros CSS e Javascript. Ultimamente tenho falado muito de Frameworks Javascript, a titulo de exemplo a framework Mootools 1.2 possui cerca de 90KB (descomprimida) e o Prototype 120KB. Agora será que tempo que estas framework levam a descarregar compensam os efeitos por elas produzidos? Talvez sim... mas não seria melhor se houvesse uma forma de comprimir ainda mais estes ficheiros?

Já anteriormente havia abordado o assunto do GZIP no artigo Acelere o seu website ou blog, no entanto neste artigo vou optar por uma solução diferente e talvez mais eficiente. Uma vez que vai funcionar em todos os webservers baseados em Apache (independentemente da configuração fornecida pela empresa de alojamento), reduz o consumo de CPU do servidor além de aumentar drasticamente o tempo de load de alguns sites.

 

Comprimir Ficheiros Javascript:

#1 - Siga as intruçõesdo ponto 3 do artigo que lhe referi nesta página anteriormente. Ou seja utilize o Dojo e o Dean Packeer, para comprimir o código do seu ficheiro .js. No caso da Framework Mootools 1.2 o tamanho após esta compressão deverá rondar os 56KB (cerca de 35KB a menos).

#2 - Faça download do programa 7zip e comprima o ficheiro resultante do ponto anterior. Deverá obter um ficheiro de extensão .js.gz, cujo tamanho no caso do Mootools 1.2 deverá rondar os 25KB (65KB menos que o original). Faça o upload para o seu servidor.

#3 - Realizar o load da versão gzip do ficheiro ao invés da versão descomprimida:

Em teoria seria só necessário substituir o código normal de chamada ao script:

javascript
  1. <script type="text/javascript" src="mootools.js"></script>
 por  
javascript
  1. <script type="text/javascript" src="mootools.js.gz"></script>

No entanto é aqui que os problemas começam. A maioria dos browsers realiza a descompressão do ficheiro .js.gz naturalmente, no entanto o safari nao o faz.


Na minha optica de ver a coisa existem duas formas de contrariar este problema:


#3.1 - Detectar os browsers com PHP e fazer o load dos ficheiros descomprimidos para o Safari, e o load dos ficheiros comprimidos para todos os restantes browsers.

#3.2 -
Utilizar .htaccess


Manter a chamada normal aos scripts:


javascript
  1. <script type="text/javascript" src="mootools.js"></script>

colocar o ficheiro mootools.js.gz na mesma pasta do mootools.js e adicionar as seguintes linhas ao .htaccess:
htaccess
  1. <FilesMatch "\\.js.gz$">
  2.   ForceType text/javascript
  3.   Header set Content-Encoding: gzip
  4. </FilesMatch>
  5. <FilesMatch "\\.js$">
  6.   RewriteEngine On
  7.   RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"
  8.   RewriteCond %{HTTP:Accept-Encoding} gzip
  9.   RewriteCond %{REQUEST_FILENAME}.gz -f
  10.   RewriteRule (.*)\.js$ $1\.js.gz [L]
  11.   ForceType text/javascript
  12. </FilesMatch>

Para todos os browsers diferentes de Safari ele realiza o load do ficheiro .js.gz.

Adiciona ainda os headers correctos ao browser.


ps:

Se já possuir o "RewriteEngine On" no seu .htaccess remova-o do código acima.
Se a versão gzip do ficheiro não existir na mesma pasta ele serve simplesmente a versão descomprimida.



Comprimir o CSS:


#1 - Utilize uma das seguintes ferramentas para reduzir o tamanho do seu ficheiro CSS:
CSSDRIVE | CLEANCSS | CSS Compressor

#2 -
Faça o load normal do seu ficheiro .css. E copie o ficheiro css.gz (comprimido com o 7zip) para a mesma directoria.


#3 -
.htaccess


htaccess
  1. <FilesMatch "\style\.css\.gz$">
  2. Header set X-Compression "gzip"
  3. Header set Content-Encoding "gzip"
  4. AddType text/css .gz
  5. </FilesMatch>
  6. <FilesMatch "\\.css$">
  7. AddEncoding gzip .gz
  8. RewriteCond %{HTTP:Accept-encoding} gzip
  9. RewriteCond %{HTTP_USER_AGENT} !Safari
  10. RewriteCond %{REQUEST_FILENAME}.gz -f
  11. RewriteRule ^(.*)$ $1.gz [QSA,L]
  12. </FilesMatch>


Para ambos (JS e CSS), algo do género deverá funcionar:

.htaccess
htaccess
  1. <FilesMatch "\\.js.gz$">
  2.   ForceType text/javascript
  3.   Header set Content-Encoding: gzip
  4. </FilesMatch>
  5. <FilesMatch "\style\.css\.gz$">
  6. Header set X-Compression "gzip"
  7. Header set Content-Encoding "gzip"
  8. AddType text/css .gz
  9. </FilesMatch>
  10. RewriteEngine On
  11. AddEncoding gzip .gz
  12. RewriteCond %{HTTP:Accept-encoding} gzip
  13. RewriteCond %{HTTP_USER_AGENT} !Safari
  14. RewriteCond %{REQUEST_FILENAME}.gz -f
  15. RewriteRule ^(.*)$ $1.gz [QSA,L]
  16.  


Gostou deste Artigo?
Subscreva o feed RSS ou reguiste-se na Newsletter do WebLouca, agora!
Tags:
Categoria:
Se preferir, pode ainda deixar um comentário

PATROCINADORES


cometarios
Trackback(0)
Rodrigo Alexandre Coelho
Outubro 07, 2008
http://novamidia-novomarketing.blogspot.com

Boa dica, especialmente para desenvolvedores. A questão do tempo excessivo de carregamento de alguns site é realmente um problema sério e que certamente afasta os internaltas mais impacientes.

Gustavo D.
Outubro 08, 2008
http://boagrana.info

Excelente se funcionar, faltou dizer qual a relação do tamanho que conseguimos iminuir e se ja foi estado...

Gonçalo M
Outubro 08, 2008

@ Gustavo

Funciona ;)

Não disse a taxa de compressão que se consegue atingir uma vez que esta irá variar de ficheiro pra ficheiro. No entanto quase que lhe posso garantir taxas acima dos 60% para ficheiros Javascript maiores.

Chris Benseler
Dezembro 30, 2008
http://www.chrisb.com.br

Opá, belo artigo! Compressão pelo webserver é a melhor saída, mesmo.
Só faço uma ressalva no seu texto: você diz "sites baseados em Apache"; o termo está errado, pois um site não sei baseia no webserver (você pode servir o mesmo site em diversos, como o Apache, IIS, etc...).
Abraço!

Isaac Nathan
Abril 14, 2009
http://notemix.net

"tempo de carregamento das páginas aumenta-se", seria 'aumentasse'. Bacana o artigo

Rina Noronha
Abril 30, 2010
http://www.imasters.com.br

Olá Gonçalo, gostaria de conversar com você sobre publicação de artigos. Pode me mandar um email? Este endereço de e-mail está protegido de spam bots, pelo que necessita do Javascript activado para o visualizar


Escreva o seu Comentario
 
  pequeno | maior
 

busy
 

Patrocinadores do Site

Subscrever Feed



Artigos

Ultimos artigos
jsimageNeste artigo vou-lhe demonstrar como rodar imagens e qualquer elemento desde div a span co...
phpthumbAtualmente praticamente todos os websites possuem a necessidade de listar os seus artigos...
benchmarksA pouco mais de um ano falei sobre uma ferramenta para otimizar imagens (Artigos/optimize...
phpimageredRedimensionar uma imagem com php pode ser um processo complicado. Quando por exemplo um wo...
linksafiliadosNo inicio do ano escrevi um artigo onde dáva a conhecer uma forma de criar links de afili...