Módulo 6 · 6.2
Caching
Módulo 6: Velocidade · Tempo de leitura: 9 minutos
Objetivo de aprendizagem: Após esta lição, conseguirá explicar que tipos de cache existem e configurar e verificar corretamente uma cache de páginas.
Conceitos-chave: cache de páginas, cache do navegador, Cache-Control, cache de objetos, Redis, OPcache, CDN, plugin de cache, LiteSpeed Cache, exceções (sessão iniciada, carrinho de compras, finalização de compra), limpar a cache, plugins de cache duplicados
Cache: não fazer o mesmo trabalho duas vezes
Uma cache guarda o resultado de um trabalho, para que não tenha de ser repetido da próxima vez. Num site WordPress, há quatro locais onde isto acontece, do maior para o menor:
| Tipo | O que é guardado | Onde | Efeito |
|---|---|---|---|
| Cache de páginas | O HTML completo de uma página | No servidor (ou numa CDN) | O maior ganho: o PHP, os plugins e a base de dados são ignorados |
| Cache do navegador | Folhas de estilo, scripts, imagens, tipos de letra | No navegador do visitante | Uma segunda página carrega mais rápido, porque os ficheiros já estão disponíveis |
| Cache de objetos | Resultados de pedidos à base de dados | Na memória do servidor (Redis, Memcached) | Ajuda onde uma cache de páginas não pode, como em utilizadores com sessão iniciada e lojas online |
| OPcache | O código PHP compilado | Na memória do PHP | O PHP não precisa de reler os ficheiros a cada pedido; está ativada por predefinição na maioria dos alojamentos |
A cache de páginas
A lição 1.2 mostrou isto: sem cache, o WordPress recria a página inteira a cada visita. Com uma cache de páginas, o primeiro visitante gera a página, e os seguintes recebem o HTML guardado. Um TTFB de um segundo pode assim passar para algumas centésimas de segundo, e o seu plano pode suportar muito mais visitantes em simultâneo.
A forma como obtém uma cache de páginas depende do seu servidor web:
- LiteSpeed (muito alojamento partilhado, incluindo a WebOké): o próprio servidor web tem uma cache. O plugin gratuito LiteSpeed Cache controla essa cache a partir do WordPress: que páginas podem entrar na cache, quando são limpas. Como a cache está no servidor web, o PHP nem sequer é iniciado para uma página guardada.
- Apache ou nginx: um plugin de cache que guarda o HTML como ficheiros, como o WP Super Cache, o W3 Total Cache ou um plugin pago como o WP Rocket. Ou uma cache gerida pelo alojamento ao nível do servidor.
- Alojamento WordPress gerido tem frequentemente uma cache própria; nesse caso, normalmente não instala um plugin de cache.
Escolha apenas um. Dois plugins de cache em simultâneo (por exemplo, LiteSpeed Cache e WP Rocket) interferem um com o outro: trabalho duplicado, páginas que não são limpas, erros estranhos. Num servidor LiteSpeed, o LiteSpeed Cache funciona com a cache do servidor web; outro plugin de cache não consegue fazer isso.
O que não pode entrar na cache
Uma cache de páginas dá a mesma versão de HTML a todos. Isto corre mal em páginas que são diferentes para cada visitante:
- utilizadores com sessão iniciada (a barra de administração, "Boas-vindas, Lisa");
- o carrinho de compras, a finalização de compra e A minha conta numa loja online;
- páginas com um formulário com um código de utilização única (nonce), que expira após algum tempo;
- páginas que mostram algo diferente com base na localização, no idioma ou num cookie.
Bons plugins de cache ignoram automaticamente os utilizadores com sessão iniciada e as páginas conhecidas do WooCommerce. Noutros plugins (uma área de membros, um sistema de reservas) tem de configurar exceções manualmente. O sinal de que algo está mal: um visitante vê o carrinho de compras de outra pessoa, ou um formulário dá "expirado" ou "pedido inválido".
Limpar: quando é que a cache está desatualizada?
Se alterar uma página, a versão guardada tem de ser removida. Os plugins de cache geralmente limpam essa página, a página inicial e os arquivos ao guardar um artigo. Numa alteração ao menu, ao tema ou a um widget, muitas vezes é necessário limpar toda a cache. Se, após uma alteração, ainda vir a versão antiga, limpe a cache (na barra de administração do plugin de cache) e verifique numa janela privada, para que a sua própria cache do navegador não interfira.
A cache do navegador
O servidor indica ao navegador, através de cabeçalhos, durante quanto tempo pode guardar um ficheiro:
cache-control: public, max-age=31536000Isto significa: guardar durante um ano. Para folhas de estilo, scripts, tipos de letra e imagens, um período longo é perfeitamente adequado, porque o WordPress coloca um ?ver= diferente após o endereço numa nova versão, e o navegador trata-o então como um ficheiro novo. Para o próprio HTML, é habitual um período curto (ou nenhum), para que os visitantes vejam as alterações rapidamente.
Muitos alojamentos e plugins de cache tratam disto automaticamente. No exercício desta lição, irá verificar isso.
Cache de objetos e Redis
Uma cache de páginas não ajuda em utilizadores com sessão iniciada nem no carrinho de compras. Aí ajuda uma cache de objetos: o WordPress guarda o resultado de pedidos à base de dados na memória, num programa como o Redis ou o Memcached. Da próxima vez que chega o mesmo pedido, o WordPress vai buscar a resposta à memória em vez de à base de dados.
Isto é especialmente útil para lojas online, sites de membros e sites com muitos editores com sessão iniciada. Para um site informativo comum com uma cache de páginas, a diferença é pequena. Uma cache de objetos exige que o seu alojamento ofereça Redis ou Memcached; depois ativa-a com um plugin (o LiteSpeed Cache consegue fazê-lo, e também existem plugins separados).
Uma CDN
Uma CDN (content delivery network) é uma rede de servidores em muitos locais do mundo que guardam cópias dos seus ficheiros (e, por vezes, das suas páginas inteiras). Um visitante recebe-os do servidor mais próximo. Isto ajuda principalmente com visitantes distantes e com muito tráfego. Para um site europeu com visitantes europeus num servidor europeu, o ganho é pequeno. Uma CDN com proxy (como o Cloudflare) altera também o seu DNS e o seu certificado (curso de DNS, lição 7.5); não o faça sem compreender o que isso implica.
Na prática: como se apresenta num painel
Como exemplo, usamos o LiteSpeed Cache num servidor LiteSpeed. Outros plugins de cache têm definições semelhantes com nomes diferentes.
- Instale e ative o LiteSpeed Cache em Plugins > Novo plugin.
- Abra LiteSpeed Cache > Cache: "Ativar Cache" está ligado, "Cache de utilizadores com sessão iniciada" está desligado (a menos que saiba o que está a fazer).
- Numa loja online: verifique em Excluir se o carrinho de compras, a finalização de compra e A minha conta estão incluídos (no WooCommerce isso acontece automaticamente).
- Deixe as restantes opções (otimização de CSS e JavaScript, imagens) desligadas inicialmente. Ative-as uma a uma e teste após cada passo: são precisamente essas opções que por vezes quebram um tema.
- Verifique numa janela privada com as ferramentas de programador (F12, Rede, primeiro pedido): na segunda vez que carregar, deve aparecer
x-litespeed-cache: hit.
Resumo
- Existem quatro tipos de cache: páginas (o maior ganho), navegador, objetos e OPcache.
- Num servidor LiteSpeed, o LiteSpeed Cache controla a cache do servidor web; em Apache ou nginx, usa outro plugin de cache. Escolha apenas um.
- Utilizadores com sessão iniciada, carrinho de compras, finalização de compra e páginas pessoais não devem estar na cache de páginas.
- Limpe a cache após alterações ao menu ou ao tema e verifique numa janela privada.
- Uma cache de objetos (Redis) ajuda em lojas online e utilizadores com sessão iniciada; uma CDN ajuda sobretudo com visitantes distantes e muito tráfego.
Questionário
Exercício
Exercício A6.2: A sua cache de página funciona? Introduza o endereço do seu site. O programa pede a página inicial duas vezes, com pouco intervalo entre elas, sem cookies, e verifica na segunda vez os cabeçalhos que indicam um acerto de cache (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, um age superior a 0, ou o cabeçalho de outra cache conhecida). Depois, pede uma folha de estilo da página inicial e verifica se o navegador pode guardá-la durante pelo menos sete dias (cache-control: max-age ou expires). Anote qual cache está a utilizar.
Leitura adicional
Estes artigos descrevem os passos nos painéis da WebOké; noutros painéis funcionam de forma semelhante.
- Manual DirectAdmin 18.3: O meu site está lento
- Manual DirectAdmin 15.7: Redis
- O meu website está lento ou consome demasiado CPU: como torná-lo mais rápido
- OPcache: atraso de 30 segundos ao alterar um ficheiro PHP
- O gzip está ativado no DirectAdmin e no LiteSpeed ou Apache?
- Cache no WordPress (developer.wordpress.org, em inglês): https://developer.wordpress.org/advanced-administration/performance/cache/
