tadarank afiliados

13 julho, 2010

Introduçãozinha sobre Cache web e no servidor

Um brodi perguntou estes dias sobre esquemas de cache pra deixar a página mais rápida.
Vou tentar explicar de forma resumida e rápida sobre cache em páginas web.
O termo cache designa o ato de guardar uma cópia de algo complexo ou lento para que se possa ter acesso mais rápido a este "algo complexo" futuramente. O cache web pode ser ativado em "várias frentes".
O cache que vou tratar aqui é o "cache web" de páginas web/http, ok? Nada a ver com cache em processador, e outras paradas.

Cache na Frente client

Quando você pede uma página web no seu navegador, ele a exibe, porém , além de exibir, pode ser que ele guarde ela (ou partes dela) "em cache" para caso você acesse ela novamente no futuro. Assim ele exibirá a página mais rápido pois partes dela (como imagens, scripts) estavam guardadas em seu cache interno e não precisaram ser pedidas novamente na rede.
No Firefox do Windows XP, o cache geralmente fica em Documents and Settings\nome_user\Configurações locais\Dados de aplicativos\Mozilla\Firefox\Profiles
Esta foi a "frente client" do cache (conhecido como "cache web") e ela pode ser exercida não só pelo navegador, mas por servidores proxy também, por exemplo.
Como implementar este cache web?
1) Através de meta tags no HTML (meta expires, cache-control, pragma)
2) OU headers enviados pelo script php/asp/jsp (também expires, cache-control, pragma)
3) OU header enviados diretamente pelo servidor web http (apache/IIS/etc) (novamente expires, cache-control, pragma).
Não vou detalhar cada um aqui pois não é o objetivo do post. Usa o google :P
Veja um detalhamento maior sobre cache web aqui, E aqui também (em inglês) Cache via header PHP

Cache na Frente server-side

Já a "frente server-side" atua no servidor web (cache server), pra ajudar o bixo a enviar a página pro navegador com maior rapidez.
Exemplo: Imagine que o navegador pede uma página que exibe uma lista de produtos e preços que está no banco de dados.
O coitado do servidor web terá que ligar o interpretador Php (ou asp ou outro), conectar com o banco de dados, fazer a consulta sql, aguardar o server sql processar a consulta, pegar os dados, formatar em html e só então devolver pro navegador.
Agora imagine que, além da lista de produtos, o server tenha que pegar também o menu do site no banco de dados, as últimas postagens, etc. Será um monte de consultas que deixarão o site lento pra caramba.
Agora imagine que o servidor é inteligente e, além de devolver o html pro navegador, ele também crie um arquivo com este html.
Assim, da próxima vez que algum navegador pedir a mesma página ele não precise fazer aquele monte de consultas sql e talz. É só mandar o arquivo html que estava salvo pro navegador.
Hahá! Seu server ficará aliviado e seu site mais rápido. Simples né?
Nem tanto hehe. Existem sistemas de cache server onde os caras guardam na memória RAM e não em arquivos pra ficar mais rápido ainda (MEMcached). Outros guardam só as consultas sql, outros guardam os arquivos em módulos (módulo menu, módulo option_cidades), etc.
Vai da sua imaginação e do seu sistema...
"Mas, sr mico, e se o conteúdo da página mudar?"
- Bem, é por isso que, nos dois casos citados acima existe o conceito de timeout. O programador HTML/PHP irá especificar um tempo em que o cache será válido.
"Mas, sr mico, no meu site/sistema o sistema de fornecedores cadastra produtos a todo minuto, um sistema de cache não ajudaria muito pois o timeout teria que ser muito pequeno"
- Se seu site tem muitos acessos por minuto, mesmo um cache com validade de 30seg seria de grande ajuda. Uma consulta sql consome muito tempo e processamento. O primeiro visitante destes 30seg iria esperar um pouco, mas o segundo e o terceiro iriam agradecer a velocidade.
Uma implementação simples de cache server em arquivos pode ser vista aqui.
Outras em ASP aqui, Outras em PHP aqui

Conclusão

Pra sites com muitos acessos, sistema de cache são uma puta salvação. E você ainda pode implementar os 2 sistemas de cache em conjunto.
Eu já economizei bastante em servidor web implementando sistemas de cache. Princpalmente em blogs com o plugin super cache do wordpress (e recentemente o db cache reloaded graças ao Janio).
Na época do Mwords, o cache dava uma salvada boa nas trocentas requisições por segundo que tinha.
Devem existir outras frentes, outros modelos, outras formas... Se você souber lembre este mico através dos comentários. Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

2 comentários:

  1. Bem interessante a maneira como vc expõe o assunto! ^^
    Eu sou do tipo q não aguento ler explicação mto técnica das coisas - me dá preguiça, e embora eu entenda, minha atenção não se prende de jeito nenhum ¬¬' - , então esse jeito mais despojado de escrita, além de manter atenção de pessoas como eu, facilita o entendimento pra quem demora mais pra entender ^^
    Parabéns pelo post e pelo blog.

    ResponderExcluir
  2. Opa cara, beleza? Te mandei email no dia 31. Acho que deve ter ido pra sua caixa de SPAM.
    Te mandei denovo agora.

    ResponderExcluir

Resultado! Concursos