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.

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.
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.