Optimización de arranque de PHP OPcache

Para los sitios web que están basados ​​en WordPress , Joomla o Laravel , por ejemplo, y no tienen contenido específico del usuario, es recomendable mantener todas las páginas en un caché HTML estático y solo regenerar el caché manualmente (o automáticamente) cuando se realizan cambios en el backend. Sin embargo, si la página contiene contenido dinámico que depende de sesiones y cookies o también del idioma y la ubicación, OPcache es adecuado .


El llamado tiempo de arranque para los tres sistemas mencionados es de más de 100 ms con un servidor CentOS7 recién instalado (con SSD y PHP 7.1). Cada vez que se ejecuta un script PHP, debe compilarse en código de bytes en tiempo de ejecución. OPcache ahora implementa una caché para este código de bytes; si se ejecuta el mismo script PHP con la siguiente solicitud, no es necesario volver a compilarlo. Después de activar OPcache, configuramos las siguientes configuraciones:

9006cec6c5d3d2498ee26c5bfd91590a

El tiempo de ejecución (con un promedio de más de 10 ejecuciones) ahora se ha reducido significativamente:

WordPress 4.7.4 Joomla 3.7 Laravel 5.4
sin OPcache 295 ms 201 ms 110 ms
con OPcache 54 ms 59 ms 13 ms
Factor 5,5 3,5 8,5

Dado que establecemos validate_timestamps en 0 y al mismo tiempo revalidate_freq en una duración de un día, la caché casi nunca se reconstruye automáticamente (lo hacemos conscientemente de forma manual). Con un pequeño gancho de git , se ejecuta un script PHP con cada "extracción". Cómo activar el gancho:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

La siguiente función auxiliar también es útil para medir partes de código individuales (o el tiempo de ejecución completo):

085f4291bbcc4e8a64bbea951ff49ab9

Si desea obtener información útil como el estado, la memoria utilizada o la cantidad de archivos almacenados en caché, use esta función de PHP:

3f6309d04bc7e48dd909859321b96209

Para beneficiarse de OPcache en un entorno de desarrollo local (que generalmente no se recomienda), usamos un truco.

OPcache está activo en todos los servidores que tienen el módulo OPcache instalado y en los que la configuración opcache.enable no está establecida explícitamente. Lo dejamos así. Solo configuramos opcache.validate_timestamps = 1 en php.ini. Esto significa que opcache.revalidate_freq = 2. Esto significa que OPcache se revalida casi continuamente para cada proyecto. Para aquellos proyectos en los que queremos activar OPcache de forma permanente, utilizamos proyectos relacionados en el .hta acceda a la siguiente configuración:

1dd64a3f2fe4425b29b1409410fe3fc0

Luego reiniciamos el servidor web y creamos el siguiente script:

91fb5289160e410607c9ea89112a575b

Este script borra el caché y lo reconstruye al mismo tiempo. Ahora configuramos un comando RunOnSave relacionado con el espacio de trabajo en nuestro editor favorito VSCode:

91fb5289160e410607c9ea89112a575b

Atrás