PHP, ¿lenguaje interpretado o compilado?

Esta es una de las clásicas preguntas sobre PHP que tiene una respuesta rápida y buena: interpretado. Ahora bien, y aquí llega el quid de…

PHP, ¿lenguaje interpretado o compilado?

Esta es una de las clásicas preguntas sobre PHP que tiene una respuesta rápida y buena: interpretado. Ahora bien, y aquí llega el quid de la cuestión, podríamos tener ciertas configuraciones en las cuales además de ser interpretado, PHP se trate de un lenguaje compilado.

Si PHP se tratara únicamente como lenguaje interpretado tendríamos que para cada petición que se realice, el intérprete de PHP va a ir leyendo cada script y convirtiendo el código a un lenguaje “entendible” por la máquina. Este proceso de interpretación del código puede provocar una sobrecarga del servidor cuando el número de peticiones es elevado, ya que con cada una de ellas, hay que interpretar nuevamente aquellos lugares del código por los que transcurra la petición. Dicho esto, ¿podríamos tener algún tipo de configuración en nuestro servidor que acelerara este proceso?, ¿podríamos optimizar cada petición teniendo código compilado para así no tener que interpretar cada script PHP?

Acelerador de PHP

Los aceleradores de PHP, también conocidos como OPCode Cache, son extensiones que aumentan el rendimiento de una aplicación PHP. Funcionan de manera que guardan en una caché los scripts PHP en formato bytecode (código intermedio más abstracto que el código máquina), para evitar que con cada petición el código PHP vuelva a ser analizado, interpretado y compilado. Es decir, si tenemos en nuestra configuración del servidor un acelerador de PHP podríamos entonces disponer de código PHP compilado.

Esto tiene un efecto inmediato muy positivo y es que aligera la carga del servidor al no tener que interpretar todos los scripts de la aplicación en cada petición y una reducción del uso de memoria.

Listado de aceleradores de PHP

En la página de la Wikipedia ‘List_of_PHP_accelerator’ disponemos de un listado de aceleradores de PHP disponibles: APC, eAccelerator, XCache, ZendOpcache, Windows Cache…etc.

Llama la atención que actualmente solo dos siguen con un mantenimiento actualizado: Zend Opcache (ex. Zend Optimizer+) (que funciona en todos los sistemas operativos excepto Solaris y para todos los servidores IIS, Apache y Nginx) y Windows Cache (para sistemas operativos Windows y únicamente servidores IIS)

Listado de aceleradores de PHP

Zend Opcache (ex. Zend Optimizer+)

Uno de los aceleradores de caché activos actualmente. Proporciona una ejecución rápida a través de cacheo y optimización opcode. Mejora el rendimiento almacenando scripts precompilados en la memoria compartida. A partir de la versión de PHP 5.5 se introduce por defecto Zend Opcache (ex. Zend Optimizer+) como una nueva caché con nombre OPCache que sustituyó a APC como opcode por defecto.

Si quieres saber más sobre como instalar y configurar ZendOp Cache echa un vistazo a esta página o esta otra (en español), en ambas hay multitud de ejemplos y directivas de configuración. Por ejemplo, las tres siguientes son las encargadas de configurar el máximo de memoria a utilizar para la caché, número máximo de archivos compilados y la que indica como se comprobará si un archivo ha cambiado o no para volver a compilarlo:

  • opcache.memory_consumption: indica lamemoria RAM máxima que se utilizara para el cache OPCode.
  • opcache.max_accelerated.files: define el máximo de archivos que se guardarán en el cache OPCode.
  • opcache.validate_timestamps: Sirve para validar si los archivos han cambiado desde la última vez que se guardaron en la caché.

Esto es todo, como siempre, cualquier comentario, mejora o sugerencia es bienvenida.

¡Chimpún!

Bibliografía