Saltar para o conteúdo
EuroVPSEuroVPS

Caching em PHP: OPcache, Memcached e Redis

O PHP corre uma parte muito grande dos websites dinâmicos, o que torna importante que os programadores PHP estejam a par do caching: OPcache, caches de dados e caches de páginas.

Por Thomas

Atualizado em 22 de outubro de 20264 min de leitura
Imagem de capa: caching em PHP

O que é o PHP?

O PHP é uma linguagem de programação usada para criar conteúdo dinâmico numa página web, como mostrar uma lista de registos de uma base de dados, obter publicidade, ou mostrar um feed de notícias ou um Twitter stream. Uma forma de acelerar tudo isso é usar caching em PHP.

O que é o caching?

As páginas web carregam mais depressa quando partes da página, ou a página toda, ficam guardadas em memória, num ficheiro no web server, ou na rede de distribuição de conteúdos (CDN), em vez de serem criadas de cada vez que alguém pede esse URL. A isso chama-se caching. Proporciona uma melhor experiência de utilização, porque os utilizadores não esperam tanto quando clicam para a página seguinte carregar.

Pode fazer cache de conteúdo, como imagens, HTML e dados. Por exemplo, não é necessário obter a mesma imagem 10 vezes para 10 pessoas diferentes. É melhor fazer cache dela. A cache guarda essa página web com todos os dados já no lugar, como uma lista de nomes.

Artigo relacionado: Varnish Cache explicado

O livro de receitas do programador

Pense numa chamada à base de dados. Não faz sentido ler a base de dados 100 vezes para 100 pessoas que carregam todas os mesmos registos, algo comum a muita gente, como o preço de um artigo que está a promover em destaque. É mais eficiente ir buscar esse valor à cache.

As aplicações também podem fazer cache de respostas de APIs. Por exemplo, é através de uma API que funciona a publicidade dentro da página. Mas isso é um contraexemplo, porque não se faria cache de um anúncio: o anunciante mostra anúncios diferentes a pessoas diferentes.

Portanto o caching não se aplica a todas as situações. Em particular, não é adequado para dados que mudam com frequência ou que são únicos para cada utilizador.

O PHP tem uma cache importante incorporada: o OPcache, que vem com o PHP. Sempre que um script PHP corre, o PHP primeiro compila-o para bytecode. O OPcache guarda esse bytecode compilado em memória partilhada, para que os scripts não sejam recompilados em cada pedido. Garanta que está ativado e que a sua memória é suficientemente grande para o seu código. É normalmente a aceleração de PHP mais barata que existe.

O PHP não tem, porém, cache incorporada para os seus dados. Para isso existem frameworks e extensões open source, como clientes de Memcached e Redis, que permitem ao programador conceber o seu código para funcionar desta forma. Uma biblioteca cliente verifica a cache antes de consultar a base de dados.

Caching em PHP e WordPress

O WordPress tem uma API de object cache que pode ser suportada por Memcached ou Redis, e plugins de page cache como o W3 Total Cache ou o WP Super Cache acrescentam caching de página inteira. Isso também vai acelerar a publicação de conteúdos no seu CMS. E qualquer código WordPress personalizado que escreva pode usar caching se acrescentar uma framework.

Afinar a cache

Uma objeção justa: como pode uma cache saber os últimos cinco títulos sem verificar? A resposta é que não sabe.

O caching é controlado por tamanho e por tempo. Pode, por exemplo, definir o tempo da cache para 5 segundos ou 5 minutos.

Quando o tempo da cache expira, o código PHP faz a viagem até ao servidor de base de dados ou à API para verificar se algo mudou.

As caches também são limitadas pelo tamanho: quando uma cache enche, as entradas usadas há mais tempo são removidas para dar lugar às novas.

A conclusão

O PHP corre uma parte muito grande dos websites dinâmicos.

O OPcache, uma cache de dados e uma cache de páginas são as três camadas que vale a pena acertar. Se tiver dúvidas, contacte a nossa equipa.

Do arquivo do blog da EuroVPS, publicado pela primeira vez em 10 de agosto de 2021.

Todas as notas de campo