Hospedagem de sites

OPcache

Definição

O OPcache é a extensão do PHP que guarda na memória compartilhada o código dos scripts já compilado (os opcodes). O PHP não precisa mais reler e analisar cada arquivo a cada requisição, o que acelera muito aplicações como o WordPress, formadas por centenas de arquivos PHP carregados a cada página.

OPcache, Hospedagem de sites

O PHP é uma linguagem interpretada: antes de executar um arquivo, ele o lê, analisa e traduz em instruções internas, os opcodes. Sem cache, esse trabalho é refeito a cada requisição, para cada arquivo carregado. A documentação do PHP resume o papel do OPcache assim: ele guarda o bytecode pré-compilado dos scripts na memória compartilhada, o que evita que o PHP precise carregar e analisar os scripts a cada requisição.

Como o OPcache funciona

O OPcache é uma extensão que vem com o PHP, carregada pela diretiva zend_extension. Na primeira execução de um arquivo, os opcodes dele vão para a memória compartilhada. As requisições seguintes os reutilizam diretamente, seja qual for o worker do PHP-FPM que as atenda, já que a memória é comum aos processos de um mesmo mestre.

Comparação em duas colunas. Sem OPcache, a cada requisição: leitura dos arquivos PHP no disco, análise e compilação em opcodes, execução, e depois tudo é esquecido. Com OPcache: opcodes já na memória compartilhada, execução imediata, verificação das datas de modificação dos arquivos a cada 2 segundos por padrão.
O OPcache elimina a etapa de compilação, que de outra forma se repete a cada requisição.

Para levar em conta as alterações, o OPcache confere por padrão a data dos arquivos a cada dois segundos (opcache.revalidate_freq=2). Se você desativar essa verificação (opcache.validate_timestamps=0), um possível ganho em produção, as mudanças nos arquivos deixam de ser percebidas até que o cache seja limpo com opcache_reset() ou com uma reinicialização do PHP.

As configurações úteis

Valores padrão documentados pelo PHP:

  • opcache.memory_consumption: 128 MB de memória compartilhada;
  • opcache.max_accelerated_files: no máximo 10.000 arquivos;
  • opcache.interned_strings_buffer: 8 MB para as strings internadas;
  • opcache.revalidate_freq: 2 segundos.

Um WordPress com construtor de páginas, WooCommerce e uns vinte plugins pode ultrapassar o número de arquivos ou a memória previstos. Acima disso, parte dos scripts deixa de entrar no cache e o ganho diminui. A função opcache_get_status() ou um plugin de diagnóstico mostra a taxa de ocupação.

Desde o PHP 7.4, o pré-carregamento (opcache.preload) carrega arquivos na inicialização do PHP. Ele não está disponível no Windows e exige uma reinicialização para ser atualizado: combina mais com aplicações estáveis do que com um WordPress que se atualiza com frequência.

Vídeo: “Como o PHP funciona? - Conheça o OPcache | Dias de Dev” (Dias de Dev)

No WordPress

A documentação do WordPress recomenda acrescentar um cache de opcodes como o OPcache para melhorar muito o desempenho do PHP. Ele complementa, sem substituir, o cache de páginas e o cache de objetos: o OPcache evita a compilação do código, o cache de objetos evita consultas ao banco de dados, o cache de páginas evita executar o PHP.

  • Na hospedagem compartilhada, o OPcache normalmente está ativo; confira com phpinfo() ou nas configurações de PHP do seu painel.
  • Em um VPS, ajuste a memória e o número de arquivos ao tamanho real dos seus sites.
  • Ao atualizar a versão do PHP, recarregue o PHP-FPM para recomeçar com um cache limpo; é também o momento de conferir se a versão escolhida continua mantida (veja as versões do PHP em fim de vida).

Segurança

Em um servidor compartilhado, o cache é comum aos pools de um mesmo mestre do PHP-FPM. Diretivas como opcache.validate_permission e opcache.validate_root existem para verificar as permissões dos arquivos em cache e evitar colisões em ambientes chroot. A diretiva opcache.restrict_api limita o uso das funções do OPcache a um caminho definido, para impedir que qualquer script limpe o cache. Essas configurações complementam as do nosso guia para endurecer o PHP.

Erros comuns

Desativar o validate_timestamps e depois não entender por que uma alteração de arquivo não aparece; deixar a memória padrão em um site grande; achar que o OPcache substitui um cache de páginas.

Para saber mais

  • Artigo Versões do PHP em fim de vida: calendário, riscos e migração

Fontes

  1. PHP Manual: OPcache (link externo, abre em uma nova aba)
  2. PHP Manual: OPcache, runtime configuration (link externo, abre em uma nova aba)
  3. PHP Manual: OPcache, installation (link externo, abre em uma nova aba)
  4. WordPress Advanced Administration: Cache (link externo, abre em uma nova aba)

Todas as definições

Segurança WordPress, sem ruído

Um e-mail quando importa: novos ataques observados, atualizações do plugin e guias práticos. Sem spam, cancelamento com um clique.

Comece de graça e mude para o Pro quando estiver pronto

A versão gratuita já oculta o WordPress e muda o endereço da página de login. O Pro acrescenta aliases, verificação em duas etapas e monitoramento.