web-dev-qa-db-fra.com

Comment améliorez-vous les performances de Drupal?

Drupal est rapide à développer, mais les performances sont si médiocres. Il est difficile d'atteindre 50 requêtes par seconde.

Et il y a tellement de requêtes SQL dans une simple page Web. Si vous testez l'heure de demande d'un formulaire soumis dans Drupal.org, cela prendra toujours quelques secondes.

Comment améliorez-vous la vitesse de votre site Web?

54
Bruce Dou

Mise en cache, mise en cache et mise en cache.

Quelques suggestions que j'ai déjà faites à une question similaire sur d.o.

  1. Mettre Varnish ou un autre proxy inverse devant votre démon http est probablement la meilleure chose que vous puissiez faire.
  2. Lors de DrupalCon Copehagen, Rasmus a déclaré que l'utilisation d'un cache d'opcode php, tel que APC , est l'une des meilleures choses que vous puissiez faire pour accélérer PHP en général. Les performances s'améliorent avec les nouvelles versions de PHP. La mise à niveau de PHP présente également des avantages supplémentaires lorsque vous mettez à niveau Drupal. De 6 à 8, Drupal passera par un changement majeur vers l'orientation des objets, ce qui est également le cas où la plupart des améliorations de performances se produisent dans les versions plus récentes PHP.
  3. Memcache est un choix populaire pour accélérer le cache, en mettant le cache en mémoire au lieu du disque.
  4. Panneaux + La mise en cache combinée avec Actions de cache peut augmenter considérablement les performances, même pour les utilisateurs connectés, car elle prend en charge une logique assez complexe.
  5. Entity Cache est un boost de vitesse agréable et sans conf pour tous ceux qui utilisent Drupal 7.
  6. Les sites lourds en écriture ont moins de solutions "bien établies". Certaines options incluent.
    1. Déplacer fréquemment écrit entièrement, par exemple des statistiques, ailleurs, comme Google Analytics.
    2. Mise en cache des opérations d'écriture fréquentes avec une solution personnalisée dans quelque chose comme NodeJS qui écrit dans DB toutes les X secondes.
    3. Sacrifiez le sacré ACIDE , et utilisez une base de données comme MongoDB . (Voir le commentaire de Berdir ci-dessous)
    4. Regroupez votre base de données SQL. Effectue des lectures dans une base de données, écrit dans une autre. Ceci est natif de D7 et Pressflow peut aider à cela dans D6.
61
Letharion

Ce sont des notes de mes expériences et peuvent différer de celles des autres. J'utilise principalement la pile LAMP et j'ai considéré la même chose dans mes suggestions.

Règles du pouce pour la mise en cache que je respecte généralement.

  1. Traitez une fois plusieurs fois.
  2. Vivez avec des données périmées lorsque cela est possible
  3. Effacez rarement les caches et restez très précis.
  4. Lorsque cela est possible, effectuez les modifications au niveau le plus bas de la pile. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib et module personnalisé.

Amélioration des performances d'un site Drupal (dans l'ordre croissant de complexité)

  1. Gardez le noyau à jour, le module contrib et les thèmes mis à jour. Oui c'est important.

  2. Installez APC sur votre serveur. (Déplacé vers le haut sur la base d'une suggestion de Letharion)

  3. Mise en cache des pages: admin/config/development/performance Différence entre la durée de vie minimale du cache et l'expiration des pages mises en cache

  4. Mise en cache des blocs https://drupal.org/project/blockcache_alter Options de mise en cache pour tous les blocs.
  5. Agréger les fichiers javascript et css - Améliorations frontales https://www.drupal.org/project/advagg
  6. Désactivez les modules inutiles. Chaque module ajoute à la quantité de code qui doit être disponible pour un chargement de page. Et cela augmente également le nombre de recherches. Dans la mesure du possible, utilisez un module générique à la place de plusieurs modules qui font des fonctionnalités spécifiques.
  7. Cache Views content - Mise en cache sensible au contenu pour les vues https://www.drupal.org/project/views_content_cache
  8. Désactiver la journalisation des bases de données - Utilisez https://drupal.org/project/syslog_ng
  9. Réduisez les erreurs 404 - http://www.brokenlinkcheck.com/
  10. Réponses rapides 404 - https://drupal.org/project/fast_404 - Essayez de gérer au niveau du serveur.
  11. Validations côté client - https://www.drupal.org/project/clientside_validation
  12. Compresser l'image - https://www.drupal.org/project/imageapi_optimize
  13. Chargement d'images paresseux - Ne chargez pas d'images inutiles - https://www.drupal.org/project/lazyloader
  14. Utiliser des feuilles de sprites - https://www.drupal.org/project/spritesheets

  15. Définissez la valeur de durée de vie minimale du cache sur un nombre plus élevé et utilisez des modules d'effacement du cache pour effacer les caches de pages spécifiques - Chaque fois que je modifie/mets à jour un nœud, tous les caches de pages pour les utilisateurs anonymes sont perdus

  16. Utilisez le module Devel pour regarder les requêtes.
  17. Réécrire les requêtes de vues/éviter les vues si c'est excessif.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Profilage et réglage de la base de données - https://www.drupal.org/project/dbtuner
  21. Utilisez Boost , ne faites pas Bootstrap DB si non requis. https://drupal.org/project/boost Pour la plupart des sites de petite à moyenne taille, Boost est suffisamment bon et vous n'aurez peut-être pas besoin de proxy inversé.
  22. Utilisez les CDN - https://www.drupal.org/project/cdn C'est facile à configurer.
  23. Si vos tables de cache sont énormes, utilisez Memcached - Si vous pouvez installer memcached et configurer RAM pour cela, ce n'est pas aussi complexe qu'il y paraît.
  24. Etags - Configurez correctement les Etags. https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Utilisez Reverse Proxy Server - Vernis (au moins pour les ressources). Aide beaucoup si la plupart de vos utilisateurs sont anonymes.
  26. Transfert compressé - Activer la compression gzip
  27. Keep Alive - Utilisez des connexions persistantes lorsque cela est possible.
  28. JPEG progressif -
  29. CACHING IN CODE - Le blog d'Eaton est génial. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Implémenter le réchauffement du cache - https://www.drupal.org/project/cache_warmer - Réchauffer le cache des pages avant que l'utilisateur final ne les frappe.
  31. Master Slave DB Config - https://www.drupal.org/project/autoslave vous facilite la configuration.
  32. Clusters de base de données - https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. Équilibreurs de charge - http://en.wikipedia.org/wiki/Load_balancing_ (computing)
  34. Utiliser le réchauffement du cache heuristique - https://www.drupal.org/project/cache_graceful
  35. Mise en cache des utilisateurs authentifiés - https://www.drupal.org/project/authcache
23
Gokul N K

Boost module est également très utile, il crée des caches de fichiers statiques à partir de vos pages Web. C'est principalement pour les sites Web avec beaucoup de trafic d'utilisateurs anonymes.

Boost fournit une mise en cache de page statique pour Drupal permettant une amélioration très significative des performances et de l'évolutivité pour les sites qui reçoivent principalement du trafic anonyme. Pour l'hébergement partagé, c'est votre meilleure option en termes d'amélioration des performances. Sur les serveurs dédiés, vous voudrez peut-être envisager le vernis à la place.

Apache est entièrement pris en charge, avec Nginx, Lighttpd et IIS 7 semi-pris en charge. Boost mettra en cache et gzip compressera html, xml, ajax, css et javascript. Augmente la logique d'expiration du cache est très avancé; il est assez simple d'avoir différentes durées de vie du cache pour différentes parties de votre site. Le robot d'exploration intégré garantit que le contenu expiré est rapidement régénéré pour un chargement rapide de la page.

17
Beebee

Il convient de mentionner que si vous utilisez le pilote de base de données SQLIte, vous devrez peut-être désactiver la synchronisation du disque.

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

Sur certaines configurations de serveur, cela améliorera considérablement les performances.

4
ya.teck

Le secret de la performance de Drupal est dans la mise en cache et en suivant les bonnes pratiques. Suggestions:

Back-end Drupal

  • Activez la mise en cache dans la section Performance.
  • Vérifiez les modules Performance et Liste de contrôle des performances et de l'évolutivité .
  • Vérifiez Drupal 7 Options d'optimisation des performances et liste de contrôle .
  • Désactivez les modules inutilisés et hors production (tels que Devel, Views UI, Rules UI, etc.).
  • Désactivez les modules instables.
  • Désactiver statistiques .
  • Désactivez le module de base de dblog et remplacez-le par syslog .
  • Désactiver le module pdate Manager core .
  • Cron: utilisez le cron intégré de Drupal, pas le poormanscron (pensez à Elysia ou ltimate cron).
  • Vues: utilisez le cache pour les vues sur différentes couches (requête de base de données, balisage, temporelle).
  • Blocs: utilisez la mise en cache des blocs si votre vue est un bloc (par page, utilisateur, etc.).
  • Blocs: envisagez de modifier les paramètres de cache par bloc en utilisant le module Block Cache Alter .
  • Panneaux: utilisez le cache autant que possible (pour la vérification D7 PCC & PHC modules ).
  • Entité: Activer Cache d'entité .
  • Lorsque vous utilisez plusieurs environnements, pensez à module manquant qui peut améliorer le chargement des pages.
  • Activez la mise en cache des pages des utilisateurs authentifiés avec le module Authcache .
  • Évitez les redirections qui ralentissent l'expérience utilisateur.
  • Améliorez l'invalidation du cache en utilisant le module Expire .
  • Utilisez PHP profilage avant la production (par exemple XDebug ).

Front-end Drupal

  • Minimisez les requêtes HTTP par:
    • Activez l'agrégation JS/CSS dans la section Performance.
    • Utilisez CSS Sprites pour réduire le nombre de demandes d'images.
    • Utilisez de petites images comme données en ligne (URI dans une feuille de style).
    • Utilisez Image maps pour combiner plusieurs images en une seule image.
    • Pensez également à utiliser le chargement d'images paresseuses (voir: Image Lazyloader ).
    • Installez module BigPipe pour réduire les temps de chargement.
    • Considérez le chargement différé par rapport à l'évaluation différée.
    • Voir: tilisation du cache du navigateur - Exposé!
  • Pensez à faire du JavaScript et du CSS externe (dans certains cas, c'est plus rapide).
  • Réduisez JavaScript et CSS (voir: Speedy module). Évitez en ligne.
  • Lors du référencement d'un JS, utilisez les attributs defer ou async.
  • Réduisez le nombre d'iframes.
  • Optimisez les images, les polices, les sprites CSS, rendez les favicon petits en mémoire cache et réduisez la taille des cookies.
  • Réduisez le nombre d'éléments DOM et cachez les références aux éléments accessibles.
  • Accélérez le chargement de vos 404 pages en utilisant le module Fast 404.
  • Activez l'agrégation et la mise en cache des ressources frontales avec Agrégation CSS/JS avancée .
  • Mettez les feuilles de style en haut et les scripts en bas.
  • Ajoutez un en-tête Expires ou Cache-Control, également ETags pour réduire les réponses.
  • Utilisez GET pour AJAX et rendez-les en cache.
  • Composants de préchargement et de post-chargement pour profiter du temps d'inactivité du navigateur.
  • Parfois, la division des composants entre les domaines peut maximiser les téléchargements parallèles.
  • Ne redimensionnez pas les images en HTML et gardez les composants sous 25k.
  • Évitez les filtres, les expressions CSS, les éléments HTML avec src ou href vide.
  • Utilisez un proxy inverse pour déboguer vos demandes Web (par exemple Charles ).
  • Utilisez des outils tels que Y-Slow et PhantomJS pour les contrôles de performances de base.
  • Utilisez Google PageSpeed outils pour analyser et optimiser votre site Web.
  • En savoir plus sur Timing de navigation W3C spécifications ( GitHub ).

PHP

  • Activer PHP cache (par exemple OpCache, [~ # ~] apc [~ # ~]) et paramètres Tweak.
  • Pensez à utiliser PHP-FPM au lieu de mod_php plus Nginx au lieu d'Apache.

Base de données

Serveur

  • Vérifiez configuration système recommandée pour Drupal.
  • Vérifiez paramètres de serveur Web recommandés pour Drupal.
  • Vérifier recommandé PHP pour Drupal.
  • Assurez-vous que l'hébergement est sur des périphériques de stockage rapide (par exemple SSD).
  • Utilisez un serveur dédié rapide et fiable contrairement à l'hébergement mutualisé.
  • Installez Redis ou memcached (avec support igbinary) et configurez Drupal pour l'utiliser).
  • Définissez des TTL plus longs pour les moteurs de recherche (par exemple TTL de 24h évite que les robots atteignent le serveur).
  • Réduisez les recherches DNS (assurez-vous qu'elles sont mises en cache).

Sites Web à fort trafic

Si vous prévoyez une charge élevée pour votre site Web, utilisez Varnish. Pensez également à utiliser CDN.

En savoir plus sur: Expérience du monde réel en matière de mise à l'échelle et de réglage des performances


Autres ressources:

3
kenorb

Il existe un livre intitulé High Performance Drupal qui fournit les meilleures pratiques, des exemples et des explications détaillées pour résoudre plusieurs problèmes de performances et d'évolutivité. Vous apprendrez à appliquer les techniques de codage et d’infrastructure aux composants internes Drupal, aux performances des applications, aux bases de données, aux serveurs Web et à l’analyse des performances.

Dans l'article Performances et évolutivité dans Drupal 7 vous pouvez trouver des exemples de Drupal 6 et Drupal 7 et la liste suivante:

Projets de performance et d'évolutivité Drupal 7 à surveiller:

2

En tant que développeur principal, il est toujours possible d'améliorer votre code pour améliorer les performances du site Web. Certaines directives pour les développeurs backend pourraient être:

1) Nettoyez votre table de surveillance

2) N'abusez pas de l'API variable

3) Faire moins ou mieux de requêtes HTTP

4) Gardez votre "module dot" court

En ce qui concerne les constructeurs de polices et les constructeurs de sites, beaucoup plus peut être accompli, mais il est important de prendre en considération les performances à tous points de vue.

Source: Optimiser avant de mettre en ligne

1
targoo

Il existe quelques possibilités d'améliorer Drupal la vitesse à un niveau raisonnable sans installer de nouveaux modules. Oui, Drupal a une configuration de performances.

  1. Vous pouvez configurer cela en allant sur: YourSiteDomain/admin/config/development/performance
  2. Activer les pages de cache pour les utilisateurs anonymes sous Chaching
  3. Durée de vie minimale du cache: 1 jour (si vous ne faites pas de mises à jour régulières)
  4. Expiration des pages mises en cache: 1 jour (si vous ne faites pas de mises à jour régulières)
  5. Activer "Compresser les pages mises en cache"
  6. Activez "Agréger et compresser les fichiers CSS"
  7. Activer les "fichiers JavaScript agrégés"

  8. Une fois ces configurations définies, accédez à: YourSiteDomain/admin/reports/status

  9. Vérifiez s'il y a des problèmes d'autorisation pour les répertoires 'css' et 'js'
  10. Corrigez l'autorisation telle que définie sur la page Rapport d'état

Et maintenant, vous avez terminé avec l'optimisation de la vitesse pour votre site drupal 7.

Il existe peu d'outils de test de vitesse en ligne pour vérifier la vitesse. Assurez-vous d'utiliser l'un des outils de vérification de la vitesse et d'exécuter un test avant de mettre à jour les paramètres ci-dessus. Et une fois que vous avez mis à jour le paramètre de performances, exécutez à nouveau le test de vitesse. Vous verrez certainement une amélioration.

Pingdom et HTTP Fox (plugin FireFox) sont les meilleurs outils pour vérifier la vitesse du site.

Les paramètres ci-dessus mettent non seulement vos pages en cache pour les utilisateurs anonymes, mais également les fichiers CSS et JS. Par exemple, si votre site charge 80 fichiers, publiez ces paramètres, le nombre de demandes sera réduit à au moins 50%. Vous avez donc ici une amélioration de la vitesse 2x sur votre Drupal site.

1
AnAnD

Il y a eu beaucoup de réglages pour optimiser les performances de votre site Drupal - mais pas tous sont impératifs cependant. Nous devons chercher autour de certaines alternatives et techniques qui conduiraient à une plate-forme d'optimisation de Drupal. Cache, oui, c'est un moyen d'optimiser le site Web par différents moyens, mais d'autres modules complémentaires et astuces peuvent augmenter et affiner votre site Web sans aucun processus sans tracas à entreprendre.

Nous avons récemment publié un article similaire sur notre site Web qui, je crois, pourrait vous aider à effectuer quelques travaux sur Tweak.

Source: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips

1
Sabih

Un site Drupal 7 non optimisé avec 2 Go de RAM peut servir environ 20-25 requêtes par seconde de manière satisfaisante. Si vous voulez aller plus loin, le site nécessiter quelques ajustements. Ce que vous Tweak dépend si la plupart des utilisateurs du site sont anonymes ou authentifiés. Voici les principales choses que vous pouvez faire pour améliorer les performances:

Le site est principalement destiné aux utilisateurs anonymes:

1) Installez et configurez définitivement APC, memcache et entitycache.

2) Mettez le proxy Varnish devant le serveur Web. Il faut environ 30 minutes pour installer et configurer, mais cela réduira considérablement les temps de chargement de vos pages. En fait, Varnish peut gérer environ 300 requêtes par seconde sur une machine de 2 Go si toutes les pages sont mises en cache. Utilisez le module Expirer pour expirer uniquement les pages sélectionnées lors de la mise à jour/suppression de contenu.

3) Utilisez le module d'agrégation CSS/JS avancé pour agréger les fichiers CSS et JS. Essayez de déplacer tous les fichiers JS en bas de la page. Mais notez que cela peut casser votre site, alors implémentez-le en production après des tests approfondis. Essayez également d'inclure les CSS critiques. D'après mon expérience, cela réduira le temps de chargement des pages d'environ une demi-seconde.

4) Les images CSS/JS/devraient avoir un en-tête d'expiration très éloigné. Cela garantira que les navigateurs ne demanderont pas les mêmes images CSS/JS/encore et encore.

5) Assurez-vous que le serveur Web sert des pages compressées/CSS/JS.

Après avoir mis en œuvre les 5 étapes ci-dessus, votre serveur de 2 Go RAM devrait pouvoir gérer assez facilement 50 requêtes par seconde.

Le site sert principalement des utilisateurs authentifiés:

L'optimisation d'un tel site est plus complexe. Ces sites entrent dans l'une des deux sous-catégories à des fins d'optimisation:

(a) La plupart des pages du site sont identiques sauf 1 ou 2 blocs qui contiennent des informations spécifiques à l'utilisateur. Par exemple Drupal Site de commerce.

(b) La plupart des pages sont entièrement personnalisées pour l'utilisateur. Par exemple Drupal site Commons.

Si votre site appartient à la catégorie (a), appliquez la plupart des techniques dont nous avons parlé pour le site destiné principalement aux utilisateurs anonymes. La seule différence est que pour les pages non admin, Varnish devra supprimer le cookie SESSION de l'en-tête et servir les pages mises en cache. Utilisez AJAX Module de bloc pour bloquer les blocs avec des informations spécifiques à l'utilisateur en utilisant AJAX. De cette façon, la majeure partie de la page sera servie extrêmement rapidement en utilisant Varnish, puis les informations spécifiques à l'utilisateur seront servies via AJAX.

Si votre site appartient à la catégorie (b), utilisez le module Authcache. Je préfère ne pas l'utiliser autant que possible car il nécessite pas mal de configuration et de maintenance. Mais cela fonctionne vraiment bien. Ce ne sera pas aussi rapide que d'utiliser Varnish mais il sera capable de gérer 50 requêtes par seconde que vous recherchez.

Si vous cherchez à aller au-delà de ce que nous avons discuté ici, alors jetez un œil à Drupal Performance Optimization Checklist . Divulgation: C'est écrit par moi. Il cite une liste exhaustive des choses que vous pouvez faire pour rendre votre site Drupal rapide) flamboyant.

1
Neerav Mehta