Servicios Host
 
 

PHP 8.0 La nueva versión

Septiembre 30, 2021 - Tiempo de lectura: 12 minutos

Image

Esta versión viene con nuevas funciones y cambios para proporcionar el mejor rendimiento posible para sus proyectos web.

Dado que se trata de una actualización importante, animamos a todos los usuarios que migren a la última versión a familiarizarse con los nuevos cambios que cubriremos en este artículo.

Por qué necesita PHP 8.0 ?

Las últimas pruebas de referencia de Phoronix muestran que PHP 8.0 se está desempeñando un 10% mejor que sus predecesores. Estos datos sugieren un futuro prometedor para los sitios web y aplicaciones basados ​​en PHP.

Mejor aún, la prueba ni siquiera se realizó con el compilador JIT, una nueva función de optimización introducida con PHP 8.0. Los desarrolladores pueden esperar un rendimiento mucho más rápido si está habilitado.

Además, la versión implementa nuevas características para hacer que la codificación sea mucho más rápida y limpia, lo que reduce la cantidad de código repetitivo y redundante.

Dado que se trata de una actualización de versión, es probable que su sitio web experimente cambios que podrían romperlo si realiza la transición a PHP 8.0 sin realizar modificaciones previas. Para ayudarlo a prepararse para la migración, lo guiaremos a través de las últimas funciones.

Novedades de PHP 8.0

Hay muchos cambios que vienen con la nueva actualización junto con muchas características nuevas. Exploremos las novedades y los cambios en PHP 8.0.

Compilador JIT (Just-in-Time)

El compilador JIT es una de las actualizaciones más interesantes de PHP 8.0. Esta característica tiene como objetivo trabajar con opcache para mejorar el rendimiento en la ejecución de scripts.

Qué es JIT ?

JIT, abreviatura de just-in-time, compila el código de operación en código de máquina justo antes de ejecutarlo para su salida. Para comprender lo que eso significa y cómo funciona, necesitamos comprender las etapas de ejecución del script PHP, que son:

  • Análisis léxico. Este paso es donde Zend Engine, el intérprete de PHP, traduce el código en tokens legibles por máquina.
  • Analizador. El intérprete analiza los tokens para generar el árbol de sintaxis abstracta (AST), una representación en forma de árbol que muestra cómo funciona el código.
  • Compilación. El intérprete convierte los nodos AST en código de operación, que es una instrucción legible por máquina que le dice a la máquina virtual Zend (VM) qué operación realizar.
  • Ejecución El intérprete entrega el código de operación a Zend VM, que compilará el código de operación en código de máquina para su ejecución.

Este proceso utiliza una cantidad significativa de recursos del servidor, especialmente si un script PHP recibe solicitudes repetidas.

Es por eso que PHP 5.5 introdujo la extensión opcache, que almacena el código de operación desde la etapa de compilación.

Cuando el servidor recibe una nueva solicitud para el mismo script, el intérprete puede ejecutar inmediatamente el código de operación desde el opcache. De esa forma, no es necesario reiniciar el proceso de ejecución desde el principio.

PHP 7.4 agregó una función de precarga varios años después para que los scripts de opcache precompilen en el código de operación durante el inicio. Como resultado, el intérprete puede entregar inmediatamente el código de operación para su ejecución cuando el servidor recibe por primera vez una solicitud del script.

A pesar de estas ventajas, existen varias desventajas. Una es que hacia el final del proceso, Zend VM todavía necesita convertir el código de operación en código de máquina antes de ejecutarlo, lo que puede requerir mucho tiempo y recursos.

Ahí es donde entra el compilador JIT. Compilará el código de operación en código de máquina durante su primera ejecución para prepararse para la siguiente ejecución.

Cuando hay una solicitud de un script compilado con JIT, PHP lo ejecutará directamente por la CPU en lugar de Zend VM, lo que resulta en un rendimiento más rápido. Así es como se verá el script de la etapa de ejecución en PHP 8.0, en comparación con la versión anterior:

Qué beneficios trae JIT para mí ?

Según RFC, habilitar JIT es la forma más importante de mejorar el rendimiento de PHP. Por lo tanto, omitir esta función puede hacer que se pierda un beneficio importante.

Afortunadamente, las pruebas recientes muestran que el compilador JIT ha podido mejorar el proceso de ejecución del script, especialmente si usa el motor de seguimiento.

Los puntos de referencia sintéticos de PHP revelan un aumento de velocidad tres veces mayor después de habilitar el modo de seguimiento. En aplicaciones de larga ejecución, puede esperar ver una mejora del rendimiento hasta dos veces

Para los usuarios y desarrolladores de WordPress, el compilador JIT también puede agregar un ligero impulso, aunque puede que no sea tan significativo.

Deberá reducir el TTFB, optimizar la base de datos y reducir el número de solicitudes HTTP para obtener el mejor rendimiento posible. Dicho esto, los desarrolladores de PHP continuarán los esfuerzos de mejora mediante el uso de perfiles y optimizaciones especulativas.

Si desea habilitar JIT, asegúrese de que la extensión opcache esté activa.

Nuevas funciones en PHP 8.0

Hay otras características interesantes además de JIT. Esta sección proporcionará una descripción general de las principales adiciones y cambios en PHP 8.0.

Tipos de unión 2.0

En muchos casos, una función puede usar más de un tipo, pero no era posible especificar esto en versiones anteriores de PHP a menos que declarara los tipos usando DocComments.

A continuación, se muestra un ejemplo:

class Number { /** * @var int|float $number */ private $number; /** * @param int|float $number */ public function setNumber($number) { $this->number = $number; } /** * @return int|float */ public function getNumber() { return $this->number; } }

PHP anterior introdujo versiones de dos tipos de unión especiales: Nullable (usando la sintaxis? Type) e Iterable (para arreglo y Traversable).

Sin embargo, lo que faltaba era el soporte nativo para tipos de unión arbitrarios, que es una característica que viene con PHP 8.0. Ahora, simplemente puede escribir los tipos que la función puede usar y separarlos usando la sintaxis T1 | T2 |…, así:

class Number { private int|float $number; public function setNumber(int|float $number): void { $this->number = $number; } public function getNumber(): int|float { return $this->number; } }

Tenga en cuenta que el ejemplo ya no incluye @var, @param o @return, lo que hace que el código sea mucho más limpio.

Puede usar tipos de unión para propiedades, argumentos y tipos de retorno, aunque hay algunas limitaciones a tener en cuenta. Consulte el RFC para obtener más información.

Argumentos nombrados

En versiones anteriores de PHP, pasar múltiples argumentos a una función requerirá usar las posiciones de orden en las que se declararon los parámetros, así:

array_fill(0, 100, 50);

Un desafío con esto es que es posible que no recuerde el orden de los parámetros. Además, puede ser difícil entender a qué se refiere cada uno cuando vuelve a visitar el código.

Con PHP 8.0, tiene la opción de agregar un nombre al lado del parámetro para que pueda pasarlo a una función usando su nombre en su lugar. Así es como suele verse:

// Using positional arguments:

array_fill(0, 100, 50);

// Using named arguments:

array_fill(start_index: 0, num: 100, value: 50);

Una ventaja de esta función es que, al aprender lo que hace cada parámetro, el proceso general será mucho más rápido.

Además, los argumentos con nombre son independientes del orden, por lo que no tendrá que recordar las posiciones de orden de cada parámetro en sus declaraciones. Por lo tanto, el ejemplo siguiente tendrá el mismo significado que el anterior:

array_fill(value: 50, num: 100, start_index: 0);

También es posible mezclar argumentos con nombre y posicionales, siempre que los nombrados ocupen el segundo lugar. En otras palabras, el siguiente código es aceptable:

test($foo, param: $bar);

Por otro lado, este código resultará en un error:

test(param: $bar, $foo);

Finalmente, con argumentos con nombre, solo necesita escribir parámetros cuyos valores predeterminados desea sobrescribir. No dude en omitir los que tienen valores predeterminados que le gustaría mantener. A continuación, se ofrece un ejemplo en el RFC:

htmlspecialchars($string, default, default, false);

// vs

htmlspecialchars($string, double_encode: false);

Compartir:
facebook twitter whatsapp linkedin
Stats