WordPress 140% más rápido con PHP 7: un caso real

La nueva versión 7 de PHP es un gran salto en cuanto a optimización y rendimiento del lenguaje. Su aparición supone llevar a PHP a niveles de velocidad y rendimiento que antes sólo se podían conseguir con HHVM de Facebook.

Por eso ha generado tanto interés y se ha escrito tanto de las mejoras sobre versiones anteriores.

WordPress lleva más de 9 meses preparándose para PHP 7 y desde la versión 4.3 se eliminaron del core las incompatibilidades que se arrastraban de PHP4. Hace tiempo que también se integró la versión 7 de PHP en los tests automatizados que se realizan continuamente del core.

Para las últimas charlas de WPO que he dado en los meetup de Valencia y Alicante había hecho bastantes pruebas y pudimos comprobar en persona las mejoras importantes en la velocidad de generación de páginas con las preview de PHP 7 en instalaciones simples de ejemplo (core y pocos plugins). Pero una cosa son este tipo de pruebas y otra un proyecto en producción. El core está preparado para funcionar perfectamente con PHP 7 pero muchos de los plugins o themes desarrollados por terceros nos pueden dar problemas si no han sido probados a fondo.

Así que desde el lanzamiento de la versión definitiva de PHP 7 el pasado 3 de diciembre llevamos un par de semanas probando en nuestro entorno de desarrollo con algunos de los sitios web que gestionamos en Blogestudio.

Nos  hemos encontrado con varios problemas, desde que la extensión oficial de memcache no funciona (hay que compilar una versión modificada disponible en github) hasta diferentes plugins que no han sido actualizados y tienen problemas de compatibilidades que hay que arreglar. Pero en todos los casos hemos conseguido realizar las modificaciones necesarias para que funcione.

Con las modificaciones realizadas para que funcionaran correctamente solo nos quedaba empezar a probar en un entorno real con el primer sitio. Elegimos Gastronomiaycia.com como web con bastante tráfico (más de 5 millones de páginas vistas) en el que realizar las primeras pruebas. Al estar con una arquitectura cloud balanceada entre diversos frontales montando por NFS todo el código y ficheros nos permitió levantar fácilmente un frontal adicional al que sólo accedían los editores para realizar sus tareas habituales de publicación, moderación de comentarios, etc. y de esa forma podríamos darnos cuenta de fallos adicionales en un entorno real sin molestar a los usuarios finales.

Tras casi una semana con ese escenario y sin encontrar grandes problemas decidimos hace un par de días actualizar a PHP 7 el resto de frontales y pasar a probar el rendimiento real con toda la carga de usuarios.

El resultado está siendo muy bueno, no hemos tenido ningún problema de estabilidad, se están consiguiendo mejoras en cuanto a velocidad en generación de páginas muy importantes y estamos teniendo un consumo de CPU mucho más bajo.

Mejoras de velocidad

Impresionante: un 140% de mejora sobre la anterior versión 5.6.16 que usábamos.

reqs php7

Este gráfico muestra los requests per second de una de las instancias cloud tipo que utilizamos en StackScale como frontales web. Son instancias no muy grandes, con 2 cores y 2 GB de ram. En estas pruebas no se ha utilizado ningún sistema de cache de objetos o de página en WordPress. Tampoco está activo query cache de MySQL. El único cache que se ha utilizado es el de ficheros PHP (opcache)

  • PHP7 con opcache: 36.46 reqs/second
  • PHP7 sin opcache: 8.99 reqs/second
  • PHP5 con opcache: 14.89 reqs/second
  • PHP5 sin opcache: 5.65 reqs/second

O lo que es lo mismo, sin cambiar de servidor podemos servir más del doble de visitas generando las páginas en la mitad de tiempo.

Carga en entorno real.

Si lo de la velocidad de generación de páginas era impresionante, la reducción en el consumo de CPU es alucinante :-)

Aquí se puede ver la reducción en los 2 últimos días, pasando de picos del 42% al 21% aproximadamente.

Consumo de CPU del frontal web (2 cores y 2 GB de ram)

consumo_cpu

Load average del frontal web (2 cores y 2 GB de ram)

load_average

Con lo que si quieres ganar en velocidad y mejorar el rendimiento de tu web te tendrás que ir planteando la posible migración a PHP7.

Nota1: Este blog también está en PHP7

Nota2: La imagen de la cabecera es de Built in Los Angeles

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *