Un desarrollador migra una tienda PrestaShop a un VPS “más rápido”. Las páginas permanecen suaves. La creación de perfiles muestra el 40% del tiempo de CPU en la compilación de PHP. OPcache fue deshabilitado en un php.ini copiado de un antiguo sitio compartido. Dos líneas corregidas, TTFB reducido a la mitad, sin tocar el procesador.
OPcache almacena el código de bytes compilado de archivos PHP en la memoria compartida. Sin él, cada consulta vuelve a leer y compilar las fuentes. En WordPress (cientos de archivos incluidos) el impacto es enorme. Esta suele ser la primera palanca que se debe verificar, antes de PHP-FPM, antes de HTTP/3, antes de cambiar de host.
Verifique el estado real, no dé por sentado
php-yo | grep -E 'opcache.enable|opcache.memoria'
O una página temporal phpinfo() en preproducción. Puntos clave:
| Directiva | Rol | Señal de advertencia |
|---|---|---|
opcache.enable=1 | Habilitar caché | 0 en producción |
opcache.memory_consumption | Memoria dedicada (MB) | Demasiado bajo → desalojos frecuentes |
opcache.max_accelerated_files | Número máximo de archivos | WordPress + Composer > 10,000 → aumentar |
opcache.validate_timestamps | Recompilar si el archivo se modificó | Deshabilitado sin procedimiento de implementación = errores fantasmas |
opcache.revalidate_freq | Fecha límite de verificación | Demasiado alto en desarrollo, aceptable en producción estable |
En PHP 8 y superiores, JIT puede ayudar con cálculos intensivos; ganancia marginal en el CMS clásico: no le dé prioridad antes que un OPcache saludable.
Configuraciones pragmáticas por contexto
WordPress/CMS compartido: confirme enable=1 y max_accelerated_files ≥ 10000; A menudo dejan los valores predeterminados del anfitrión. VPS con implementaciones de Git: validate_timestamps=0 en producción si su canal recarga PHP-FPM o llama a opcache_reset() en CLI después de la implementación. Contenedores efímeros: OPcache comienza desde cero en cada reinicio; un guión de calentamiento puede ayudar. Multisitio o monorepo grande — monitorear opcache_get_status(): tasa de éxito < 95% → memoria insuficiente o max_files.
Vínculos con FPM y TTFB
Cada trabajador de PHP-FPM se beneficia de la memoria OPcache compartida. Un OPcache de tamaño insuficiente obliga a realizar recompilaciones e infla la RAM por trabajador indirectamente. Secuencia lógica: corregir OPcache, luego caché de objetos de Redis o caché de páginas, luego ajuste PHP-FPM, luego diagnóstico TTFB. Ignorar OPcache y luego duplicar los trabajadores significa pagar dos veces por el mismo error.
Arriba: el caché de código de bytes no aparece en PageSpeed
Marketing vende núcleos de procesador; OPcache es invisible en la hoja de ventas, pero decisivo en la factura y en la latencia real. Compare hosts a través del directorio solo después de la verificación.
Decide y avanza sin puntos ciegos
Confirme en producción que opcache.enable esté activo y observe la tasa de aciertos de la caché antes de realizar ninguna optimización adicional. Ajuste el consumo de memoria y los archivos_acelerados máximos de acuerdo con el tamaño real del proyecto: WordPress con muchos complementos supera rápidamente los diez mil archivos. Documente el procedimiento de volcado durante la implementación: recarga de PHP-FPM o reinicio de CLI, nunca punto final público. Mida TTFB antes y después; solo entonces optimice FPM o cambie de host.
Preguntas frecuentes
¿OPcache está habilitado de forma predeterminada?
En PHP 7 y superior en producción, a menudo sí, pero no siempre en imágenes de contenedor mínimas o compartidas antiguas. Verifique con phpinfo() o php -i | grep opcache.
validar_timestamps habilitado o deshabilitado en producción?
Deshabilitado más reimplementación que vacía OPcache = rendimiento máximo. Habilitado más implementaciones frecuentes = más sencillo sin olvidar borrar el caché. Elija según su canalización, no según una regla universal.
¿OPcache reemplaza a Redis o al caché de una página?
No. OPcache almacena en caché el código de bytes PHP compilado. Redis oculta los datos de la aplicación; un caché de página evita ejecutar PHP. Los tres se complementan.
¿Cómo borrar OPcache después de una implementación?
Vuelva a cargar PHP-FPM, llame a opcache_reset() en una línea de comando dedicada o integre el reinicio en la herramienta de implementación, nunca exponiendo reset() públicamente en la web.
Antes de comprar un servidor más rápido, una pregunta: ¿Está habilitado OPcache y cuál es su tasa de éxito? Si nunca lo ha visto, aún no ha optimizado PHP.
