Seguramente vos sabes como escribir código PHP pero ¿sabes como se ejecuta internamente? Conocer las profundidades del lenguaje nos ayuda a entenderlo mejor. Entender porque una nueva mejora o modificación del lenguaje en próximas versiones puede tener un gran o menor impacto. Por eso, en este simple artículo vamos a ver cada etapa del proceso de ejecución de PHP.
Proceso de 4 etapas
El proceso de ejecución de PHP cuenta de 4 etapas. Desde que se lee el código fuente hasta el resultado final.
Análisis léxico y de Tokenización
En esta primera etapa, se lee el código PHP de izquierda a derecha eliminando todas las cosas innecesarias como los espacios en blanco, comentarios, saltos de lineas, etc. También se validan que las palabras claves y operadores estén bien escritas. Luego, toda la información se agrupa formando distintos tokens.
Análisis sintáctico
En esta etapa, el interprete de PHP verifica que los tokens cumplan las reglas gramaticales del lenguaje. Y, a partir de PHP 7, se parsean los token en un árbol de análisis sintáctico (Abstract syntax tree – AST) que permitiendo una mejor etapa de compilación.
Compilación
El intérprete procesa el árbol y traduce los nodos AST en códigos de operación Zend de bajo nivel (opcodes). Estos opcodes determinan el tipo de instrucción realizada por el Zend VM.
Interpretación
Por último, la Maquina Virtual Zend ejecuta los opcodes produciendo tu lindo «Hola Mundo» 😃.
A continuación les dejo un gráfico del proceso básico de ejecución de PHP que comentamos anteriormente.
Extensión para optimizar el proceso de ejecución de PHP: OPcache
Todo el flujo que vimos anteriormente se produce cada vez que ingresa una request a nuestro sistema creado en Laravel. Esto es porque PHP es un lenguaje interpretado y como se imaginarán, este proceso consume tiempo y recursos de la CPU de una forma poco eficiente.
Por eso, se ha creado una extensión llamada OPcache que mejora el rendimiento de PHP.
Opcache almacena los opcodes en memoria haciendo que el proceso de 4 etapas solo se produce la primera vez que se ejecuta el sistema. Así la VM Zend dispone de los opcodes rápidamente.
¿Cómo habilitar OPcache?
Desde PHP 5.5 la extensión OPcache viene habilitada por defecto, así que no te debes preocupar por nada. Si lo quieres verificar puedes ejecutar la función phpinfo()
en el archivo index.php de tu sistema (en Laravel se encuentra en public/index.php
). O ejecutar el comando php -i
en tu terminal.
Veras algo como esto:
O algo como esto en tu terminal:
Mejora en OPcache: Precarga
En la versión de PHP 7.4 se ha mejorado OPcache gracias a la implementación de la Precarga. La precarga nos permite especificar qué scripts queremos que se almacenen en la memoria de OPcache antes que se ejecute la aplicación (puedes ver más detalles de la Precarga en este artículo de Novedades de PHP 7.4).
Conclusión
Espero que le haya gustado este artículo y hayan aprendido algo más sobre este hermoso lenguaje. En PHP 8 se vienen mejoras a este proceso que seguirán dandole un paso más de calidad al lenguaje. Pero los detalles los veremos en un próximo artículo. No te olvides de compartir este artículo que nos ayuda mucho a seguir progresando. Nos vemos en la próxima 😃.
Hace unos días me había preguntado justo lo que mencionas en este post y no había tenido tiempo de investigar, me cae la info como anillo al dedo, gracias por el artículo!