La versión de php afecta drásticamente al rendimiento de vuestro WordPress, quizás no seáis conscientes de cómo afecta la versión de php de vuestro servidor, pero creedme si os digo que es un factor crítico a tener en cuenta.
Me pasa mi compañero en Tecnocrática Adrian un enlace al blog de Mattias Geniar https://ma.ttias.be/wordpress-php-7-1/ en el que hacía unas pruebas para ver cual era impacto de la versión de php sobre nuestro WordPress y el resultado era aplastante, php 7.1 afectaba al rendimiento muchísimo.
En su entrada del blog Mattias Geniar hace unas pruebas de rendimiento, así que decidí reproducirlas en mi servidor de Neodigit, un servidor cloud con panel, exactamente igual que cualquier otro que haya.
En mi caso mi servidor cloud tiene 2 cores y 4 gigas de RAM, pero es un servidor con TCPanel normal, como el que cualquiera puede contratar, no os penséis que es diferente a lo que hay por defecto.
Aunque el servidor soporte las versiones 5.2, 5.3, 5.4, 5.5, 5.6, 7.0 y 7.1 para emular las pruebas de Mattias sólo voy a hacer las pruebas con las versiones de php mantenidas, es decir, la 5.6 que se encuentra en soporte extendido, es decir, solo actualizaciones de seguridad, la 7.0 y la 7.1 que están en mantenimiento actualmente.
Por supuesto para poder hacer las pruebas de php es necesario no hacer trampas, así que voy a desactivar las opciones de caché de los plugins de WordPress.
Antes de hacer las pruebas de todos modos he comprobado los problemas que puede dar el actualizar a php 7.1, como el Neodigit el cambio de versión de php se puede hacer al vuelo lo que he hecho ha sido simplemente poner versión 7.1 y no he notado ningún error ni visto nada en los logs de errores de apache, así que a priori parece que nada ha dejado de funcionar y que todo funciona correctamente.
Tener en cuenta que ya probé anteriormente actualizar a la 7.1 y tuve algún problema con jetpack, pero parece que ya quedó solucionado.
Bueno, ¿vamos a empezar con las pruebas?
Antes de nada y lo primero será desactivar cualquier plugin de caché, así que desactivando estos plugins. En mi caso estoy haciendo las pruebas con un subdominio de pruebas que no tiene nada instalado, ningún plugin, nada,es decir WordPress puro para que podamos ver mejor las diferencias.
Ahora vamos a cambiar en el panel de Neodigit la versión de php a php 5.6.
Ahora vamos a ejecutar el benchmark que nos sugiere Mattias con dos conexiones concurrentes y 300 peticiones, a ver qué datos nos da, ejecutaremos el comando ab -c 2 -n 3000 y la URL.
ab -c 2 -n 300 https://URL
Ya le hemos dado y esto va a tardar un ratito, así que vamos a hacer la mágia del podcast y vamos a parar el audio y seguimos ahora, en cuanto termine.
El resultado de las pruebas completas os las dejo en la transcripción del programa.
[email protected] ~ # ab -c 2 -n 300 http://subdominio/blog/2017/02/19/hola-mundo/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking subdominio (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 300 requests
Server Software: Apache
Server Hostname: subdominio
Server Port: 80
Document Path: /blog/2017/02/19/hola-mundo/
Document Length: 57598 bytes
Concurrency Level: 2
Time taken for tests: 76.609 seconds
Complete requests: 300
Failed requests: 0
Write errors: 0
Total transferred: 17379000 bytes
HTML transferred: 17279400 bytes
Requests per second: 3.92 [#/sec] (mean)
Time per request: 510.727 [ms] (mean)
Time per request: 255.363 [ms] (mean, across all concurrent requests)
Transfer rate: 221.54 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 430 510 139.1 466 1573
Waiting: 429 509 139.0 466 1573
Total: 430 510 139.1 466 1573
Percentage of the requests served within a certain time (ms)
50% 466
66% 485
75% 518
80% 538
90% 591
95% 643
98% 1030
99% 1365
100% 1573 (longest request)
Ahora vamos a hacer la prueba con PHP versión 7.0 a ver qué tal
[email protected] ~ # ab -c 2 -n 300 http://subdominio/blog/2017/02/19/hola-mundo/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking subdomino (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 300 requests
Server Software: Apache
Server Hostname: subdominio
Server Port: 80
Document Path: /blog/2017/02/19/hola-mundo/
Document Length: 57598 bytes
Concurrency Level: 2
Time taken for tests: 50.236 seconds
Complete requests: 300
Failed requests: 0
Write errors: 0
Total transferred: 17379000 bytes
HTML transferred: 17279400 bytes
Requests per second: 5.97 [#/sec] (mean)
Time per request: 334.907 [ms] (mean)
Time per request: 167.454 [ms] (mean, across all concurrent requests)
Transfer rate: 337.84 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 288 334 102.6 312 1371
Waiting: 288 334 102.6 312 1370
Total: 288 334 102.7 312 1373
Percentage of the requests served within a certain time (ms)
50% 312
66% 317
75% 320
80% 322
90% 346
95% 461
98% 761
99% 895
100% 1373 (longest request)
Y ahora vamos a hacer la misma prueba con PHP versión 7.1 y luego comentamos las diferencias
[email protected] ~ # ab -c 2 -n 300 http://subdominio/blog/2017/02/19/hola-mundo/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking subdominio (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Finished 300 requests
Server Software: Apache
Server Hostname: subdominio
Server Port: 80
Document Path: /blog/2017/02/19/hola-mundo/
Document Length: 57598 bytes
Concurrency Level: 2
Time taken for tests: 50.916 seconds
Complete requests: 300
Failed requests: 0
Write errors: 0
Total transferred: 17379000 bytes
HTML transferred: 17279400 bytes
Requests per second: 5.89 [#/sec] (mean)
Time per request: 339.439 [ms] (mean)
Time per request: 169.720 [ms] (mean, across all concurrent requests)
Transfer rate: 333.33 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 290 339 119.9 317 1494
Waiting: 290 338 119.9 317 1494
Total: 291 339 119.9 318 1494
Percentage of the requests served within a certain time (ms)
50% 318
66% 323
75% 327
80% 329
90% 347
95% 430
98% 659
99% 1298
100% 1494 (longest request)
Una vez hechas las pruebas vamos a proceder a compararlas.
Lo primero será comparar el tiempo de ejecución total de las 300 peticiones hechas de 2 en 2 concurrentes:
En php 5.6 ha tardado 76.609 segundos, php 7.0 ha tardado 50.236 y php 7.1 ha tardado 50.916, es decir, en php 5.6 ha tardado aproximadamente un 50% extra del tiempo que php 7, entre las dos versiones de php la desviación es insignificante.
Con esta simple prueba ya vemos que el pasar a php 7 no es una opción sino una necesidad