Podcast: Descargar (Duración: 13:55 — 22.6MB)
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.
root@host0v1b21-a82.neodigit.net ~ # 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
root@host0v1b21-a82.neodigit.net ~ # 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
root@host0v1b21-a82.neodigit.net ~ # 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