Temps de chargement des pages incohérents

11

Je suis sur le point de terminer un grand projet magento et je me suis concentré sur l'amélioration de la vitesse de magento. En guise de préface, je suis plutôt un développeur front-end qui fait ce gros projet en interne et qui comprend les choses au fur et à mesure.

J'ai développé magento sur un serveur virtuel dédié à Media Temple avec 2 Go de RAM. J'ai récemment eu jusqu'à 600 produits et environ 25 attributs différents sur chaque produit (environ 300 attributs uniques au total) et peut-être 50 catégories. J'ai supprimé tout cela pour tenter de dépanner les vitesses de charge autour de 15 secondes.

Cependant, mes temps de chargement sont encore longs et incohérents. Je recharge ma page d'accueil avec Firebug rapportant 500 ms pour une réponse, et je recharge à nouveau immédiatement et il rapporte plus de 9 secondes. Est-ce un problème de serveur ou quelque chose avec Magento lui-même? Comment puis-je tester quelque chose comme ça?

andyjv
la source

Réponses:

11

Vous devez d'abord décider de ce que vous testez, que ce soit le temps de rendu PHP ou le temps de chargement de la page dans le monde réel.

Dans les deux cas, l'utilisation de Firebug ne sera pas fiable - car votre connexion Internet elle-même pourrait être le goulot d'étranglement ou la raison de la gigue.

PHP Render Time

Si vous cherchez simplement à voir si le temps de rendu PHP s'est amélioré / changé - alors le moyen le plus précis est d'utiliser la sortie du profileur Magento.

Dans index.php, décommenter

Varien_Profiler::enable();

Puis dans

Admin> Système> Configuration> Développeur

Assurez-vous que le profileur est activé.

Vous vous retrouverez avec une sortie tabulaire au bas de chaque page (front-end et back-end) décomposant le temps de chargement de la page, mesuré à partir du point de Mage::run()départ. La toute première ligne indiquera le temps total de rendu PHP (dans Mage).

Ce sera votre chiffre le plus précis pour déterminer si vos modifications PHP font une différence dans le temps de chargement de la page, sans parler, cela identifiera les goulots d'étranglement des performances.

Temps de rendu du serveur Web PHP

Le prochain type de test consiste à prendre en compte les frais généraux du serveur Web lui-même (mais pas la connectivité du dernier kilomètre). Donc, pour que ce test soit précis et qu'il ne soit pas influencé par «Internet» lui-même, vous devez l'exécuter sur le serveur Web lui-même.

Nous utilisons notre propre utilitaire mage-perftest(plus d'informations peuvent être trouvées ici ) - qui peuvent tester le temps de rendu PHP pur, le temps de chargement de page dans le monde réel et même les tests de concurrence.

Pour tester uniquement le temps de rendu du serveur Web PHP, vous devez utiliser (remplacer l'URL en conséquence)

./mage-perftest -u me-s1.sonassihosting.com -b

Ce test donnera une ventilation du temps de chargement de la page (pour juste l'élément PHP de la page, en ignorant tout JS / CSS / Images). La sortie ressemble à ceci,

Test Summary
============
Total files:              1
Total downloaded:         4K
Avg. page weight:         4.00K

Total time:               0.035s
Min response:             0.035s
Max response:             0.035s
Avg. page response:       0.03s

Concurrency/Repeats:      1
Transactions/s            28.57
Test URL:                 me-s1.sonassihosting.com
Success rate:             1/1 (100.00%)

Temps de rendu du serveur Web réel

Le dernier type de test est le temps nécessaire pour télécharger la page entière (PHP + contenu statique). Encore une fois, vous pouvez utiliser mage-perftestpour ce faire, par exemple.

./mage-perftest -u me-s1.sonassihosting.com

Évitez tout service de test en ligne comme la peste

Il existe des outils de test de vitesse en ligne comme GTMetrix, Pingdom, etc. Ils ne vous donneront aucun résultat précis pour le profilage granulaire.

Ils ont leur place en termes de test de connectivité réseau externe, mais sont complètement inutiles comme moyen de vérifier les performances PHP réelles. Restez fidèle aux tests sur serveur / local pour cela.

Autres notes

Nous avons écrit un article sur les tests à distance et pourquoi vous devriez les éviter, http://www.sonassi.com/knowledge-base/magento-kb/why-siege-isnt-an-accurate-test-tool-for-magento- performance/

Exécuter Magento dans un VPS est une mauvaise idée. D'autres peuvent être en désaccord - mais ce n'est pas un environnement approprié pour un magasin Magento pour un certain nombre de raisons - et nous avons répondu à BEAUCOUP de questions dans cette veine, en voici quelques-unes

Ben Lessani - Sonassi
la source
Perftest est génial - est-ce sur Github pour que je puisse le bifurquer?
philwinkle
J'ai eu du mal à exécuter perftest, mais le profileur a fourni des informations intéressantes: mage::dispatch::routers_matchet mage::dispatch::controller::action::predispatchsemble être un goulot d'étranglement, bien que je ne sois pas sûr de la solution ... la recherche ne propose pas grand-chose.
andyjv
Plus j'ouvre de pages en même temps, plus Magento passe de temps mage::dispatch::routers_match, ce qui représente 22 secondes sur un chargement de 28 pages. Sur la même charge, il y en a aussi mage::dispatch::controller::action::predispatchà 22s, CORE::create_object_of::Mage_Core_Model_Sessionà 21s et Mage_Core_Model_Session_Abstract_Varien::start/startà 21s. Je suis sûr qu'il y a quelque chose parent / enfant qui se passe, mais routers_matchétant donné que c'est le plus long, je suppose que c'est le parent des 20 autres fonctions secondes
andyjv
La sortie du profileur est hiérarchiquement inclusive. C'est à dire. Il affiche un total inclusif pour tout ce qui se déroule dans cette fonction. Alors , Magesera le plus long car il comprend tout, Routers_Matchest essentiellement la fonction suivante appelle, que tout le reste est généré à partir. Ce n'est pas le goulot d'étranglement, mais quelque chose qu'il appelle (regardez plus loin dans le tableau) l'est. N'ouvrez pas plus d'une fenêtre si vous effectuez un profilage - cela ne permettra rien.
Ben Lessani - Sonassi
Ci-dessous Routers_Matchil y a: DISPATCH EVENT:controller_action_predispatchau 21.0710, et OBSERVER: logau 21.0565
andyjv
3

Il s'agit très probablement d'un problème de serveur et non d'un problème de Magento. Selon le type de serveur que vous utilisez, vous pouvez obtenir un temps de chargement inférieur à une seconde. Vous pouvez même exécuter des tests plus sophistiqués ici: http://www.magespeedtest.com/ . Vous pouvez également consulter la vitesse d'autres fournisseurs de serveurs.

Je recommanderais également d'utiliser le rapport sur les chutes d'eau de http://www.webpagetest.org/ et de voir d'où vient exactement votre "lenteur". Il le décomposera en parties (comme le temps qu'il faut pour télécharger chaque fichier css, js et image), ce qui peut vous aider à améliorer la vitesse.

Cela étant dit, même si vous optimisez le code, les CSS, les images et le contenu Magento au maximum, le serveur sera toujours le plus gros problème. Je recommanderais d'utiliser un fournisseur d'hébergement Magento, car leurs serveurs sont plus affinés pour aider Magento. Personnellement, j'utilise Nexcess, mais d'autres dont j'ai entendu de bonnes choses sont Sonassi Hosting et Peer1.

Il y a quelques articles sur la façon d'améliorer la vitesse, je vous recommande de lire les pages blanches sur le site Web de Magento.

Bien qu'il soit davantage orienté vers Enterprise, vous pouvez toujours bénéficier de nombreux conseils. Assurez-vous également de garder Magento à jour! Vous ne devriez pas tomber plus de deux versions de la version actuelle.

kab8609
la source
1
Ravi de vous avoir ici kab8609! :-)
Fabian Blechschmidt