Mejorando el rendimiento de Drupal con igbinary

Tutoriales
reading time 10

Vamos a mejorar el rendimiento de nuestro proyecto cambiando el serializador que utiliza PHP para nuestro Drupal. La idea es ganar un rendimiento extra en nuestro proyecto, quiza no sea mucho pero todo suma y más si lo complementamos con redis por ejemplo.

La idea es cambiar la forma en la que PHP serializa el contenido que va a parar, por ejemplo, a las tablas de caches de nuestro proyecto. Para ello vamos a usar la extensión denominada igbinary.

Si bien podemos crear todo manualmente ya existe un módulo contrib: Igbinary que podemos usar para no tener que crear todo desde 0, que sería básicamente crear una clase y un archivo de configuración.

Que necesitamos para poder usar este serializador, bueno aca algo importante es saber si estamos trabajando en un servidor compartido (shared server) o si tenemos un servidor propio (por ejemplo un VPS). Si el servidor es propio no hay problemas ya que podremos instalar la extensión de php, aquí les dejo la doc oficial: https://www.php.net/manual/en/book.igbinary.php

 

Instalar/Activar igbinary en un servidor dedicado (Por ejemplo un VPS)

Los comando que deberíamos usar son los siguientes, revisar para que versión de PHP lo necesitamos en cada caso (necesitaremos tener pecl instalado)

Verificamos que tenemos las herramientas mínimas necesarias instaladas

sudo apt update
sudo apt install php-pear build-essential

Instalamos igbinary usando PECL

sudo pecl install igbinary

Ahora verificamos que tengamos la extensión disponible en la versión de PHP que estamos utilizando: 

ls /etc/php/8.3/mods-available
igbinary extension

Habilitamos la extension igbinary para nuestra version del PHP

echo "extension=igbinary.so" | sudo tee /etc/php/8.3/mods-available/igbinary.ini
sudo phpenmod -v 8.3 igbinary

Reiniciamos el servicio de PHP y de apache (si se usa nginx u otro reiniciar dicho servidor según sea el caso)

sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2

Podemos verificar si esta activado ejecutando los siguientes comandos

php8.3 -m | grep igbinary
php8.3 -i | grep igbinary

También podemos verificar en Drupal ingresando a /admin/reports/status/php para ver que este activada la extensión:

drupal php info

 

Activar igbinary en un servidor compartido (shared server)

Pero si estamos en un servidor compartido, tendremos que ir a la configuración y verificiar si tenemos la opción de igbinary para activarla, por ejemplo en el caso de hostinger, si la tiene:

igbinary01

 

Configurar la extensión igbinary ya instalada y/o activada

Ahora que ya lo tenemos instalado, vamos a configurarlo en nuestro Drupal para poder usarlo

Primero tenemos que ir a nuestro php.ini y agregar la siguiente línea

apc.serializer=igbinary

Nota: Si no tenemos acceso al php.ini (por ejemplo en los shared servers), podemos agregar dicha linea usando el file .htaccess

php_value apc.serializer igbinary

Segundo vamos a instalar el módulo contrib igbinary

 composer require 'drupal/igbinary:^2.0@alpha'
 drush en -y igbinary
 drush cr

Con esto ya tendremos la clase IgbinarySerialize.php que usaremos en la config, vamos a ello. Hay varias formas de configuración, la más sencilla es simplemente en nuestro file de configuración 

Editando el settings.local.php para agregar el file services que nos provee el módulo igbinary que instalamos en el paso anterior

/**
 * Enable local development services.
 */
$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/default/services.yml';
$settings['container_yamls'][] = DRUPAL_ROOT . '/modules/contrib/igbinary/igbinary.services.yml';

Luego de esto limpiamos cache y listo, ya tenemos implementado el cambio que buscábamos.

Ahora veamos una comparativa de este mismo sitio antes y después de haber implementados estos cambios. Las pruebas estan realizadas con el sitio https://app.speedvitals.com/

Antes

benckmark before

Después

benckmark after

Como podemos ver, en este caso ha mejorado el rendimiento.

Si bien hay mucho por hacer, esto también suma al rendimiento general de nuestro sitio y sin demasiado esfuerzo.

Este post esta inspirado en un video subido por el usuario @nireneko, el link al video de youtube es el siguiente: https://youtu.be/aCkI_BJVyD8

Hasta la próxima !