web-dev-qa-db-fra.com

drupal augmentation de la vitesse du site

J'utilise un site drupal avec un thème de rockettheme.

Les utilisateurs sont des utilisateurs membres. Le problème est pour une raison inconnue, le site est très lent. Prend environ 20 secondes pour ouvrir la page.

J'ai essayé de changer de VPS, mais pas de gain de performance.

Je n'utilise pas beaucoup de modules, cela encombrerait le site.

Quelles solutions possibles dois-je envisager pour augmenter la vitesse du site et l'amener à s'ouvrir en temps normal.

Exécution de 120 requêtes en 113,52 millisecondes. Les requêtes de plus de 5 ms et les requêtes exécutées plus d'une fois sont mises en surbrillance. Le temps d'exécution de la page était de 2534,15 ms.

Exécution de 87 requêtes en 24,6 millisecondes. Les requêtes de plus de 5 ms et les requêtes exécutées plus d'une fois sont mises en surbrillance. Le temps d'exécution de la page était de 2609.59 ms.

Exécution de 123 requêtes en 41,05 millisecondes. Les requêtes de plus de 5 ms et les requêtes exécutées plus d'une fois sont mises en surbrillance. Le temps d'exécution de la page était de 1282.27 ms.

Je ne pense pas que ce soit normal.

7
Nikhil

Mise à jour:

J'ai trouvé un fichier particulier mootools.js prend beaucoup de temps à charger dans ylsow, mais en l'ouvrant directement, il n'y a aucun délai.

C'est un très bon indice finalement - MooTools est-il vraiment requis? Drupal utilise jQuery exclusivement dans le noyau et la plupart des modules contribués le font également. Veuillez noter que, même si cela est possible, l'utilisation de plusieurs infrastructures JavaScript majeures n'est généralement pas recommandée par la plupart des développeurs. nécessite au moins une gestion dédiée et peut introduire toutes sortes de problèmes étranges (difficiles à résoudre) quels que soient:
Vous trouverez de nombreux messages liés dans jQuery + MooTools sur le dépassement de pile, voir cet exemple de réponse à Mootools et Intégration JQuery mentionnant spécifiquement les énormes ralentissements de page.

Étant donné que vous n'utilisez pas beaucoup de modules , je suppose que seule une fonctionnalité isolée demande spécifiquement MooTools. Par conséquent, je vous suggère de désactiver cette option complètement (c.-à-d. Assurez-vous que mootools.js est plus chargé) et voyez si cela fait une différence.


Vous pouvez consulter les différentes réponses sur question respective sur le dépassement de pile - bien qu’elles chevauchent la plupart du temps avec celles données ici entre-temps, certaines observations supplémentaires sont diffusées dans les commentaires ici et là.

En dehors de cela, je voudrais souligner encore une chose importante, comme déjà mentionné dans une certaine mesure par DisgruntledGoat et bpeterson76 (+1 chacun):

Bien que Drupal ne soit pas le CMS le plus rapide au départ, les temps de chargement des pages que vous voyez ne sont pas normaux ( Bien que possible sur des systèmes/serveurs mal configurés) - vous devez donc analyser et identifier la ou les causes en premier , avant d'appliquer des optimisations de quelque nature que ce soit! Certes, certaines optimisations recommandées pourraient aider même sans cela, mais la règle d'or des optimisations de performances (et autres) est de comprendre le problème plutôt que d'essais et d'erreurs.

Pour vous aider à commencer, j'aimerais commenter trois sujets soulevés spécifiquement et fournir un pointeur vers une documentation plus complète concernant le sujet ci-dessous:

J'ai essayé de changer de VPS, mais pas de gain de performance

  • D'accord, vous devez quand même vérifier explicitement si les piles VPS et LAMP utilisées fonctionnent normalement (c'est-à-dire sans Drupal)?
    • La réponse de bpeterson76 adresse les causes possibles.

Je pense que le principal responsable est le thème.

  • Ensuite, vous devriez vérifier cette hypothèse, qui est facilement réalisée en passant à un autre thème, de préférence un avec des caractéristiques de performance connues, par ex. le thème par défaut de Garland.

Je ne pense pas que la requête SQL soit en cause.

  • Vous vous êtes déjà rendu compte que vous devriez également vérifier cette hypothèse - cela peut être abordé de différentes manières. Je commencerais par le module de développement , qui propose diverses offres concernant la journalisation des performances. , y compris le temps d'exécution SQL (les autres éléments sont également utiles, bien sûr).
    • Veuillez noter que pour des temps d'exécution SQL plus précis, vous devez utiliser des outils dédiés pour le système de base de données utilisé.

Tout cela, et bien plus encore, est traité via mise en cache Drupal, vitesse et performances - ce centre de ressources peut sembler accablant à première vue, mais comme je l'ai dit , nous comprenons le problème est essentiel pour résoudre les problèmes de performances - pour permettre un démarrage rapide, je recommande tout particulièrement de lire Considérations relatives au réglage du serveur , en particulier la section Compréhension et configuration de votre pile pour la performance .

Bonne chance!

1
Steffen Opel

Si le chargement de la page dure 20 secondes, il y a probablement un goulot d'étranglement important quelque part. APC pourrait le réduire à 5 à 10 secondes, mais ce n'est toujours pas suffisant pour le serveur. Et cela n’aidera pas si le goulot d’étranglement est une requête SQL.

Les modules peuvent ralentir un peu le site, mais pas beaucoup. Essayez de désactiver chacune d’elles à tour de rôle pour voir s’il ya de grandes améliorations.

Une autre solution si vous ne pouvez pas améliorer autant la vitesse consiste à mettre en cache les pages autant que possible. Avec différents sites (en utilisant CodeIgniter), j'ai constaté que cela faisait une énorme différence - le serveur répond instantanément et vous avez vraiment le temps côté client.

En fonction de ce que vous incluez dans le délai de 20 secondes (c'est-à-dire côté serveur ou côté client également), vous pouvez trouver la page Meilleures pratiques de Yahoo utile.


Pour déterminer où se trouve le goulot d'étranglement, recherchez des modules de profileur pour Drupal (le cas échéant), ils vous indiqueraient dans quelles parties le code est lent. Ou, vous pouvez ajouter votre propre code de chronométrage au modèle:

$time1 = microtime();
// some chunk of code
$time2 = microtime();
// another chunk of code
$time3 = microtime();
echo 'First chunk: ', ($time2-$time1/1000), ' seconds';
echo 'Second chunk: ', ($time3-$time2/1000), ' seconds';

Répétez cette opération à différents endroits et vous devriez être en mesure de le réduire à une section ou deux pendant 10 à 20 secondes.

4
DisgruntledGoat
  • Utiliser un cache d'opcode comme APC
  • Utilisez un outil tel que xDebug pour voir où se trouvent vos goulots d'étranglement. De cette façon, vous savez ce que vous devez aborder au lieu de simplement deviner.
3
John Conde

Lors de la création d'applications PHP, j'ai découvert que je pouvais éliminer les goulots d'étranglement de bas niveau à l'aide des outils de développement de Firefox ou de Chrome. Cliquez sur l'onglet ressources et observez le chargement des éléments de la page. C'est particulièrement utile lorsque vous travaillez avec des requêtes XHR (AJAX).

Commencez par envoyer une requête ping au serveur. J'ai une machine de développement qui était dans une situation similaire l'autre jour .... La machine de développement rampe et prend plus de 10 secondes à se charger. Mais, j'ai un code identique sur un autre serveur identique (mais dédié) fonctionne à la vitesse de l'éclair. Faire des tests de ping, c'est terriblement lent. Il s'avère que la machine est partagée et qu'une des autres personnes possédant un compte sur le serveur exécute un site à bande passante très élevée (probablement un site pour adultes) qui ralentit tout le monde. Ce site fautif est maintenant en train d'être déplacé par l'hôte.

Xdebug est certainement une bonne option comme mentionné ci-dessus. Mais il n’arrive pas toujours à la source du problème si aucune erreur n’est générée. Je commencerais par le journal des erreurs en premier, afin d'éviter que d'autres ne soient créées. Puis Xdebug.

Je suivrais en désactivant les fonctionnalités une par une. En outre, il serait intéressant de surveiller la charge du serveur pour vous assurer que quelque chose de non lié n'enlève pas les processus MySql ou Apache.

Enfin, si le problème n'est toujours pas résolu, j'isolerais les zones qui, selon moi, sont à l'origine du problème, et insérerais les horodatages de début/de fin de microtime que je produis pour le journal ou le courrier électronique. Cela semble ridicule, mais j’ai constaté une augmentation de plus de 200% des performances du code avec cette méthode.

2
bpeterson76

la mise en cache est-elle activée dans /admin/settings/performance?

Il vaut la peine de vérifier avant de vous lancer dans des solutions plus complexes.

1
WalterJ89

Je recommande d'utiliser Postgresql, drupal le supporte.

0
NARKOZ