H
hector150293
Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
El día 3 de diciembre se dio a conocer el lanzamiento oficial de PHP 7, desde hace algún tiempo se esperaba esta noticia ya que hubo muchos rumores entre los cuales se destacaba un aumento substancial en cuanto a la velocidad.
Veamos algunas de las novedades que trae consigo PHP 7
1. Enormes Mejoras de Rendimiento
El objetivo principal de PHPNG fue a traer mejoras en el rendimiento que al menos coincidan con lo que ofrece Facebook HHVM.
Zeev Suraski de Zend ha escrito un artículo en el que admitió abiertamente que toman HHVM como un competidor de (el motor basado en Zend) PHP. Esto confirma que la liberación de HHVM y luego el lenguaje Hack de Facebook desencadenó este gran interés de Zend en continuar liderando la implementación principal de PHP.
En ese artículo también demuestra cuánto ha evolucionado la rama PHPNG en términos de mejoras en el rendimiento.
2. Motor JIT
Según Dmitry Stogov de Zend, el inició del desarrollo de PHPNG se inicio con la motivación de investigar la implementación de un motor de JIT para el PHP basado en el Motor Zend.
Un motor JIT puede compilar dinámicamente Zend opcodes en código máquina nativo que finalmente haría que el código corriera más rápido la próxima vez que se ejecutara.
Mientras que la aplicación de un motor JIT aún no se ha incorporado a la rama PHPNG, Dmitry mencionó en mayo que él "invirtió una cantidad significativa de tiempo experimentando con JIT e incluso creó un PoC (nota del traductor: Proof of Concept, Prueba de Concepto) de un complilador JIT de LLVM transparente embebido dentro de OPCache".
Así que está sin duda en los planes de Zend para permitir traer un motor JIT a PHP 7, así según Zeev Suraski esto puede "impulsar el rendimiento a través del techo para una ya ultra rápida implementación".
3. AST: Abstract Syntax Tree
Recientemente Nikita Popov propuso la implementación de la generación de un árbol de sintaxis abstracta (AST) como un paso intermedio para el proceso de compilación de PHP.
No es la primera vez Nikita propone la implementación de un AST como paso de compilación. Ya lo había propuesto en el 2012.
Un AST ofrecería varias ventajas que son descritas en sus propuestas, incluyendo la posibilidad de más optimizaciones que harían que PHP se ejecutara aún más rápido.
En la última propuesta describe la posibilidad de exponer el AST a las extensiones de PHP y a las aplicaciones de usuarios. Eso podría abrir espacio para herramientas más interesantes como analizadores de código estático que a menudo son útiles para detectar errores o posibles optimizaciones a nivel de código fuente de nuestro código PHP.
Nikita ya proporcionó un parche para implementar el soporte AST sobre la rama PHPNG.
4. Programación Asincrónica
Esto puede no ser obvio para todos, pero últimamente, Julien Pauli, uno de los responsables de las últimas versiones de PHP, ha estado comentando sobre refactorizar la capa de multiplexación de entrada-salida de PHP.
Esto parece ser un paso necesario para implementar un loop del eventos. Un loop de eventos es parte del código que se encarga de controlar los eventos relacionados con las operaciones de E/S y otras tareas asincrónicas que pueden estar pasando en paralelo, como accesos a archivos, redes, bases de datos, temporizadores, etc...
En términos más sencillos, esto permitiría a futuras versiones de PHP implementar fácilmente el soporte para la ejecución de tareas paralelas dentro de la misma petición, impulsando el rendimiento de PHP potencialmente a un nivel totalmente diferente.
Esto es algo que comenté varias veces antiormente. Una de las últimas veces fue en el artículo sobre las mejoras de Facebook Hack.
Por supuesto, no consigues mejoras de rendimiento automáticamente con sólo habilitar el soporte para la programación asincrónica. El nuevo código PHP debe escribirse de forma tal que aproveche el potencial de la programación asincrónica.
A pesar del esfuerzo inicial de Jean Pauli, esto no significa que el soporte nativo para programación asincrónico se habilitará en PHP 7.
Sin embargo, puesto que Facebook Hack ya proporciona soporte para programación asincrónica en una forma muy elegante, no me sorprendería si los desarrolladores del núcleo de PHP se movieran más rápidamente para hacer que la programación asincrónica en PHP estuviera disponible muy pronto.
5. Servidor Web Standalone Multi-threading
Esto es algo que no parece estar en los planes para PHP 7 pero es algo que haría más escalable a PHP.
Ya se puede ejecutar PHP desde servidores Web multi-threaded como ngynx, lighttpd o incluso Apache en el modo worker, sin embargo esto no es lo mismo que tener a PHP corriendo en su propio servidor Web multi-threading.
Un servidor Web multi-threading puede manejar muchas peticiones simultáneas utilizando un mismo pool de memoria, evitando así la pérdida de memoria que ocurre cuando se ejecuta PHP como FastCGI o en Apache en modo pre-fork.
También permitiría a PHP usar una único pool de conexiones de base de datos, minimizando así el número de conexiones simultáneas de base de datos abiertas durante picos de acceso.
HHVM ya puede funcionar como servidor Web multi-threading independiente desde los días cuando el proyecto fue llamado compilador HipHop PHP.
Esto permitió a Facebook reducir un poco los servidores necesarios para manejar la alta carga de accesos que tienen.
A pesar de que ejecutar PHP como un servidor Web multi-threading independiente no está todavía en los planes para PHP 7, ciertamente es algo que sería bueno tener, al menos para PHP 8.
Veamos algunas de las novedades que trae consigo PHP 7
1. Enormes Mejoras de Rendimiento
El objetivo principal de PHPNG fue a traer mejoras en el rendimiento que al menos coincidan con lo que ofrece Facebook HHVM.
Zeev Suraski de Zend ha escrito un artículo en el que admitió abiertamente que toman HHVM como un competidor de (el motor basado en Zend) PHP. Esto confirma que la liberación de HHVM y luego el lenguaje Hack de Facebook desencadenó este gran interés de Zend en continuar liderando la implementación principal de PHP.
En ese artículo también demuestra cuánto ha evolucionado la rama PHPNG en términos de mejoras en el rendimiento.
2. Motor JIT
Según Dmitry Stogov de Zend, el inició del desarrollo de PHPNG se inicio con la motivación de investigar la implementación de un motor de JIT para el PHP basado en el Motor Zend.
Un motor JIT puede compilar dinámicamente Zend opcodes en código máquina nativo que finalmente haría que el código corriera más rápido la próxima vez que se ejecutara.
Mientras que la aplicación de un motor JIT aún no se ha incorporado a la rama PHPNG, Dmitry mencionó en mayo que él "invirtió una cantidad significativa de tiempo experimentando con JIT e incluso creó un PoC (nota del traductor: Proof of Concept, Prueba de Concepto) de un complilador JIT de LLVM transparente embebido dentro de OPCache".
Así que está sin duda en los planes de Zend para permitir traer un motor JIT a PHP 7, así según Zeev Suraski esto puede "impulsar el rendimiento a través del techo para una ya ultra rápida implementación".
3. AST: Abstract Syntax Tree
Recientemente Nikita Popov propuso la implementación de la generación de un árbol de sintaxis abstracta (AST) como un paso intermedio para el proceso de compilación de PHP.
No es la primera vez Nikita propone la implementación de un AST como paso de compilación. Ya lo había propuesto en el 2012.
Un AST ofrecería varias ventajas que son descritas en sus propuestas, incluyendo la posibilidad de más optimizaciones que harían que PHP se ejecutara aún más rápido.
En la última propuesta describe la posibilidad de exponer el AST a las extensiones de PHP y a las aplicaciones de usuarios. Eso podría abrir espacio para herramientas más interesantes como analizadores de código estático que a menudo son útiles para detectar errores o posibles optimizaciones a nivel de código fuente de nuestro código PHP.
Nikita ya proporcionó un parche para implementar el soporte AST sobre la rama PHPNG.
4. Programación Asincrónica
Esto puede no ser obvio para todos, pero últimamente, Julien Pauli, uno de los responsables de las últimas versiones de PHP, ha estado comentando sobre refactorizar la capa de multiplexación de entrada-salida de PHP.
Esto parece ser un paso necesario para implementar un loop del eventos. Un loop de eventos es parte del código que se encarga de controlar los eventos relacionados con las operaciones de E/S y otras tareas asincrónicas que pueden estar pasando en paralelo, como accesos a archivos, redes, bases de datos, temporizadores, etc...
En términos más sencillos, esto permitiría a futuras versiones de PHP implementar fácilmente el soporte para la ejecución de tareas paralelas dentro de la misma petición, impulsando el rendimiento de PHP potencialmente a un nivel totalmente diferente.
Esto es algo que comenté varias veces antiormente. Una de las últimas veces fue en el artículo sobre las mejoras de Facebook Hack.
Por supuesto, no consigues mejoras de rendimiento automáticamente con sólo habilitar el soporte para la programación asincrónica. El nuevo código PHP debe escribirse de forma tal que aproveche el potencial de la programación asincrónica.
A pesar del esfuerzo inicial de Jean Pauli, esto no significa que el soporte nativo para programación asincrónico se habilitará en PHP 7.
Sin embargo, puesto que Facebook Hack ya proporciona soporte para programación asincrónica en una forma muy elegante, no me sorprendería si los desarrolladores del núcleo de PHP se movieran más rápidamente para hacer que la programación asincrónica en PHP estuviera disponible muy pronto.
5. Servidor Web Standalone Multi-threading
Esto es algo que no parece estar en los planes para PHP 7 pero es algo que haría más escalable a PHP.
Ya se puede ejecutar PHP desde servidores Web multi-threaded como ngynx, lighttpd o incluso Apache en el modo worker, sin embargo esto no es lo mismo que tener a PHP corriendo en su propio servidor Web multi-threading.
Un servidor Web multi-threading puede manejar muchas peticiones simultáneas utilizando un mismo pool de memoria, evitando así la pérdida de memoria que ocurre cuando se ejecuta PHP como FastCGI o en Apache en modo pre-fork.
También permitiría a PHP usar una único pool de conexiones de base de datos, minimizando así el número de conexiones simultáneas de base de datos abiertas durante picos de acceso.
HHVM ya puede funcionar como servidor Web multi-threading independiente desde los días cuando el proyecto fue llamado compilador HipHop PHP.
Esto permitió a Facebook reducir un poco los servidores necesarios para manejar la alta carga de accesos que tienen.
A pesar de que ejecutar PHP como un servidor Web multi-threading independiente no está todavía en los planes para PHP 7, ciertamente es algo que sería bueno tener, al menos para PHP 8.