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

WordPress: 55 millones

Según las stats de WordPress.com se acaba de llegar a los 55 millones de sitios con WordPress.

y algunos números más:

  • Se alcanzaron los 50 millones el 10 de julio del año pasado
  • 410 días desde entonces
  • 12.195 blogs por día
  • Incrementa 2 puntos en un año hasta conseguir el 16,7% de webs en el mundo que usan WordPress como CMS

Gráfico de uso de sistemas CMS

¡Enhorabuena!

Team building con fundamento.

Rico, rico y con fundamento!

El pasado viernes el equipo de Blogestudio nos dimos un pequeño homenaje en casa donde le dimos bastante marcha al horno de leña que compré el año pasado. Desde la cena de navidad no organizábamos un “acto social corporativo” y ya iba siendo hora ;-)

Siempre es buen momento para hacer algo diferente con el equipo con el que trabajas todos los días para cambiar de aires, charlar de otras cosas, etc. Además, en estos primeros meses del año teníamos varios motivos para celebración: nuevas incorporaciones al equipo, el lanzamiento de varios proyectos, nuevos clientes y el inicio de la colaboración con Fernando del Pozo como responsable de marketing de resultados entre otras cosas. Así que aprovechando que publicamos el lavado de cara de la web de Blogestudio y que venían nuestros compañeros de la oficina de Barcelona, decidimos juntarnos todos.

Team building con fundamento.

Ronda de financiación de 400.000 euros para Blogestudio

El otro día comentaba en el post de Blogestudio que habíamos completado la adquisición de Zumo de Blogs para incorporar los sites de su red a nuestra área de publicaciones online, a la que pretendemos dar un importante empujón durante el próximo año 2012.

Hoy me alegra poder dar la noticia de que hemos cerrado una ronda de financiación de 400.000 euros para Blogestudio con el objetivo de llevar a cabo ese proyecto de ampliación de nuestra empresa.

Blogestudio

La ronda se ha materializado a través de una ampliación de capital de la sociedad y un préstamo participativo de ENISA.

Esta financiación junto con la reinversión de beneficios nos va a permitir dar un importante salto en el crecimiento de la empresa y, además, con la entrada de nuevos socios aprovechamos para crear un consejo asesor que aportará mucho valor a través de su experiencia y conocimiento del sector. En breve publicaremos una nota con toda la información detallada.

Nos espera un fin de año con mucho trabajo y un 2012 ilusionante. Os iré contando ;-)

Compresión html en el servidor web con nginx

A raíz de una publicación en Google+ de Ricardo Galli donde comenta el coste del ancho de banda mensual que tiene menéame en los servidores con Amazon Web Services, me ha parecido interesante mostrar la experiencia con las estadísticas de rastreo ofrecidas por Google Webmaster Tools de un sitio web que hemos pasado a administrar hace poco en Blogestudio.

Como siempre activamos la compresión desde el inicio en los proyectos que realizamos, no había visto la comparativa de forma gráfica que ofrece el propio Google.

Administramos este sitio desde hace poco más de 2 semanas y tenemos acceso al histórico de las estadísticas de rastreo, a continuación se puede ver la drástica reducción en el consumo de ancho de banda necesario por google para su indexación desde que activamos la compresión en el servidor web nginx.

Supongo que también tendrá algún efecto positivo en el posicionamiento web, pero eso ya lo veremos :-)

Kilobytes descargados al día por Google:

kilobytes descargados al día

Ricardo comenta que estarían pagando 3 veces más en menéame. En el gráfico se puede observar que el consumo en este caso es de 5 ó 6 veces inferior desde hace 2 semanas.

Activar la compresión en el lado del servidor puede suponer un importante ahorro en costes si pagas de forma variable por el consumo de ancho de banda como es el caso de Amazon EC2.

La configuración para Nginx la comparte Ricardo también en su post:

gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_comp_level 4;
gzip_proxied any;
gzip_min_length 512;
gzip_http_version 1.0;
gzip_vary on;
gzip_types text/css text/xml application/x-javascript application/atom+xml
text/plain application/json application/xml+rss text/javascript;

Y para blogs en WordPress con sistema de cache en disco (wp-supercache o W3 total cache) podemos añadir la siguiente línea que antes de comprimir cada solicitud buscará si existe un archivo comprimido terminado en .gz en el disco duro del servidor :

gzip_static on;

Son varias las ventajas de comprimir en servidor, desde reducción del gasto en ancho de banda si es un coste variable como el caso de Amazon, un menor tiempo de descarga por parte de los usuarios o la reducción de tiempo y recursos que le hacen falta a los buscadores para indexar el sitio. A ver si tienen en cuenta que miramos por sus recursos ;-)