Améliorer les performances de Drupal 9 avec des modules, les meilleures pratiques de codage et la bonne configuration de serveur

Publié: 2020-08-11

Vous pourriez avoir le serveur le plus puissant avec une mémoire en tas, mais est-ce suffisant pour assurer un site Web performant ? Avec Drupal, il est facile de faire évoluer le site Web en harmonie avec la croissance de votre entreprise. En fait, c'est ce à quoi Drupal excelle. Cependant, une augmentation soudaine des pages Web, des fonctionnalités et du contenu pourrait avoir un impact sur ses performances. Drupal 9 est là maintenant et est prêt à relever ce défi comme un pro ! Il est livré avec la bonté de Drupal 8 moins l'ancien code qui le rend plus léger, plus propre et plus puissant. Découvrez-en plus sur les techniques d'amélioration des performances de Drupal 9 qui fonctionnent parfaitement.

La performance du site Web est la clé du succès de l'entreprise. Les sites Web à chargement lent peuvent être nocifs pour les entreprises. Un site Web avec de meilleures performances contribue à un meilleur référencement, améliore le taux de conversion des visiteurs et offre une meilleure expérience utilisateur aux visiteurs, ce qui contribue collectivement à la croissance de l'entreprise. Alors que les sites Web à chargement lent font tout le contraire et deviennent la raison de l'échec de l'entreprise.

drupal-9-optimisation-des-performances


Il y a beaucoup de choses qui affectent les performances du site Web. Certains d'entre eux sont:

• Votre fournisseur de services (Hébergement, DNS etc.)
• Nombre de requêtes au serveur
• Problèmes techniques ou mauvaises pratiques de programmation
• Technique de mise en cache
• Configuration incorrecte du serveur
• Fichiers image et vidéo lourds

Drupal 9 Core et modules personnalisés pour augmenter les performances

Il existe de nombreux modules de contribution et de base disponibles dans Drupal 9 qui peuvent être utiles pour améliorer les performances de votre site Web. En suivant certaines pratiques de codage et avec une configuration de serveur appropriée, vous pouvez considérablement améliorer les performances du site.

Modules de base

• Gros tuyau

Le module Drupal Big Pipe accélère les choses sans configuration supplémentaire. Il est livré avec le noyau Drupal. Il améliore les performances perçues du front-end en utilisant des métadonnées de mise en cache et en améliorant ainsi le pipeline de rendu.

• Cache de page dynamique interne

Ce module Drupal 9 permet de mettre en cache le contenu dynamique. Il est utile pour les utilisateurs anonymes et authentifiés. Ce module n'est pas disponible dans Drupal 7. Les pages demandées par les utilisateurs sont stockées la première fois qu'elles sont demandées et peuvent ensuite être réutilisées lorsque la même page est à nouveau demandée.


• Cache de pages interne

Le module Internal Page Cache permet de mettre en cache les données pour les utilisateurs anonymes. Ce module est disponible dans le noyau et est activé par défaut.

Chemin de configuration : admin/config/development/performance

Ici, vous pouvez effacer le cache, définir l'âge maximal du navigateur et du cache proxy et activer / désactiver les paramètres d'agrégation.

Advagg-module
Module de cache de page interne

Modules contribués

  • Agrégation CSS/JS avancée

    Le module Advagg est livré avec de nombreux autres sous-modules, tels que -
  • AdvAgg Cdn : aide à charger les actifs (CSS/JS) à partir du CDN public
  • AdvAgg CSS/JS Validator : valide les fichiers CSS et JS
  • AdvAgg External Minifier : Minifie Javascript et/ou CSS avec un minificateur de ligne de commande.
  • AdvAgg Minify CSS : aide à minifier les fichiers css avec un minificateur tiers
  • AdvAgg Minify JS : aide à minifier les fichiers js avec un mi tiers
  • Modificateur AdvAgg : Permet de modifier le tableau CSS et JS. (Peut avoir un problème de compatibilité)
  • Optimiseur de compatibilité AdvAgg Old Internet Explorer

Chemin de configuration : /admin/config/development/performance/advagg

Ce module prend également en charge les techniques de compression de fichiers telles que gzip et brotli . Ce module aide à réduire le nombre de requêtes http, améliorant ainsi considérablement les performances du site.

  • flamboyant

Le module Drupal 9 Blazy fournit un chargement paresseux des images pour économiser la bande passante et éviter des taux de rebond plus élevés. Le chargement différé est une technique qui ne charge les images que lorsqu'elles se trouvent dans la zone visible par l'utilisateur. Cette technique multiservice permet d'économiser du temps et des données.

Chemin de configuration : /admin/config/media/blazy

Ici, vous pouvez activer/désactiver Blazy, configurer l'effet d'espace réservé et également définir le décalage qui détermine à quel moment l'image sera visible pour l'utilisateur.

Module Blazy

Module Blazy
  • CDN

Le module Drupal 9 CDN facilite l'intégration du CDN dans les sites Web Drupal. Il permet de servir du contenu statique à partir du serveur CDN pour augmenter la vitesse de livraison du contenu. En dehors de cela, ce module est également facile à configurer.

Chemin de configuration : /admin/config/services/cdn

Module CDN
Paramètres du module CDN

Ici, vous pouvez activer/désactiver le CDN, fournir l'URL de mappage et cocher/décocher la mise en cache des fichiers pour toujours.

Amélioration des performances avec les meilleures pratiques de codage

  • Utiliser isset() sur array_key_exist()

La méthode isset() est nettement plus rapide que array_key_exist() . La principale différence entre isset et array_key_exist est que array_key_exists vous dira certainement si une clé existe dans un tableau. Alors que isset ne retournera vrai que si la clé/variable existe et n'est pas nulle. Pour plus d'informations sur cette vérification, cliquez ici pour une comparaison de référence.

  • Utilisation de entityQuery()

entityQuery() dépend d'un contrôleur de stockage pour gérer la création et l'exécution de la requête pour le stockage d'entité approprié. Cela présente l'avantage que toute requête exécutée via entityQuery() est indépendante du stockage. Ainsi, si vous écrivez un module contribué ou travaillez sur un site Web où il pourrait être nécessaire de passer à un stockage d'entité alternatif à l'avenir, toutes vos requêtes utiliseront de manière transparente le nouveau backend de stockage sans qu'aucune modification ne soit nécessaire. entityQuery() peut être utilisé si vous écrivez des requêtes à la main dans un code personnalisé ou via le backend entityQuery() Views.

  • Utilisation de la méthode loadMultiple () au lieu de la boucle

Si vous avez 10 nids (identifiants de nœud) et que vous le parcourez pour charger chaque nœud, vous effectuez 10 requêtes dans la base de données. Lors de l'utilisation de loadMultiple(), il est réduit à une seule requête de base de données.

  • Mise en cache

En utilisant Cache API dans Drupal 9, vous pouvez mettre en cache le moteur de rendu, le tableau de réponses ou l'objet. Il existe trois métadonnées de mise en cache de rendu disponibles dans Drupal 9.

  1. Cacher les balises

    Les balises Cache sont utilisées pour mettre en cache les données lorsqu'elles dépendent d'entités ou de configurations Drupal. La syntaxe pour ceci est cache-item:identifier par exemple nœud : 5, utilisateur : 3.
  2. Contexte du cache

    Syntaxe:
    • les périodes séparent les parents des enfants
    • un contexte d'antémémoire nommé au pluriel indique qu'un paramètre peut être spécifié; à utiliser : ajouter un deux-points
    Exemple : user.roles, user.roles:anonymous, etc.
  3. Âge max. du cache

L'âge maximum du cache est utilisé pour mettre en cache les données sensibles au temps.

  • Travailleur de file d'attente / Lot

Pour traiter de grandes quantités de données sans délai d'attente php, un traitement par lots ou un travailleur de file d'attente peut être utilisé. Les éléments du travailleur de file d'attente ne s'exécutent que lorsque le cron s'exécute et il s'exécute pendant une courte période. Il existe deux types de travailleurs de file d'attente : fiables et non fiables. Un travailleur de file d'attente fiable garantit que l'élément de la file d'attente s'exécute au moins une fois, tandis qu'une file d'attente non fiable peut ignorer des éléments en raison d'une défaillance de la mémoire ou d'une autre interruption. Le traitement par lots traite les articles jusqu'à ce que tous les articles se terminent dans le lot conditionné de sorte qu'aucune erreur ne se produise pendant le traitement sans attendre l'exécution cron.

Amélioration des performances avec une meilleure configuration du serveur

  • Utiliser Nginx au lieu d'Apache

Nginx et Apache sont tous deux des serveurs Web largement utilisés. Nginx a un avantage sur Apache sur les performances de référence. Il est également plus rapide et plus efficace qu'Apache. Nginx est 2,5 fois plus rapide qu'Apache selon un test de référence exécutant jusqu'à 1 000 connexions simultanées.

  • HTTP/2.0 sur HTTP/1.1

HTTP/2.0 prend en charge le multiplexage, contrairement à HTTP/1.1 qui bloque d'autres ressources. Si une ressource ne peut pas être chargée, HTTP/2.0 utilise la connexion TCP pour envoyer plusieurs flux de données à la fois. HTTP/2.0 utilise des techniques avancées de compression d'en-tête que HTTP/1.1

 Configuration Nginx pour HTTP/2.0
serveur {
    écouter 443 ssl http2; //Paramètres http2
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}
  • Servir du contenu compressé

 La compression des réponses réduit souvent considérablement la taille des données transmises. Cependant, étant donné que la compression se produit au moment de l'exécution, elle peut également ajouter une surcharge de traitement considérable qui peut affecter négativement les performances. 
Configuration Nginx pour servir du contenu compressé :
serveur {
    gzip activé ;
    gzip_static activé ;    
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxied tout ;
    gzip_vary activé ;
    gzip_comp_level 6 ;
    gzip_buffers 16 8k;
    gzip_http_version 1.1 ;    
    ...
}
  • MariaDB au lieu de MySQL

mariaDB a une vitesse améliorée par rapport à MySQL. Il fournit une mise en cache et une indexation plus rapides que MySQL. Il est presque 24% plus rapide que MySql dans ce cas. Il existe également d'autres métriques clés pour lesquelles mariaDB est meilleure que MySQL. Ainsi, MariaDb est préféré à MySQL en termes de performances.

  • CDN

CDN signifie réseau de diffusion de contenu. Il s'agit d'un cluster de serveurs répartis dans le monde entier (c'est-à-dire des points de présence ou PoP), qui fonctionnent ensemble pour fournir le contenu plus rapidement. CDN stocke la version mise en cache du contenu du site et fournit le contenu à partir du serveur disponible le plus proche. Certains des fournisseurs de CDN populaires sont Cloudflare, Amazon cloudfront, Google cloud cdn, etc.