
Améliorer les performances de Drupal : Stratégies de mise en cache et conseils de dépannage
Les sites Drupal ralentissent à mesure qu'ils grandissent. Vous ajoutez plus de contenu, obtenez plus de visiteurs, et soudainement vos pages prennent une éternité à charger. Les utilisateurs repartent, les conversions chutent, et vos coûts d'hébergement grimpent. La bonne nouvelle ? Une mise en cache appropriée peut résoudre la plupart des problèmes de performance sans coûteuses mises à niveau de serveur.
Ce guide vous accompagne dans la configuration d'un système de mise en cache complet pour les sites Drupal en 2025. Vous apprendrez comment configurer les caches intégrés, ajouter des couches de mise en cache externes, et dépanner les problèmes courants. À la fin, vous aurez un site rapide et fiable qui gère les pics de trafic avec élégance.
Prérequis
Avant de commencer, assurez-vous d'avoir :
- Un site Drupal 10.x ou 11.x avec accès administrateur
- Une compréhension de base des modules et configurations Drupal
- Accès à votre environnement d'hébergement ou serveur
- Familiarité avec les outils en ligne de commande (utile mais non requis)
- Environnement de développement ou de test pour tester les changements
Comprendre le système de mise en cache de Drupal
Drupal utilise plusieurs couches de mise en cache qui fonctionnent ensemble. Pensez-y comme à une cuisine de restaurant avec différents postes préparant différentes parties de votre repas :
Cache de page : Stocke des pages HTML complètes pour les visiteurs anonymes. Quand quelqu'un visite votre page d'accueil, Drupal sauvegarde toute la page rendue et la sert instantanément au visiteur suivant.
Cache de page dynamique : Gère les utilisateurs authentifiés qui voient du contenu personnalisé. Il met en cache les parties des pages qui restent identiques tout en générant les éléments spécifiques à l'utilisateur.
Cache de rendu : Sauvegarde la sortie des éléments rendus comme les blocs, vues et morceaux de contenu. Au lieu de les reconstruire à chaque fois, Drupal les récupère du cache.
Cache d'entité : Stocke les entités chargées (nœuds, utilisateurs, termes de taxonomie) en mémoire pour que les requêtes de base de données ne soient pas répétées.
Travailler avec des équipes nous a appris que comprendre ces couches prévient les erreurs de configuration qui peuvent en fait nuire aux performances.
Étape 1 : Activer la mise en cache intégrée
Commencez avec les fonctionnalités de mise en cache principales de Drupal. Naviguez vers /admin/config/development/performance et activez :
- Mise en cache de page pour les utilisateurs anonymes
- Mise en cache de page dynamique pour les utilisateurs authentifiés
- Agrégation CSS et JavaScript
- Mise en cache de blocs
Définissez les durées de vie du cache de manière appropriée :
- Cache de page : 1 heure (3600 secondes) pour la plupart des sites
- Cache CSS/JS : 1 jour (86400 secondes)
- Cache de blocs : 30 minutes (1800 secondes)
Ne définissez pas tout aux durées de cache maximales initialement. Commencez de manière conservatrice et augmentez au fur et à mesure que vous vérifiez que tout fonctionne correctement.
Étape 2 : Configurer un moteur de cache externe
La mise en cache par défaut de Drupal en base de données fonctionne mais n'est pas assez rapide pour les sites occupés. Configurez Redis ou Memcached pour une mise en cache basée sur la mémoire.
Installation de Redis
La plupart des fournisseurs d'hébergement offrent Redis comme service. Pour les sites auto-hébergés, installez le serveur Redis et l'extension PHP Redis.
Ajoutez cette configuration à votre fichier settings.php :
// Configuration Redis $settings['redis.connection']['interface'] = 'PhpRedis'; $settings['redis.connection']['host'] = '127.0.0.1'; $settings['redis.connection']['port'] = 6379; $settings['cache']['default'] = 'cache.backend.redis'; // Utiliser Redis pour tous les contenants de cache sauf le stockage de formulaires $settings['cache']['bins']['form'] = 'cache.backend.database';
Installez le module Redis : composer require drupal/redis
Activez-le : drush en redis -y
Vérifiez que la connexion fonctionne en consultant /admin/reports/status. Vous devriez voir « Redis » listé comme votre moteur de cache.
Étape 3 : Ajouter la mise en cache par proxy inverse
Les proxies inverses comme Varnish se situent entre les visiteurs et votre serveur web, servant les pages mises en cache avant que les requêtes n'atteignent Drupal. Cela réduit drastiquement la charge du serveur.
Configuration de Varnish
Installez Varnish sur votre serveur ou utilisez un fournisseur d'hébergement qui l'offre. Configurez votre fichier VCL (Varnish Configuration Language) :
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
# Supprimer les cookies pour les ressources statiques
if (req.url ~ "\.(css|js|png|gif|jp(e)?g|swf|ico|pdf|mov|fla|zip|rar)$") {
unset req.http.cookie;
}
# Laisser passer les pages admin et utilisateur
if (req.url ~ "^/admin" || req.url ~ "^/user") {
return (pass);
}
}Installez le module Purge pour vider automatiquement le cache Varnish quand le contenu est mis à jour :
composer require drupal/purge drush en purge purge_ui varnish_purger -y
Configurez la purge à /admin/config/development/performance/purge.
Étape 4 : Implémenter l'intégration CDN
Les réseaux de diffusion de contenu mettent en cache et servent vos ressources statiques depuis des emplacements mondiaux. Cela accélère le chargement des ressources pour les visiteurs internationaux.
Configuration Cloudflare
- Inscrivez-vous à Cloudflare et ajoutez votre domaine
- Mettez à jour votre DNS pour pointer vers les serveurs de noms Cloudflare
- Activez les règles de mise en cache pour les ressources statiques
- Configurez les règles de page pour différents types de contenu
Installez le module CDN pour réécrire automatiquement les URLs des ressources :
composer require drupal/cdn drush en cdn -y
Configurez les paramètres CDN à /admin/config/development/cdn.
Nous avons constaté que combiner Cloudflare avec des en-têtes de cache appropriés donne les meilleurs résultats pour la plupart des projets clients.
Étape 5 : Affiner les métadonnées de cache
Drupal utilise les balises de cache, contextes et max-age pour contrôler le comportement de mise en cache. Définissez-les correctement dans votre code personnalisé :
// Dans un bloc ou contrôleur personnalisé
public function build() {
$build = [
'#markup' => $this->getContent(),
'#cache' => [
// Vider ce cache quand le nœud 123 est mis à jour
'tags' => ['node:123', 'user_list'],
// Le cache varie selon le rôle utilisateur et la langue
'contexts' => ['user.roles', 'languages:language_interface'],
// Cache pour 1 heure
'max-age' => 3600,
],
];
return $build;
}Balises de cache : Utilisez des balises spécifiques pour que seuls les caches pertinents se vident quand le contenu change. Au lieu de vider tous les caches, videz seulement les caches marqués avec le contenu mis à jour.
Contextes de cache : Ajoutez seulement les contextes dont vous avez réellement besoin. Chaque contexte crée des variations de cache, donc user.roles avec 5 rôles crée 5 versions mises en cache.
Max-age : Définissez des durées de vie raisonnables. Le contenu dynamique pourrait être mis en cache pour des minutes, tandis que le contenu statique peut être mis en cache pour des heures ou des jours.
Étape 6 : Ajouter des modules de performance
Plusieurs modules contribués peuvent améliorer davantage les performances :
Agrégation CSS/JS avancée (AdvAgg)
composer require drupal/advagg drush en advagg advagg_css_minify advagg_js_minify -y
Configurez à /admin/config/development/performance/advagg pour :
- Minifier le CSS et JavaScript
- Générer du CSS critique
- Différer les ressources non critiques
Chargement paresseux d'images avec Blazy
composer require drupal/blazy drush en blazy -y
Configurez les champs image pour utiliser le formateur Blazy. Les images se chargent seulement quand les utilisateurs les font défiler dans la vue, accélérant les chargements de page initiaux.
Quicklink pour une navigation instantanée
composer require drupal/quicklink drush en quicklink -y
Ceci précharge les liens quand les utilisateurs les survolent, rendant la navigation instantanée.
Erreurs courantes à éviter
Définir le max-age du cache à 0 : Ceci désactive complètement la mise en cache. Faites ceci seulement pour du contenu vraiment dynamique qui ne doit jamais être mis en cache.
Trop de contextes de cache : Chaque contexte multiplie les exigences de stockage du cache. Une page avec 3 contextes et 4 valeurs possibles chacun crée 64 variantes de cache.
Oublier les balises de cache : Sans balises appropriées, vous aurez du contenu périmé ou devrez vider tous les caches fréquemment.
Ne pas tester les utilisateurs authentifiés : La mise en cache anonyme est plus facile, mais n'oubliez pas que les utilisateurs connectés ont aussi besoin de bonnes performances.
Ignorer les performances mobiles : Testez le comportement de mise en cache sur les appareils mobiles et connexions lentes.
Notre approche implique de tester chaque couche de mise en cache séparément avant de les combiner. Cela rend le dépannage beaucoup plus facile quand les choses tournent mal.
Tests et vérification
Outils de test de performance
GTmetrix : Outil gratuit montrant les temps de chargement de page et insights de performance. Testez avant et après l'implémentation des stratégies de mise en cache.
WebPageTest : Analyse plus détaillée incluant des graphiques en cascade montrant le chargement des ressources.
Lighthouse : Intégré dans Chrome DevTools, se concentre sur les Core Web Vitals qui affectent le référencement.
New Relic ou Blackfire : Outils de profilage professionnels qui montrent les taux de succès du cache et goulots d'étranglement.
Commandes de vérification du cache
# Vider tous les caches drush cache:rebuild # Vérifier les moteurs de cache drush status | grep -i cache # Voir les statistiques de cache (si utilisant Redis) redis-cli info stats # Tester les en-têtes de cache curl -I https://votresite.com
Surveiller les performances du cache
Configurez la surveillance pour suivre :
- Ratios succès/échec du cache
- Temps de chargement de page
- Temps de réponse du serveur
- Utilisation du stockage de cache
De bons taux de succès du cache sont typiquement 80% pour le trafic anonyme et 60% pour les utilisateurs authentifiés.
Dépannage des problèmes courants
Problèmes de contenu périmé
Symptôme : Le contenu mis à jour n'apparaît pas sur le site
Cause : Balises de cache manquantes ou incorrectes
Solution : Ajoutez des balises de cache appropriées au code personnalisé et videz les caches manuellement comme solution temporaire
// Ajouter des balises de cache pour les dépendances de contenu '#cache' => [ 'tags' => ['node:' . $node->id(), 'node_list'], ],
Cache ne se vidant pas automatiquement
Symptôme : Besoin de vider manuellement les caches après les mises à jour de contenu
Cause : Module Purge non configuré correctement
Solution : Vérifiez la configuration purge et testez les connexions API
Performance lente pour les utilisateurs connectés
Symptôme : Bonne performance anonyme mais pages authentifiées lentes
Cause : Cache de page dynamique ne fonctionne pas ou trop d'éléments non mis en cache
Solution : Révisez les contextes de cache et assurez-vous que la mise en cache authentifiée est activée
Erreurs de connexion Redis
Symptôme : Erreurs du site mentionnant des échecs de connexion Redis
Cause : Service Redis arrêté ou problèmes de configuration
Solution : Vérifiez le statut du service Redis et vérifiez les paramètres de connexion dans settings.php
Ressources CDN ne se chargeant pas
Symptôme : Images ou feuilles de style manquantes
Cause : Configuration CDN incorrecte ou problèmes CORS
Solution : Vérifiez les paramètres CDN et consultez la console du navigateur pour des erreurs spécifiques
Configuration avancée
Paramètres spécifiques à l'environnement
Utilisez différents paramètres de cache pour le développement, test et production :
// settings.local.php pour le développement $settings['cache']['bins']['render'] = 'cache.backend.null'; $settings['cache']['bins']['page'] = 'cache.backend.null'; $config['system.performance']['cache']['page']['max_age'] = 0; // settings.prod.php pour la production $settings['cache']['default'] = 'cache.backend.redis'; $config['system.performance']['cache']['page']['max_age'] = 3600;
Invalidation de cache personnalisée
Pour les sites complexes, vous pourriez avoir besoin d'une logique de vidage de cache personnalisée :
// Vider des balises de cache spécifiques
\Drupal::service('cache_tags.invalidator')->invalidateTags(['node:123']);
// Vider les contenants de cache
\Drupal::cache('render')->deleteAll();
// Vider des entrées de cache spécifiques
\Drupal::cache()->delete('ma_cle_cache_personnalisee');Mesurer le succès
Suivez ces métriques pour vérifier vos améliorations de mise en cache :
Comparaison avant/après :
- Temps de chargement de page (devrait s'améliorer de 50-80%)
- Temps jusqu'au premier octet (devrait s'améliorer de 60-90%)
- Utilisation CPU du serveur (devrait diminuer de 30-70%)
- Requêtes de base de données par page (devrait diminuer significativement)
Surveillance continue :
- Taux de succès du cache (visez 80% anonyme, 60% authentifié)
- Scores Core Web Vitals
- Métriques d'expérience utilisateur (taux de rebond, durée de session)
La plupart des sites voient des améliorations dramatiques après l'implémentation d'une mise en cache appropriée. Un site e-commerce typique pourrait passer de temps de chargement de 8 secondes à 2 secondes juste en ajoutant Redis et Varnish.
Conclusion
Une mise en cache Drupal efficace nécessite plusieurs couches travaillant ensemble : caches de page et de rendu intégrés, moteurs de cache externes comme Redis, proxies inverses comme Varnish, et CDNs pour la livraison de ressources. La clé est d'implémenter chaque couche systématiquement, tester minutieusement, et surveiller les performances continuellement.
Commencez avec la mise en cache intégrée de Drupal, ajoutez Redis pour le stockage basé sur la mémoire, puis implémentez la mise en cache par proxy inverse pour des gains de performance maximaux. N'oubliez pas de configurer une invalidation de cache appropriée pour que les mises à jour de contenu apparaissent immédiatement.
Nous avons appris que les implémentations de mise en cache les plus réussies combinent la configuration technique avec une surveillance et un ajustement continus. L'optimisation des performances n'est pas une tâche ponctuelle – c'est un processus continu de mesure et de raffinement.
Prêt à accélérer votre site Drupal mais pas sûr quelle approche de mise en cache convient à votre situation spécifique ? Nous pouvons analyser vos goulots d'étranglement de performance actuels et concevoir un plan de mise en cache qui fonctionne avec votre environnement d'hébergement et vos patterns de trafic. Contactez-nous pour discuter comment une configuration de mise en cache appropriée peut améliorer la vitesse et l'expérience utilisateur de votre site.
