Comment puis-je améliorer les performances de mon site Drupal7? [fermé]


10

Pour quelqu'un qui est nouveau sur Drupal, je vois qu'il existe de nombreuses ressources disponibles sur Drupal Caching mais je ne sais pas laquelle utiliser.


1
Nous pouvons discuter si nous voulons une question canonique pour cela sur la méta, mais je pense toujours qu'elle est trop large. Et les améliorations de performances peuvent être très sensibles au contexte et ne pas être réalisées en vase clos.
mpdonadio

Réponses:


26

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éliorer les 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. Block Caching 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 paresseux d'images - 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 optimisation de la base de données - https://www.drupal.org/project/dbtuner
  21. Utilisez Boost , ne pas Bootstrap DB si ce n'est pas nécessaire. 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 procurations inverses.
  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 de la 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 - Varnish (au moins pour les actifs). 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 bases de données - /programming/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

2
Excellente réponse, mais une chose qui me tient fortement à cœur, c'est que vous n'avez pas APC au sommet. APC est facile à mettre en place, il n'y a pas d'inconvénients et les gains peuvent être vraiment importants. Je pense que cela devrait aller au sommet. (Peut-être avec un commentaire qu'il n'est pas nécessaire après PHP 5.5 car l'optimisation a finalement été intégrée)
Letharion

1
Peut-être aussi mentionner quelque chose sur les gains les plus faciles pour la mise en cache? Si votre site nécessite principalement du contenu statique (les pages sont les mêmes pour tous les utilisateurs, donc pas de connexion), alors Varnish ou Boost offre les gains les plus importants.
Dominic Woodman

5

La couche de base de données est importante. J'en couvre certaines parties et les bases dans cette présentation http://goo.gl/30yi39


Super présentation MikeyTown. Vous êtes le pro de la performance :)
Gokul NK

3

En complément de la réponse de Gokul, voici la façon dont je penserais à ce que vous voulez mettre en cache dans Drupal (non ordonné par complexité):

La mise en cache signifie accélérer les activités répétées.

Les grandes actions répétées impliquées dans un site Web Drupal sont:

  • Appel d'une page Web
  • Exécuter du code PHP pour créer une page Web
  • Éléments d'appel PHP à partir de la base de données

Mise en cache d'une page Web entière

Les gains de mise en cache les plus importants doivent être obtenus en trouvant un moyen de mettre en cache une page Web entière sans jamais exécuter le code PHP ou appeler la base de données.

Vous pouvez le faire avec Varnish ou Boost . Lorsqu'un utilisateur appelle une page, il retourne une copie de la page sans jamais faire de calcul.

Cependant, cela ne fonctionnera pas si certaines parties de la page doivent être différentes (c'est-à-dire que les utilisateurs se connectent et que leur nom apparaît en haut).

Pour que cela fonctionne, vous devez examiner Authcache.

Mise en cache PHP

Vous pouvez mettre en cache PHP avec APC , ou si vous avez la version 5.5 ou supérieure, un cache différent est intégré.

Cela se fait côté serveur et signifie que des morceaux de votre code PHP seront mémorisés. Vous mettez PHP en cache pour Drupal mais vous n'interagissez pas techniquement avec Drupal.

Mise en cache de la base de données

Les appels pour récupérer des informations dans la base de données sont coûteux.

Le mécanisme de mise en cache de base de données le plus courant est memcache .

Cela met en cache les objets de base de données dans la RAM, donc au lieu d'appeler un objet de base de données sur le disque dur, vous le retirez simplement de la RAM, ce qui est beaucoup plus rapide.


1
Redis est également un excellent magasin de cache en mémoire, au moins comparable à memcache dans mon expérience (bien que memcache gagne probablement avec le clustering)
Clive
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.