Le cache de Drupal: un bijou de performance

Etiquettes :
cache, performance

Un des plus grands défis de tout développeur web réside dans l’amélioration de la vitesse de réponse des applications web. Si cela se traduit par un meilleur confort pour l’utilisateur final, ne nous voilons pas la face, c’est aussi une question économique, de rendement du serveur. Plus l’application sera lente, plus les ressources utilisées par le, ou les serveurs, seront importantes ; d’où un surcoût en hardware qui peut être non négligeable.

Drupal, de part nature et de par son architecture, utilise beaucoup de ressources du serveur (mémoire et base de données), ce qui lui fait parfois mauvaise presse, surtout pour la construction de sites très fréquentés.
Pourtant Drupal possède ses propres armes pour affronter de nombreuses visites. A la base, un système de cache très performant (cache API) qui nous évite de multiples requêtes à la base de données. Mais nous pouvons aussi associer ce système de cache à des modules comme Boost, une sorte de cache statique que je vous recommande vivement, Cacherouter qui nous permet de dévier le cache vers de la mémoire vive comme Memcached ou APC. Sans oublier, bien sur, des solutions de reverse proxy comme Varnish ou encore des installations toutes prêtes comme Pressflow.

Vous l’aurez bien compris : Drupal est formidable framework quand il s’agit de sites à très haute fréquentation. Vous pensez bien que si la Maison Blanche ou la Présidence belge au Conseil de l’Europe tourne sous Drupal, cela veut dire quelque chose : les grand sites adorent Drupal.

Mais attardons-nous aujourd’hui sur le principe d’un système de cache et comment Drupal l’intègre dans son noyau.

Le principe
Le fait d’afficher une page d’un système dynamique requiert un grand nombre de requêtes à la base de données afin d’obtenir l’information concernant le contenu, l’utilisateur, la configuration du site, le nombre de fois que cette page a été lue ... Une fois ces informations obtenues ; en fait notre résultat; nous y ajoutons du code XHTML et nous l’envoyons vers l’utilisateur. Il serait dès lors bien plus opportun de garder ce résultat pour une utilisation future (un autre utilisateur qui lirait la même page), ainsi nous évitons de répéter les mêmes requêtes des centaines, voire des milliers de fois.

Le système de cache de Drupal
La plupart des modules et les APIs (NodeApi…) de Drupal peuvent sauvegarder les résultats de leurs multiples requêtes dans des tables de cache crées spécialement à cette fin. La prochaine fois qu’ils auront besoins de ces résultats, ils pourront les obtenir directement des ces tables grâce à une simple requête. Il sera possible par la suite, de dévier les écritures et les lectures de ces tables vers de la mémoire vive avec le module Cacherouter.

Dans sa configuration de base, Drupal utilise six tables pour son cache :

  1. La table cache : C’est la table par défaut qui enregistre une copie de la configuration de nos modules (qui se trouve principalement dans table variables), de la structure de toutes nos autres tables et toutes les informations concernant le thème utilisé sur le site.
  2. La table cache_page enregistre une copie des pages mais seulement pour les utilisateurs non identifiés.
  3. La table cache_block enregistre une copie des bloques.
  4. La table cache_menu enregistre une copie du menu de navigation et des URLs qui lui sont associées.
  5. La table cache_filter une copie de tous les contenus de nos nodes une fois qu’ils sont été filtrés par le système de filtre.
  6. La table cache_form enregistre tous les formulaires soumis à la FormApi.

Configurer le cache de Drupal
Pour configurer le cache de Drupal nous allons aller sur admin/settings/performance. Notez bien que vous ne pouvez configurer que le cache des pages et des bloques dans cette section. Les autres caches, comme ceux des menus, des contenus filtrés, des formulaires et de la configuration des modules, seront toujours générés par défaut.

La première sous section est Mémoire cache. Nous activons ‘normal’ pour le ‘Mode de cache’, ensuite nous choisissons le temps minimum de vie du cache, en général 3 heures est suffisant. Si vous avez un site que vous actualisez une fois par jour et qui reçoit peu de commentaires, vous pouvez augmenter ce temps minimum à 12 et même 24 heures dans certains cas. Puis nous cliquons sur ‘activé’ pour la rubrique ‘Compression des pages’. A partir de cet instant toutes vos pages seront sauvegardées dans le cache pour un temps minimum que vous aurez configuré.

Nous pouvons par la suite activer le cache des bloques et aussi optimiser la bande passante en appuyant sur ‘activé’ pour les rubriques ‘Optimise les fichiers CSS’ et ‘Optimise les fichiers JavaScript’.

Voilà, en quelques secondes vous aurez un site performant et prêt à affronter un bon nombre de visites.

La suite
L’une des forces du mécanisme de cache de Drupal c’est qu’il est centralisé et standardisé. Des modules comme Cacherouter ou des solutions externes comme Memcache ou APC ne font que s’imbriquer sur une couche externe du Framework, laissant le cœur du système de cache intact.

Dans un prochain article nous aborderons en profondeur la API du cache de Drupal. A moins que plusieurs d’entre vous ne désirent se pencher sur des solutions de cache statiques comme le module Boost. A vous de choisir, dans vos commentaires…

A bientôt.

Votre notation : Aucun Moyenne : 5 (20 votes)

Commentaires

بجد تسلم ايدك جدا جدا جداج

بجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجد

بجد تسلم ايدك جدا جدا جداج

بجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجد

بجد تسلم ايدك جدا جدا جداج

بجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجدبجد تسلم ايدك جدا جدا جداج داجد

Boost

Merci Karim pour ton article.

Moi aussi je m'inscris pour Boost.

A+

Portrait de Karim Boudjema

Parfait

Bonjour Laurent,

Parfait je prends note.

A+

Merci Karimb ou Karim? Ouf…

Merci Karimb ou Karim? Ouf… c’est assez vaste comme sujet et si tu pouvais dans le future nous donner de bonnes recettes comme pour les pralines (voire les 10 modules) ?

Moi je suis assez intéressé par Bosst mais on m’a beaucoup parlé de Memcached. Alors je ne voudrais pas contredire JF mais il serait aussi bon que tu nous expliques un peu comment nous pourrions utiliser Memcachd avec Drupal.

Un tout grand merci depuis Zurich.

Portrait de Karim Boudjema

Un vaste sujet

Oui, KarimB est mon username. Je vais le modifier pour que ce soit plus clair.

Comme tu les dis si bien, la performance sous Drupal est un vaste sujet. C'est bien pour cela que nous avions besoin d'une petite introduction avant de nous lancer dans le vif du sujet. Donc avant de faire des pralines avec Drupal Cache, nous devions voir rapidement comment faire du chocolat.

Memcache est un système de cache fascinant et son utilisation est très répandue (FaceBook par ex.), c'est un peu le flux sanguin de toute site Web 2.0., je l'aborderai donc exclusivement dans un prochain post.

Tu peux déjà y jeter un coup d’œil sur: http://drupal.org/project/memcache

A bientôt Pascal

Boost

J'ai bien aimé ton article KarimB. Je me rend compte qu'il ya un tas de possibilité pour ameliorer la performance de Drupal, trop peut-etre.

OUI, OUI... Parles nous de Boost pour commencer !!!

JF

Portrait de Karim Boudjema

Caching

Merci Julie.

Tu as raison. Drupal est si flexible qu'il s'adapte a presque toutes les situations, c'est aussi le cas de son système de cache.

Boost est une excellente solution de cache pour des sites de taille moyenne (5000 visites par jour) avec essentiellement des utilisateurs non identifiés.

Je ne manquerai pas de l'aborder dans un prochain article.

A bientôt

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.