Optimiser les performances de Drupal 7 pour des sites à fort trafic

Les principaux problèmes rencontrés sur des sites à fort trafic sont bien souvent des problèmes de performance. En effet il devient très vite difficile et pénible de maintenir un site sous Drupal avec plusieurs centaines de milliers de contenu sans passer par l’étape optimisation.

Pour les webmasters et site builder

Les caches natifs

La première étape, une des plus importantes peut être, est l’activation des caches natifs de Drupal. Cela peut paraître comme une évidence pour certain mais nombreux sont les sites qui tournent encore sans les caches de pages alors qu’il suffit tout simplement de cocher une case.

cache drupal

Activer vos caches : http://www.mon-site.com/admin/config/development/performance

Sur cette même page vous aurez également la possibilité de compresser vos pages et d’agréger vos fichier CSS et JavaScript, il serait bête de s’en priver ! L’agrégation de vos fichiers va permettre d’envoyer moins de requêtes au serveur et donc d’améliorer significativement vos performances.

Cache CSS/JS

Tous les caches sont importants

 

Certains gros modules contributeurs ont aussi leur système de cache, il est donc important de ne pas les oublier ! Quelques exemples :

  • Views : Possibilité de mettre en cache la requête ou tout l’affichage
  • Panels : Possibilité de mettre en cache chacun des blocs.
  • Date : Mise en cache des dates Drupal
  • etc.
views cache

Paramétrage du cache de Views

Désactiver les modules inutiles et gourmands en ressources

Avec Drupal, il est courant d’installer et de tester un grand nombre de modules. Il est important de désactiver tous ces modules inutiles à la mise en production de votre projet. De plus, certains modules indispensables durant le développement, le sont beaucoup moins une fois le site en production et vous offriront un gain de performances non négligeable, comme les modules Devel ou encore tous les modules de User Interface qui ont moins d’intérêt une fois le projet terminé.

Par ailleurs, certains modules natifs de Drupal et souvent activés par défaut, sont très gourmands en ressources et sollicitent énormément la base de donnée. C’est notamment le cas pour le module de Watchdog (database logging) et de Statistics. Il est donc préférable de n’utiliser ces modules que si votre application le nécessite vraiment.

Les modules qui vous feront gagner du temps

Enfin l’installation de certains modules contributeurs vous permettra de gagner précieuses secondes dans le chargement de vos pages.
Le plus connu et le plus efficace est le module Entity Cache qui comme son nom l’indique met en cache toutes les entités de Drupal (node, taxonomy, file, user ..) et offre donc un gros gain de temps lors du chargement de vos pages. Toutes les entités, une fois en cache, se charge beaucoup plus rapidement et apporte plus de fluidité à vos pages.

Pour les utilisateurs de Drupal Commerce, il existe une version dédié d’Entity Cache pour les nouvelles entités de Drupal Commerce, Commerce Entity Cache.

Si vous êtes un amateur de Views et l’utilisez souvent dans vos projets, alors jetez un œil au module Views Litepager. Comme indiqué dans la description du module, Views Litepager vous offre un pager allégé qui améliore les performances des sites avec beaucoup de contenus.

Pour les développeurs

La Cache API

Durant les développements de modules, il est important de se servir de l’API de Drupal afin de mettre en cache toutes les parties lourdes de votre code et ainsi éviter de refaire ces calculs à chaque chargement de page. La cache API nous permet donc de pallier ce problème et offre via deux fonctions très simples à utiliser, la possibilité de stocker n’importe quelle variable de votre module (cache_set) directement dans le cache Drupal de votre choix et de le récupérer à n’importe quelle moment (cache_get). Vous avez même la possibilité d’indiquer la durée de vie de votre variable dans le cache.

Exemple d’implémentation de la cache API :

Cache API

Implémentation standard de la cache API

drupal_static()

A l’inverse de la Cache API, la fonction drupal_static() permet de stocker des données de façon temporaire dans une variable statique globale à votre application. C’est à dire  que votre variable statique ne sera disponible que durant le chargement de votre page.
Si tout au long du chargement de la page, votre fonction est appelé plusieurs fois, alors vous avez accès à l’information d’une manière beaucoup plus rapide.

drupal_static

Exemple d’utilisation de la fonction drupal_static()

 Optimiser le serveur

Une fois que nous avons poussé Drupal dans ses limites, les seules optimisations possibles sont les optimisations côté serveur. Plusieurs solutions s’offrent à nous pour des sites dont la plupart du trafic serait anonyme.

Boost

La première solution s’appelle Boost et permet comme son nom l’indique de booster les performances de votre serveur en générant des pages HTML statiques. Boost va mettre en cache et compresser vos pages, CSS et Javascript afin d’avoir un chargement quasi instantané et donc éviter de faire des requêtes en base de donnée à chaque chargement de page. Le schéma ci-dessous explique avec plus de détail le fonctionnement de ce merveilleux module.

module drupal boost

Fonctionnement du module Boost

N’hésitez pas à bien lire et relire la documentation de ce module qui peut s’avérer un peu plus compliquée à installer qu’un module classique. Il vous faudra ainsi, en plus du paramétrage, apporter quelques modifications aux fichiers .htaccess et robots.txt. Encore une fois, tout est décrit étape par étape dans la documentation du module.

Le principal avantage de ce module et qu’il ne nécessite pas de modification côté serveur donc c’est la solution à privilégier si vous êtes en hébergement mutualisé et que vous n’avez pas la main sur le serveur. Pour les personnes qui disposent d’un serveur dédié, la prochaine solution vous offrira de meilleurs performance.

 Varnish

Varnish, avant d’être un module Drupal, est un serveur de cache HTTP qui fait partie de la famille des Reverse Proxy. Un Reverse Proxy est un type de serveur frontal qui se dispose entre entre le client et votre serveur à l’inverse d’un proxy classique qui lui se situe entre le client et internet. Il permet de soulager votre serveur de toutes les requêtes statiques. Fichiers HTML, CSS, JS sont donc servis instantanément par Varnish. Tout votre trafic anonyme ne sollicitera donc plus votre serveur web ni votre base de donnée mais uniquement votre Varnish. Ci-dessous un schéma expliquant le fonctionnement d’un Reverse Proxy classique :

reverse proxy

Schéma de fonctionnement d’un reverse proxy

Un module Drupal existe donc afin de faire la liaison entre votre Drupal et votre serveur Varnish. Vous trouverez également dans la documentation du module comment installer Varnish sur votre serveur avant de vous lancer dans le paramétrage du module.

Le module lui est assez simple à paramétrer côté Drupal, il vous suffit de renseigner quelques informations comme l’adresse IP de votre serveur Varnish ou votre clé secrète si vous avez activé l’option dans Varnish.

module varnish

Configuration du module Varnish pour Drupal

 

Il vous suffit enfin de rajouter ces quelques lignes à la fin de votre fichier settings.php afin de compléter la liaison entre Varnish et Drupal.

varnish settings

Configuration de Varnish dans votre fichier settings.php

 

Memcached

La dernière solution d’optimisation côté serveur présentée est un système de cache permettant de stocker vos données et vos objets directement dans la RAM du serveur afin d’optimiser les accès à ces informations. Memcached vous permet également de mettre en cache toutes vos requêtes SQL complexes et lourdes pour le serveur afin d’accéder rapidement aux informations demandées.

Encore une fois il existe un module qui fait le pont entre Memcached et Drupal. Le paramétrage est un peu plus simple, car il suffit d’activer le module et de rajouter ces 3 lignes à la fin de votre fichier settings.php afin de profiter pleinement de la puissance de Memcached. Le plus complexe reste l’installation de Memcached lui même sur votre serveur. La documentation du module vous accompagne pas à pas dans cette tâche.

memcached settings

Modification à rajouter à la fin du fichier settings.php

 

Enfin, il ne faut oublier de prendre en compte que notre application est désormais beaucoup rapide grâce aux différents caches mis en place, il est donc indispensable de ne jamais purger vos caches durant les heures de pointes sous peine de faire planter votre serveur. L’idéal étant de purger vos caches une fois par jour durant la nuit via votre cron job afin de ne pas handicaper vos utilisateurs.

Loading

4 commentaires sur “Optimiser les performances de Drupal 7 pour des sites à fort trafic”

  1. Merci pour cet article. Malheureusement, je n’arrive pas à trouver le module drupal que je cherche : j’aimerais arriver à compiler tous mes fichiers css en un seul, et faire la meme chose avec les fichiers javascript. Avec seulement 2 requêtes au lieu de 15, je pense gagner un temps considérable. Seulement, je ne sais même pas si un tel module existe… une idée ?

Laisser un commentaire