Drupal et performances: le module Boost

Etiquettes :
boost, cache, performance

Dans un article précédent, nous avions abordé le système de cache de Drupal. Dans sa configuration de base, nous avions vu que ce système de cache enregistrait les informations essentiellement dans la base de données.

Pour des sites de moyenne fréquentation, visités en majorité par des utilisateurs non identifiés, même si nous avons activé le cache du cœur de Drupal, nous pouvons encore avoir des problèmes de performance au niveau du SGBB surtout si ce dernier n’est pas optimisé, ce qui est souvent le cas sur des hébergements mutualisés (shared hosting). Nous devons dès lors trouver une solution de cache plus performante encore, afin d’éviter au maximum les requêtes à la BD.

Dans ce genre de cas, la solution est toute trouvée: le module Boost.

Comment ça marche ?
Le module Boost crée un fichier HTML statique (un cache statique) pour toutes les pages visitées pour la première fois par un utilisateur non identifié. La prochaine fois que la page sera visitée par un autre utilisateur non identifié, Boost le renverra vers cette page HTML statique et évitera ainsi d’exécuter index.php et toute autre requête à la base de données. Impressionnant non? Notre problème de performance au niveau de la BD est ainsi résolu.

Donc, lors de visites postérieures de la même page, au lieu de récupérer les données au travers de requêtes à la base de données, Boost récupéra un simple fichier HTML statique qui contient tout le code html produit par Drupal lors de la première visite.

Nous sommes donc bien en présence d’un système de cache par fichiers statiques, qui au niveau du serveur Apache, s’exécute depuis le fichier .htaccess grâce à des RewriteRule sur les Urls (mod_rewrite) avant même de lancer le fichier index.php de Drupal.

En fait, au niveau du .htaccess, nous vérifions si la page statique existe (avec une RewriteCond) et dans l’affirmative, nous redirigeons (avec une RewriteRule) le visiteur non identifié vers cette page statique. De cette manière nous court-circuitons complètement le procédé de bootstrap de Drupal et nous n’exécutons même pas le fichier index.php.

Attention toute de même, Boost ne s’applique qu’au niveau des utilisateurs non identifiés. Si votre site est fréquentés en majorité par des utilisateurs de ce type, Boost est une solution de choix pour améliorer la vitesse d’affichage de vos pages et comme Boost n’utilise pas la BD, le rendement de votre serveur sera supérieur et vous permettra d’utiliser au mieux les ressources disponibles.

Installer le module Boost
Boost requiert que les URLs simplifiées soient configurées et habilités. Nous allons donc vérifier si c’est le cas en allant sur admin/settings/clean-urls.

A présent nous allons télécharger les modules suivants : Boost, Transliteration et Globalredirect. Transliteration et Globalredirect ne sont pas obligatoire mais recommandés.

Nous allons ensuite les décomprimer dans le répertoire sites/all/modules.

Sur notre site Drupal, nous allons ensuite sur admin/build/modules et dans la liste des modules disponibles nous activons le module Boost, Transliterations et Globalredirect et nous appuyons sur le bouton «enregistrer la configuration » en bas de la page.

Si vous aviez activé le cache par défaut de Drupal (admin/settings/performance) comme nous l’avions abordé dans notre article précédent, le module Boost le désactivera automatiquement. Ne vous en faites pas, avec Boost nous n’avons plus besoin du cache para défaut de Drupal. Mais attention, nous allons toute même garder la configuration de la compression Gzip, le cache des blocks y l’optimisation de la bande-passante des CSS y de javascript,

Configurer le module Boost
La configuration de Boost est simple en soit mais relativement longue. Donc patience !

Elle comporte les étapes suivantes :

  1. Configurer le module Boost
  2. Modifier le fichier .htaccess
  3. (Re)Configurer le cache par défaut
  4. Tester le module Boost
  5. Modifier le fichier robot.txt

1. Configurer le module Boost
Pour configurer le module Boost, nous allons sur Administrer – Configuration du site – Performance – Boost Settings (admin/settings/performance/boost)

En réalité toutes les options par défaut ont été bien étudiées et nous servent donc parfaitement.

Boost File Cache

Ici, une petite remarque. Si votre serveur Apache comprime déjà vos pages, il ne faut pas activer l’option "Gzip page compression". Si vous voulez savoir si votre serveur comprime déjà vos pages, vous pouvez faire un test sur : http://www.gidnetwork.com/tools/gzip-test.php

Le bouton "Clear ALL Boost cached data" nous permettra d’éliminer toutes les pages qui se trouvent dans le cache. Il nous permettra aussi de connaître le nombre total de page qui son déjà dans le cache statique.

Le bouton "Clear Boost expired data" nous permettra d’éliminer du cache toutes les pages qui ont dépassé leur temps d’expiration.

Boost cacheability settings

Il est toujours bon, pour le rendement, d’activer le cache des xml, des feeds, du css et du javascript. Je vous conseille cependant de ne pas activer le cache de ajax.

Ici attention tout même à l’option "Only allow ASCII characters in path". Si cette option est activée, comme ci-dessus, le module éliminera tous les caractères non ASCII des chemins de vos pages dans le cache. Tout dépend de la langue utilisée sur votre installation, de la taxonomie (sans espaces) entre les mots et de la structure de vos répertoires. Si vous suivez strictement la RFC 3986 pour vos URL, vous pouvez désactiver cette option.

Enfin, l’option "Statically cache specific pages" nous permet de gérer plus finement le cache surtout en évitant de mettre dans le cache certaines pages dont le contenu (local ou externe) change souvent.

Boost cache expiration/flush settings

Pour cette section nous pouvons laisser la configuration par défaut. Attention tout de même à activer votre cron depuis votre serveur… Vous l’aurez compris, grâce à cron, notre cache sera maintenu à jour lorsque le contenu change sur notre site.

Boost directories and file extensions
Dans cette section nous allons définir notre structure de répertoires pour y placer les fichiers générés par Boost. Ce seront ces fichier (en général de type .html) qui seront envoyés à l’utilisateur non identifié.

Une fois de plus, nous pouvons laisser la configuration par défaut comme suit.

Boost advanced settings


Pour cette section, je vous conseil de laisser les options par défaut. En général ce sera suffisant.

Boost crawler
Avec le crawler, nous pouvons générer notre cache avant même que la page soit visitée pour la première fois. Mais cela peut entrainer des effets secondaires et même bloquer notre serveur surtout si nous nous trouvons sur un hébergement mutualisé. Je vous conseillerais donc de ne pas l’utiliser pour l’instant.

Boost Apache .htaccess settings generation
Encore une section pour laquelle nous pouvons laisser les options par défaut.

Voilà. Maintenant nous pouvons appuyer sur le bouton "Enregistrer la configuration". Comme je vous le disais, c’est long mais assez simple en soi.

Comme Boost fonctionne grâce au fichier .htaccess, nous allons préparer dans la prochaine section ce fichier. Ne vous en faite pas, c’est presque fini.

2. Modifier le fichier .htaccess
A vrai dire, cette section parait compliquée, mais en réalité c’est plus de copier/coller qu’autre chose. Donc suivez bien, pas à pas, les instructions suivantes.

  • Faites un backup de votre fichier .htaccess qui se trouve dans la racine de votre installation Drupal.
  • Allez ensuite sur la URL admin/settings/performance/boost-rules et copiez tout le code qui se trouve dans le rectangle en dessous du titre " Generated Rules :".
  • Ouvrez maintenant le fichier .htaccess dans la racine de votre installation et collez le code que vous avez copié précédemment entre les instructions suivantes:
    # RewriteBase /
    # Copiez votre code ici !!!
    # Rewrite URLs of the form 'x' to the form 'index.php?q=x'
  • Assurez-vous bien que le code copié commence par ### BOOST START ### et se termine par ### BOOST END ###
  • Sauvez votre fichier .htaccess

Voila. C’est terminé. Vous avez maintenant installé le module Boost. Nous allons maintenant revoir la configuration du système de cahe para défaut de Drupal.

3. (Re)Configurer le cache par défaut
Nous allons maintenant sur la URL admin/settings/performance et nous allons désactiver le système de cache par défaut (si Boost ne l’a pas fait automatiquement), nous assurer que la compression gzip est activée, que le cache des bloques est bien activé et que la bande passante (css et js) est bien optimisée.

Nous appuyons alors sur le bouton "Enregistre la configuration"

4. Tester le module Boost
Pour tester Boost, nous allons aller sur admin/reports/status et vérifier si Boost est bien configuré.

Nous allons maintenant ouvrir notre site avec un autre navigateur que Firefox et naviguer sur quelques pages au hasard. Par exemple nous pouvons ouvrir notre site avec Chrome.

Si vous n’avez pas un autre navigateur installé, faites un logout de votre compte admin et tout en restant sur votre site (cette fois comme un utilisateur non identifié) naviguez sur quelques page au hasard.

Vous noterez bien sur une nette différence de rendement mais aussi que la structure des fichiers de votre site a changé. Vous avez maintenant un nouveau répertoire "cache" dans lequel se trouvent tous les fichiers statiques (html, css et js) qu’utilise votre site.

Pour être certain que Boost est bien installé et bien configuré vous pouvez inspecter le code Xhtml de vos pages et voir tout en bas si vous avez bien l’instruction suivante générée par le module Boost:

<!-- Page cached by Boost @ 2010-10-16 12:57:29, expires @ 2010-10-16 13:57:29 -->

Si c’est le cas: Bravo!!! Cela veut dire que vous voyez une page statique (cachée) et non pas une page générée dynamiquement par Drupal.

Notre système fonctionne à présent avec des fichiers statiques pour nos utilisateurs non identifiés et nous n’utilisons que très peu le SGDB, ce qui était bien notre objectif de départ.

Il nous reste cependant une dernière configuration à réaliser : modifier le fichier robot.txt

5. Modifier le fichier robot.txt
Afin d’éviter que les moteurs de recherches indexent les statistiques du module Boost, nous allons leur interdire l’accès a ce fichier de statistiques.
Nous ouvrons le fichier robot.txt qui se trouve dans la racine de notre installation. En dessous la ligne # Files nous ajoutons la ligne suivante :
Disallow: /boost_stats.php
Nous sauvons notre fichier robot.txt

Conclusions
Nous avons mis en place un système de cache par fichiers statiques (html) pour nos utilisateurs non identifiés afin d’éviter de multiples requêtes à notre base de données et optimiser ainsi les maigres ressource de notre serveur.

Le fonctionnement du module Boost se base sur le fichier .htaccess de notre installation Drupal en revoyant les utilisateurs non identifiés vers des fichiers statiques s’ils existent. Dans la négative, le module Boost générera ces fichiers statiques qui seront disponibles pour le prochain visiteur.

Je ne connais pas à ce jour, pour un site à moyenne fréquentation, un autre module qui améliore à ce point les performances de Drupal pour des utilisateurs non identifiés.

Donc je vous le recommande fortement dans le cas où votre site est fréquenté essentiellement par des utilisateurs non identifiés.

Si votre site est un site communautaire où les actions des utilisateurs requièrent qu’ils soient identifiés, je me tournerais alors vers des solutions de cache comme Memcache ou APC + CacheRouter ou encore Authcache. Ces modules nous permettent de dévier la gestion du cache vers de la mémoire vive au lieu du SGBD.

Si vous avez des questions, n’hésitez pas à poster un commentaire. J’y répondrai avec grand plaisir.

Références
Sur Drupal.org:
Le module Boost : http://drupal.org/project/boost
Le handbook de Boost : http://drupal.org/node/545664

Des videos :
http://drupal.org/node/675246
http://www.youtube.com/watch?v=OsfjUhOrVBE
http://www.drupalove.com/drupal-video/how-boost-drupal-performance

Dans les blogs :
http://oshyninc.wordpress.com/2010/05/28/boost-your-drupal-site/
http://www.midwesternmac.com/blogs/geerlingguy/using-boost-drupal-making...
http://www.bestofdrupal.com/boost-static-page-caching-drupal.html

En fin quelques liens intéressants sur GZIP :
http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-...
http://serverfault.com/questions/59260/how-do-i-find-out-if-my-apache-se...
Pour tester gzip: http://www.gidnetwork.com/tools/gzip-test.php

Votre notation : Aucun Moyenne : 5 (22 votes)