Comparando WordPress de PHP 5.6 a PHP 8.0

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áquinaPHP 5.6PHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.0 JIT
Config 1447.389280.844328.814320.941340.995286.553206.136
Config 2168.853109.090133.471131.392122.386112.08177.171
Config 3170.710109.046132.616126.551116.518112.94678.29874.392
Config 4110.727
Config 51.302
Los datos son en segundos (con 3 decimales)

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áquinaPHP 5.6PHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.0 JIT
Config 12.243.563.043.122.933.494.85
Config 25.929.177.497.618.178.9212.96
Config 35.869.177.547.908.588.8512.7713.44
Config 49.03
Config 5768.29
Los datos son en peticiones por segundo (con 2 decimales)

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áquinaPHP 5.6PHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.0 JIT
Config 1447.389280.844328.814320.941340.995286.553206.136
Config 2168.853109.090133.471131.392122.386112.08177.171
Config 3170.710109.046132.616126.551116.518112.94678.29874.392
Config 4110.727
Config 513.016
Los datos son en milisegundos (con 3 decimales)

Minimum Connection Times (ms)

Tiempo mínimo de conexión de todas las peticiones realizadas.

Cuanto menor es el valor, mejor.

MáquinaPHP 5.6PHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.0 JIT
Config 1882617746656711557591
Config 2465239271284288238167
Config 3474229331259267231158253
Config 4232
Config 52
Los datos son en milisegundos

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áquinaPHP 5.6PHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.0 JIT
Config 14551288033523288346329252113
Config 2173411241373135812671156795
Config 3175511271368130311981164812767
Config 41156
Config 519
Los datos son en milisegundos

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.