como armazenar meu site em cache?

2

Eu tenho poucas dúvidas sobre o armazenamento em cache de um site, já que não tentei fazer o cache de um site antes.

Primeiro, como armazenar um site em cache para que ele tenha um carregamento mais rápido quando os clientes navegarem pelo site. Por exemplo, tenho muitas imagens no meu estilo css, como faço para armazenar em cache isso?

Do que eu li antes de fazer cache no php é feito através da tag <head> e também o cache pode ser feito no .htaccess (fico feliz que eu esteja usando o htaccess ^ _ ^).

Eu adicionei essas tags no meu cabeçalho

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="expires" content="-1">
<meta http-equiv="pragma" content="no-cache">//or content="cache"???

Também é isso que está dentro do meu htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

</IfModule>

<IfModule !mod_rewrite.c>    
    ErrorDocument 404 /index.php
</IfModule>
    
por Wondering Coder 14.03.2012 / 03:14

4 respostas

1

O armazenamento em cache raramente é uma solução de "descarte", mas, se implementado corretamente, pode resultar em um aumento significativo de velocidade para um site.

O primeiro item que você menciona 'muitas imagens CSS' - não é um problema de servidor em si. Para buscá-los, o navegador deve fazer uma solicitação para cada imagem, cada uma com sua própria sobrecarga. Combine as imagens em um sprite de CSS para que você possa minimizar o número de solicitações e maximizar a compactação que o formato de imagem escolhido aplica. Uma ideia semelhante aplica-se aos ficheiros CSS e JS - combine e reduza ao máximo possível. Para recomendações específicas de sites, experimente o Pagespeed do Google ou o YSlow do Yahoo.

No lado do servidor, existem vários caches para PHP que armazenam os formulários intermediários dos caches traduzidos script - opcode. O mais comumente usado é o APC, mas o xcache e o eaccelerator também são usados com frequência (use apenas um deles).

Do lado do PHP, o cache normalmente envolve a geração de uma cópia estática do seu conteúdo. Isto pode ser conseguido usando buffer de saída (o ob_ * funções (por exemplo, ob_start ()). Você começa a armazenar em buffer antes de enviar qualquer conteúdo, encerrar seu buffer depois que sua página foi totalmente construída e salvar o conteúdo resultante em um arquivo. a existência de tal arquivo antes de tentar o script PHP (ou seja, se o cache existir, sirva-o, caso contrário carregue o script).

Além disso, você pode adicionar uma camada adicional à sua pilha da web - o verniz é uma escolha popular. É um servidor proxy e de cache reverso. Essencialmente, as solicitações para o seu servidor de back-end são recebidas pelo Varnish e, se já tiver uma cópia da página, ela será veiculada diretamente - ignorando o back-end. Se não tiver uma cópia da solicitação, ela será passada para o back-end. O verniz pode ser configurado para armazenar seu cache diretamente na memória ou pode usar armazenamento em disco e é bastante eficiente no que faz.

Como acontece com qualquer abordagem de armazenamento em cache, você enfrenta o problema potencial de vazamento de informações confidenciais - se você armazenar em cache uma página que só deve estar visível para usuários logados e acabar veiculando para um usuário não autenticado, você tem um problema. Como tal, um servidor como o Varnish tende a não armazenar em cache nenhum pedido contendo cookies - algo que é importante considerar ao tentar realmente alcançar uma alta taxa de acertos.

A outra consideração possível é usar uma rede de distribuição de conteúdo - um serviço que tenha locais de borda de rede mais próximos aos usuários, para que várias solicitações possam ser atendidas mais rapidamente - geralmente, isso é mais importante para arquivos grandes. você está servindo muitos arquivos pequenos (por exemplo, imagens), você provavelmente pode melhorar o design do seu site.

    
por 14.03.2012 / 03:44
1

Como afirmado por David, sua pergunta é muito ampla.

No entanto, depois de ter tentado ler sua mente, parece-me que o que você quer é usar os recursos de cache HTTP. Acredito que você deseje que os navegadores dos usuários acessem seu site para armazenar em cache suas imagens, assim como seus arquivos .css, para que evitem buscar todo esse conteúdo toda vez que acessarem seu site e, assim, carregá-lo mais rápido.

Bem, o HTTP tem recursos que permitem que você faça exatamente isso.

Começando com o básico, o HTTP é um protocolo de solicitação-resposta. O navegador envia uma solicitação para um recurso e o servidor responde. Ambas as solicitações e respostas contêm cabeçalhos, que descrevem como o navegador e o servidor devem se comportar quando recebem respostas e solicitações, respectivamente.

Você pode dizer aos navegadores de seus usuários para armazenar em cache imagens e .css definindo cabeçalhos de resposta em seu arquivo .htaccess.

Os cabeçalhos que você precisará em suas respostas para atingir esse objetivo são os descritos abaixo:

HTTP/1.1 provides the following caching response headers : Expires and Cache-Control: max-age. These specify the “freshness lifetime” of a resource, that is, the time period during which the browser can use the cached resource without checking to see if a new version is available from the web server. They are "strong caching headers" that apply unconditionally; that is, once they're set and the resource is downloaded, the browser will not issue any GET requests for the resource until the expiry date or maximum age is reached.

Last-Modified and ETag. These specify some characteristic about the resource that the browser checks to determine if the files are the same. In the Last-Modified header, this is always a date. In the ETag header, this can be any value that uniquely identifies a resource (file versions or content hashes are typical). Last-Modified is a "weak" caching header in that the browser applies a heuristic to determine whether to fetch the item from cache or not. (The heuristics are different among different browsers.) However, these headers allow the browser to efficiently update its cached resources by issuing conditional GET requests when the user explicitly reloads the page. Conditional GETs don't return the full response unless the resource has changed at the server, and thus have lower latency than full GETs.

It is important to specify one of Expires or Cache-Control max-age, and one of Last-Modified or ETag, for all cacheable resources. It is redundant to specify both Expires and Cache-Control: max-age, or to specify both Last-Modified and ETag.

Taken from: http://code.google.com/speed/page-speed/docs/caching.html.

Depois de entender isso e escolher os cabeçalhos que você acredita que melhor se ajustam às suas necessidades, você pode fazer isso usando o mod_headers do apache e a diretiva FilesMatch.

Aqui está um exemplo do que você pode colocar no seu .htaccess (pode ser exatamente o que você quer):

<FilesMatch "\.(css|swf|png|jpg|jpeg|gif)$">
Header unset Pragma
Header unset Expires
Header set Cache-Control "max-age=604800"
</FilesMatch>

Antes disso, sugiro que você faça o download do plug-in do Page Speed do Google para cromo ( link ) e instalá-lo. Em seguida, execute o teste de velocidade da página e analise seus resultados, especialmente a seção "Aproveite o cache do navegador" para ver se você realmente precisa executar uma ação.

    
por 14.03.2012 / 04:50
0

Controlar o cache de arquivos estáticos de HTML com metatags não é realmente estável, pelo menos na minha opinião. Você deve dar uma olhada em mod_expires (usando o cabeçalho HTTP para o controle de cache): link

Se você quiser armazenar em cache sites dinâmicos, poderá armazenar toda a página em cache ou apenas as solicitações do banco de dados (dependendo do design do seu banco de dados / site). Talvez este link seja útil: link

    
por 14.03.2012 / 03:30
0

Sua pergunta é muito ampla. "Caching" é feito em várias camadas diferentes, então perguntar "como faço para armazenar em cache meu site" é como perguntar "como faço para cozinhar o jantar". Há muitas maneiras de fazer isso.

Você pode armazenar em cache na camada de banco de dados se tiver um site dinâmico com um banco de dados como o MySQL. Você pode armazenar em cache na camada PHP com memcache ou APC . Você pode armazenar em cache na camada do servidor com um proxy reverso, como Verniz .

E isso nem sequer toca no cache do lado do cliente (ou seja, o conteúdo do cache do navegador da Web de cada cliente para essa pessoa específica), que é o que você está falando com . htaccess e informações de cabeçalho .

Você será melhor se concentrar no cache do lado do servidor, em vez de no cache do lado do cliente.

A criação de sua arquitetura de armazenamento em cache depende muito do que seu aplicativo é construído, de quantas vezes o conteúdo é alterado e de como as informações atualizadas precisam ser feitas.

Se você tem um website dinâmico, eu primeiramente recomendo estudar como você pode aumentar o desempenho do MySQL com seu próprio mecanismo de cache embutido.

Se você tem um site muito ocupado, então eu recomendo estudar como funciona o Varnish ou outro servidor de cache de proxy reverso.

De qualquer forma, examine esses tópicos, aprenda e sinta-se à vontade para voltar quando tiver perguntas mais específicas.

    
por 14.03.2012 / 03:35