Enviar por e-mail
Imprimir
Servidores
Apache Expires Header - Cache de imagens, Javascript e CSS
Por Alejandro Fernandez Moraga
Desenvolvedores do Servidor Web ApacheFoto por i am a moose
Segundo a Wikipédia (pt.wikipedia.org/wiki/Cache) "(...) cache é um dispositivo de acesso rápido, interno a um sistema, que serve de intermediário entre um operador de um processo e o dispositivo de armazenamento ao qual esse operador acede. A vantagem principal na utilização de uma cache consiste em evitar o acesso ao dispositivo de armazenamento - que pode ser demorado -, armazenando os dados em meios de acesso mais rápidos. (...) No caso dos navegadores, em que as páginas são guardadas localmente para evitar consultas constantes à rede (especialmente úteis quando se navega por páginas estáticas)".
Existem diversas formas de melhorar o desempenho de um site, uma dessas formas é o cache de conteúdo. O navegador armazena localmente alguns arquivos do site no primeiro acesso, nos próximos acessos, em vez de baixar esses arquivos novamente é usado os arquivos locais (em cache). Geralmente são armazenados arquivos com códigos Javascript e CSS e imagens.
O cache de conteúdo reduz grande parte do tráfego de rede, se não for a maior parte porque os arquivos mais "pesados" do site são estáticos e podem ser armazenados. Com isso o site carrega mais rápido, poupa a banda para novos acessos e evita o excesso de logs do servidor web.
Módulo mod_expires
Configurações válidas para o arquivos de configuração do apache (httpd.conf, apache.conf, vhosts.conf, .htaccess, etc).
ExpiresActive On
ExpiresByType Content-Type Time
Content-Type: define o tipo de conteúdo que será cacheado.
Time: o tempo máximo que o conteúdo pode ser cacheado. Exemplos:
Em segundos- 1 hora: 3600 (60 * 60)
- 1 dia: 86400 (60 * 60 * 24)
- 1 mês: 2592000 (60 * 60 * 24 * 30)
- 1 ano: 31536000 (60 * 60 * 24 * 365)
- 1 hora: access plus 1 hour
- 1 dia: access plus 1 day
- 1 mês: access plus 1 month
- 1 ano: access plus 1 year
Cache de um mês
O tempo de validade do cache varia de acordo com a necessidade do site. Estenda o máximo possível, quanto menor o número de solicitações, melhor.
Imagens
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000
Javascript
ExpiresByType text/javascript A2592000
CSS
ExpiresByType text/css A2592000
Combinando mais de um tipo de conteúdo
<{filesmatch "\.(jpg|gif|png|css|js)$"}>
ExpiresActive on
ExpiresDefault A2592000
<{/filesmatch}>Diferente de ExpiresByType, ExpiresDefault não define o tipo de conteúdo (Content-Type) a ser cacheado.
Remover cache
Para remover o cache defina o tempo com valor 0 (zero).
ExpiresByType Content-Type A0
Testando
Para comprovar se realmente o cache está habilitado e funcionando corretamente, abra um terminal ou prompt de comando e digite:
telnet www.seusite.com.br 80Exemplo:
HEAD /arquivo/que_deve_ser_armazenado_em_cache.jpg HTTP/1.0
telnet www.moraga.com.br 80
HEAD /images/tpl/moraga.jpg HTTP/1.0
...
HTTP/1.1 200 OK
Date: Tue, 29 Jul 2008 14:52:43 GMT
Server: Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch11
Last-Modified: Wed, 16 Jul 2008 02:00:41 GMT
ETag: "231c00b-53aa-7ddb6440"
Accept-Ranges: bytes
Content-Length: 21418
Cache-Control: max-age=2592000
Expires: Thu, 28 Aug 2008 14:52:43 GMT Connection: close Content-Type: image/jpeg
A linha em negrito Expires: Thu, 28 Aug 2008 14:52:43 GMT indica quando o arquivo vai expirar, ou melhor, por quanto tempo ele será armazenado localmente (em cache) no computador do cliente.
Como alterar um arquivo que está em cache?
Quando o navegador solicita uma página que contém dados em cache, ele verifica a data de expiração, senão tiver expirado é exibido o arquivo armazenado em cache. Os dados armazenados e o fonte não são comparados, mesmo porque, a finalidade do cache é poupar tráfego da rede e processamento.
O cache se torna um problema quando um conteúdo precisa ser modificado, o navegador não vai atualizar aquele arquivo a menos que tenha expirado ou tenha sido removido. A melhor forma de contornar este problema - sem acabar com todo o sistema de cache - é criar um arquivo com outro nome, por exemplo:
<script type="text/javascript" src="lib.js"></script>
Altere de lib.js. Modifique para lib-1.0.js <script type="text/javascript" src="lib-1.0.js"></script>
Para o navegador, lib.js e lib-1.0.js são arquivos totalmente diferentes, sendo assim, o navegador vai solicitar o novo arquivo. Isso é válido para qualquer tipo de conteúdo.
Referências
- Module mod_expires (http://httpd.apache.org/docs/1.3/mod/mod_expires.html)
Comentar
RSS
RSS
valeu, resolveu meu problema.
o site ficou muito mais rapido.
muito obrigado