Acelerando Drupal: comparativa entre PHP 5.6, PHP 7 y HHVM

PHP 7 vio la luz hace ya unos meses, así que ya es hora de compararlo con HHVM (“el PHP de Facebook”) para ver quién es el más rápido de los dos. Para ello he usado Drupal 8 y Drupal 7 (en breve también comparativa usando Symfony 3).

HHVM es una máquina virtual, desarrollada por Facebook, que permite ejecutar PHP (y Hack, una “evolución” de PHP hacia un tipado más fuerte) y que, en general, consigue unas mejoras de rendimiento importantes con respecto a PHP 5.6 (en nuestros proyectos, en torno al 200 %). HHVM es usado por Facebook, Wikipedia y varios gigantes más.

Con la llegada de PHP 7, en cambio, no está claro si HHVM es más rápido o no. Hay opiniones para todos los gustos, desde los que dicen que HHVM es mejor hasta los que opinan todo lo contrario. (Algunas opiniones más: aquí, aquí y aquí).

¡Vaya lío! Entonces, ¿en qué quedamos? Uno es bastante escéptico así que ¡manos a la obra!

  • He comparado Drupal 8 y Drupal 7 con y sin caché.
  • Los he probado bajo PHP 5.6 con/sin OPcache, PHP 7 con/sin OPcache, y HHVM 3.12.1
  • Pruebas con apachebench durante 60 segundos con 15 usuarios concurrentes
  • Se obtiene la media de 5 ejecuciones (la primera ejecución se usa para calentar los cachés y se descarta)

Drupal 8

1

  • HHVM gana por bastante a PHP 7, y es casi el doble de rápido que PHP 5.6 + OPcache
  • Es curioso que PHP 7 sin OPcache sea el más lento
  • Como Drupal 8 no tiene forma de desactivar el caché (no al menos de una forma sencilla) este test equivaldría al de «Drupal 7 con page cache» que veremos más adelante

Drupal 7 sin page cache

2

Similar a Drupal 8, con la salvedad de que HHVM es todavía más rápido con respecto a PHP 5.6 + OPcache

Drupal 7 con page cache

3

  • El caché de Drupal 7 hace maravillas y hace que sea más del doble de rápido que Drupal 8
  • PHP 5.6 y PHP 7 están a la par, lo cual es lógico ya que con el caché activado, casi no se ejecuta PHP
  • Aún así, HHVM es un poco más rápido

Drupal 8 y PHP 7 sin concurrencia

En las pruebas he detectado un comportamiento un tanto errático de PHP 7, con fallos de ejecución en momentos de carga alta, por lo que también he hecho la misma prueba sin concurrencia (en este caso sólo con Drupal 8 y PHP 7, que son los entornos que estamos usando ya en algunos proyectos):

4
5

Sin concurrencia, HHVM y PHP 7 son casi iguales, pero cuando ya entramos en 15 usuarios concurrentes, HHVM mejora a PHP 7 en ese 40% que veíamos previamente.

Conclusiones

  • Con concurrencia, HHVM es más rápido que PHP 5.6 y PHP 7, tanto en Drupal 7 como en Drupal 8
  • Con PHP 5.6, la diferencia es de entorno al 200 %
  • Con PHP 7, en Drupal 8 hay una diferencia significativa, del 40 %
  • Sin concurrencia, HHVM y PHP 7 son prácticamente iguales

El dato de que Drupal 8 sea un 40% más rápido en HHVM que en PHP 7 es interesante.

También es cierto que PHP7 está todavía un poco verde (en las pruebas fallaba cada dos por tres cuando le metía un poco de concurrencia) así que todavía podrá mejorar algo.

En resumen, HHVM puede ser una buena alternativa a PHP 5.6. Pero con respecto a PHP 7, la mejora del 40 % quizás no sea suficiente para pasar a entornos de producción. ¡Seguiremos de cerca el tema!

Y vosotros, ¿qué experiencia habéis tenido con HHVM? ¿Os parece una alternativa real?

Entorno

  • Dell OptiPlex 960, Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz, 8 Gb RAM
  • Ubuntu 14.04.4 LTS
  • Apache 2.4.18
  • Mysql 5.5.47
  • Drupal en instalación Vanilla con 2 nodos de tipo article en portada