Hace unos días que ha salido PHP 8.0 a la luz cumpliendo así 25 años de este lenguaje de programación y en unos días también verá la luz WordPress 5.6, la próxima versión de WordPress y última de este 2020.
La idea inicial en el roadmap es que WordPress 5.6 dejase de dar soporte a PHP 5.6 y que diera soporte a PHP 8.0, pero Matt tomó la decisión de que aún era pronto para dejar de dar soporte a esa versión ya obsoleta.
Así que ahora mismo WordPress 5.6 va a dar soporte a las siguientes versiones de PHP:
- PHP 5.6.20+
- PHP 7.0
- PHP 7.1
- PHP 7.2
- PHP 7.3
- PHP 7.4
- PHP 8.0
Es muy probable que de todos los CMS que hay en el mercado ahora mismo WordPress sea el que más amplitud de uso tiene sobre PHP. Aunque tampoco hay que olvidar que WordPress, ahora mismo, tanto para WordPress 5.5 como WordPress 5.6 recomienda el uso de PHP 7.4.
Con respecto al soporte de PHP 8 y WordPress 5.6 hace unos días se lanzó el comunicado de qué y cómo WordPress va a dar soporte a esta versión, que básicamente se ha centrado en la corrección de posibles incompatibilidades, pero no la reescritura del código para dar soporte a nuevas funcionalidades.
La pregunta del millón es ¿funciona mejor WordPress con PHP 8.0?
Y, en este estudio poco científico que he hecho he intentado hacer la misma prueba con un WordPress en el que le he aplicado los contenidos del «test visual» (para que la página principal tuviera bastantes contenidos) y que ocupase bastante (tanto como 80KB de página principal). Así sería una página con algo de contenido y que se parezca más a lo que una página puede contener.
La máquina se ha montado siguiendo el siguiente tutorial de instalación con los ajustes correspondientes para las pruebas de caché.
El experimento está hecho primero con un VPS con Ubuntu 20, con las últimas versiones de cada versión de PHP disponibles, en 4 entornos:
- Config 1: 0,5 CPU, 1 GB de RAM, sin caché
- Config 2: 2 CPU, 4 GB de RAM, sin caché
- Config 3: 2 CPU, 4 GB de RAM, con caché Redis + Opcaché
- Config 4: 2 CPU, 4 GB de RAM, con caché Redis + Opcaché (con plugins)
WP OPcache
Redis Object Cache - Config 5: 2 CPU, 4 GB de RAM, con caché Redis + Opcaché (con plugins) + caché de página
WP OPcache
Redis Object Cache
WP Super Cache
La configuración del JIT de PHP 8.0 se ha hecho con:
opcache.jit_buffer_size = 128M
opcache.jit = tracing
Todos los resultados se han obtenido con la herramienta de ApacheBench y el siguiente comando:
ab -n 1000 -c 10 https://example.com/
Time taken for tests
Esta cifra no tiene valor de por sí, pero sí que nos da una idea general de si tarda más o menos en hacer la misma prueba en cada una de las configuraciones y versiones…
Cuanto menor es el valor, mejor.
Máquina | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | PHP 8.0 JIT |
---|---|---|---|---|---|---|---|---|
Config 1 | 447.389 | 280.844 | 328.814 | 320.941 | 340.995 | 286.553 | 206.136 | |
Config 2 | 168.853 | 109.090 | 133.471 | 131.392 | 122.386 | 112.081 | 77.171 | |
Config 3 | 170.710 | 109.046 | 132.616 | 126.551 | 116.518 | 112.946 | 78.298 | 74.392 |
Config 4 | 110.727 | |||||||
Config 5 | 1.302 |
Requests per second
En principio esta es la tabla con los datos más importantes, ya que son las peticiones por segundo que se pueden realizar.
Cuanto mayor es el valor, mejor.
Máquina | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | PHP 8.0 JIT |
---|---|---|---|---|---|---|---|---|
Config 1 | 2.24 | 3.56 | 3.04 | 3.12 | 2.93 | 3.49 | 4.85 | |
Config 2 | 5.92 | 9.17 | 7.49 | 7.61 | 8.17 | 8.92 | 12.96 | |
Config 3 | 5.86 | 9.17 | 7.54 | 7.90 | 8.58 | 8.85 | 12.77 | 13.44 |
Config 4 | 9.03 | |||||||
Config 5 | 768.29 |
Time per request
Los tiempos que se tarda en hacer una petición, de media entre todas las peticiones.
Cuanto menor es el valor, mejor.
Máquina | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | PHP 8.0 JIT |
---|---|---|---|---|---|---|---|---|
Config 1 | 447.389 | 280.844 | 328.814 | 320.941 | 340.995 | 286.553 | 206.136 | |
Config 2 | 168.853 | 109.090 | 133.471 | 131.392 | 122.386 | 112.081 | 77.171 | |
Config 3 | 170.710 | 109.046 | 132.616 | 126.551 | 116.518 | 112.946 | 78.298 | 74.392 |
Config 4 | 110.727 | |||||||
Config 5 | 13.016 |
Minimum Connection Times (ms)
Tiempo mínimo de conexión de todas las peticiones realizadas.
Cuanto menor es el valor, mejor.
Máquina | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | PHP 8.0 JIT |
---|---|---|---|---|---|---|---|---|
Config 1 | 882 | 617 | 746 | 656 | 711 | 557 | 591 | |
Config 2 | 465 | 239 | 271 | 284 | 288 | 238 | 167 | |
Config 3 | 474 | 229 | 331 | 259 | 267 | 231 | 158 | 253 |
Config 4 | 232 | |||||||
Config 5 | 2 |
80% Percentage of the requests served within a certain time (ms)
Cuántas peticiones se han servicio en el 80% del tiempo.
Cuanto menor es el valor, mejor.
Máquina | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | PHP 8.0 JIT |
---|---|---|---|---|---|---|---|---|
Config 1 | 4551 | 2880 | 3352 | 3288 | 3463 | 2925 | 2113 | |
Config 2 | 1734 | 1124 | 1373 | 1358 | 1267 | 1156 | 795 | |
Config 3 | 1755 | 1127 | 1368 | 1303 | 1198 | 1164 | 812 | 767 |
Config 4 | 1156 | |||||||
Config 5 | 19 |
Como decía al principio, no son datos científicos porque lo he probado en un entorno bastante simple, pero puede dar una pequeña idea de las mejoras que suponen cada una de las versiones.
Conclusiones
- PHP 8.0 funciona un 50% mejor que PHP 5.6, sin ningún lugar a dudas
- PHP 8.0 con y sin JIT, en WordPress, casi es inapreciable.
- Cuando WordPress se satura y PHP también, debido a que la máquina no da más de sí (lo que se podría considerar un «mal hosting»), se puede perder un 60% del rendimiento. Invertir en hosting es una buena idea.
- Tunear las configuraciones de base de datos, caché y otros servicios pueden aumentar el rendimiento lo suficiente como para ser sensible al rendimiento.
- Configurar correctamente los plugins de caché de página pueden aumentar la velocidad hasta un 90%.
Sobre este documento
Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.