Es innegable que PHP está viviendo una nueva juventud, en algunos círculos se habla de renacimiento y todo viene propiciado por 2 elementos clave: la comunidad y el lanzamiento de PHP 7.
Por un lado la comunidad ha madurado, prueba de ello es el enfoque centrado en la calidad del código que cada día está más extendido, fundamental en las librerías y frameworks que ofrecen los principales actores de la escena PHP hoy en día. Otro punto clave ha sido la generalización del uso de composer como gestor de dependencias que a su vez ha favorecido una mentalidad enfocada a las pequeñas librerías de calidad en lugar de grandes paquetes mediocres.
El otro elemento revulsivo que ha causado gran impacto es el lanzamiento de la versión 7 de PHP que tras la cancelación de PHP 6 y algunos retrasos llega llena de características nuevas (declaraciones de tipo escalar y de retorno, clases anónimas, null coalescing operator, etc ) pero sobretodo unas espectaculares mejoras de rendimiento cercanas al 100% en muchos casos y que acercan a PHP a los niveles de rendimiento de HHVM.
Para probar el impacto real que tiene esa mejora de rendimiento sobre un sistema y dada la experiencia que tenemos en Acceseo con Prestashop, qué mejor que utilizar la famosa plataforma de e-commerce. Un proyecto de código abierto que pone de manifiesto el interés por la mejora de su código con el proceso de inclusión de componentes de Symfony que ha empezado.
Utilizaremos tres instalaciones limpias de prestashop con los datos de ejemplo que vienen incluidos funcionando sobre máquinas virtuales gestionadas usando vagrant con ubuntu/vivid64 como base con la única diferencia de la versión de PHP o HHVM: una con PHP 5.6, otra con PHP 7 y la otra con HHVM, a continuación se detalla algunos puntos interesantes de la configuración de PHP:
Máquina virtual PHP5
Versión PHP: 5.6.4 (paquete php5 existente en los repositorios de Ubuntu)
Versión Apache: 2.4.10
Server API: Apache 2.0 Handler
Máquina virtual PHP7
Versión PHP: 7.0.2-2 (paquete php7.0 disponible en el PPA de Ondřej Surý ondrej/php)
Versión Apache: 2.4.10
Server API: Apache 2.0 Handler
Máquina virtual HHVM
HHVM Version 3.11.0 (paquete hhvm disponible en el repositorio de HHVM)
PHP Version 5.6.99-hhvm
hhvm.server.type fastcgi
– La máquina PHP5 utilizará el paquete php5
– La máquina PHP7 utilizará el paquete php7.0 disponible en el PPA de Ondřej Surý ondrej/php
– La máquina HHVM utilizará el paquete hhvm disponible en el repositorio de HHVM.
Puesto que es una prueba orientativa vamos a simplificarla todo lo posible y se realizarán todas las medidiciones sobre un ordenador con una CPU Intel i7-4720HQ y 8 GB de memoria RAM de los que se ceden a las máquinas virtuales 1.5 GB de memoria y 3 cores. La prueba consisitirá en medir utilizando la utilidad ApacheBench 2.3 el tiempo de carga de 1000 peticiones realizando como máximo 10 de manera simultánea.
Comparativa de tiempos de respuesta
Versión | Tiempo mínimo | Media | Mediana | Tiempo máximo | Peticiones por segundo |
---|---|---|---|---|---|
PHP 5.6.4 | 188 ms | 491 ms | 491 ms | 813 ms | 20,32 |
PHP 7.0.2 | 104 ms | 284 ms | 287 ms | 478 ms | 35,14 |
HHVM 3.11.0 | 107 ms | 250 ms | 251 ms | 959 ms | 39,89 |
Conclusiones
Como podemos observar en la tabla HHVM sigue dominando en cuanto a rendimiento pero con la llegada de PHP 7 la diferencia se ha recortado de manera notable. Teniendo en cuenta la diferencia de rendimiento entre PHP 5.6 y PHP 7 la actualización, siempre que el proyecto nos lo permita, es más que recomendable.