Je suis actuellement confronté à un chargement de page lent, le paiement étant le plus lent de tous :
- 28 requêtes
- 18,5 Ko transférés (reste mis en cache à partir du disque ou de la mémoire)
- Fin: 15.24s (le chargeur disparaît et l'utilisateur peut faire quelque chose)
- DOMContentLoaded: 6,45 s
- Charge: 10.28s
Le chargement de la caisse / du panier se termine par:
- 29 requêtes
- 28,5 Ko transférés (reste mis en cache à partir du disque ou de la mémoire)
- Finition: 6,35 s
- DOMContentLoaded: 1.9s
- Charge: 3.79s
alors qu'un chariot vide a ceci:
- 22 requêtes
- 8,2 Ko transférés (reste mis en cache à partir du disque ou de la mémoire)
- Finition: 2,78 s
- DOMContentLoaded: 1.22s
- Charge: 2,65 s
J'utilise redis pour la mise en cache et tous les caches sont actifs. Javascript est minifié, fusionné et regroupé ainsi que css et html. Le serveur est assez bien situé avec 8 CPU, 16 Go de RAM et un SSD. La charge, etc. n'est jamais assez élevée pour être même mentionnée. Fondamentalement, le serveur dort ...
Il y a seulement ~ 80 produits et un magasin. Nous n'utilisons pas la partie contenu de Magento. Seuls les pages de détails des produits, la caisse et l'espace client (ainsi que le backend) sont servis par Magento. Il existe un système CMS "en face" de Magento qui dessert les pages en moins d'un deuxième total, y compris les médias.
Je vois que TTFB pour le document de paiement est déjà 5.66s. Avec le profileur Magento activé, je peux trouver que cela magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body
cause la plupart du temps. Bien qu'on ne sache pas exactement ce qui en est la cause. Ici, le profileur ne peut pas aider beaucoup (moi du moins).
magento->routers_match 5.347600 5.347600 1 42,063,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index 5.143997 5.143997 1 15,976,176 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body 5.143980 5.143980 1 15,975,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest 0.000609 0.000609 1 82.464 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest->OBSERVER:checkout_allow_guest 0.000592 0.000592 1 80.944 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT 0.106220 0.035407 3 13,085,544 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_load 0.000666 0.000666 1 136.56 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_xml 0.005658 0.005658 1 174.632 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks 0.099472 0.099472 1 12,755,648 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements 0.099462 0.099462 1 12,902,296 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements 0.091426 0.091426 1 11,885,184 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->EVENT:core_layout_block_create_after 0.000169 0.000003 51 -16.128 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements 0.000609 0.000609 1 52.76 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements 0.000455 0.000455 1 26.952 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after 0.000297 0.000297 1 16.32 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after->OBSERVER:persistent 0.000279 0.000279 1 14.776 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch 0.002972 0.002972 1 116.752 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch 0.002913 0.002913 1 110.192 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor 0.002900 0.002900 1 108.656 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags 0.001175 0.001175 1 77.784 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_varnish 0.000516 0.000516 1 35.056 0
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_builtin 0.000629 0.000629 1 41.08 0
J'ai également activé le profileur de base de données, mais aucune requête ne prend plus de 1 ms, même s'il y a près de 120 appels. Mais cela ne représente alors que 120 ms.
J'ai généré un profil xdebug localement et je constate que la plupart du temps est perdu en chargement automatique. Mais je ne sais pas si c'est "normal". Je me demande simplement pourquoi file_exists est appelé si souvent. Comme j'avais l'impression que tout est précompilé et mis en cache. J'utilise composer dump-autoload -o --apcu
après avoir compilé di. Et bien sûr, apc est opérationnel.
Pourtant, je suis coincé ici pour l'instant. Je ne semble pas être en mesure de comprendre pourquoi TTFB est déjà de 5 secondes. Et même si j'ai résolu qu'il restait encore 10 secondes à expliquer et à corriger. Ma principale supposition est actuellement que ce sont des demandes xhr dans le blocage en arrière-plan. C'est à dire. Je vois que les méthodes d'estimation des expéditions ne commencent qu'après un intervalle intensément long d'environ 7 secondes à 13 secondes et prennent environ 647 ms. Pourquoi attend-il si longtemps pour déclencher cela? Jusqu'à ce que l'animation du chargeur soit terminée, la page semble se bloquer.
Toute contribution est la bienvenue! J'espère un chargement de page de 2 à 4 secondes max. c'est comme ça que j'ai commencé.
Edit: j'ai corrigé le TTFB élevé. Comme je l'ai dit, j'utilise Redis pour la mise en cache. Également pour la mise en cache de session, mais cela conduit à un verrouillage entre deux sessions simultanées. Il s'agit en fait de la demande de paiement et de la demande d'estimation-expédition menant à un délai d'attente de 5 secondes. J'ai remis les sessions en mode de fichier normal. Malheureusement, cela n'a pas du tout réglé le long temps de chargement! Ma meilleure supposition actuelle est que quelque chose fait attendre les méthodes d'expédition-estimation avant d'être appelé, ce qui entraîne un blocage de la page. De plus, j'ai essayé de reporter tous les JS sans aucun changement.
Edit2: Comme le note @ peter-ocallaghan, le problème avec le chargement de la caisse si lent (+10 secondes) n'est en fait qu'un problème spécifique à Chrome lorsque la console de développement est ouverte. Le paiement / panier ne semble pas être affecté.
Réponses:
Il semble que mon principal problème soit la simultanéité des sessions, quelle qu'en soit la raison. J'ai essayé d'utiliser la mise en cache de session avec Redis comme proposé dans la documentation.
Mais comme j'ai le problème de verrouillage de session, je pense que cela prend en compte:
Cela signifie qu'il y a toujours un retard de max. 5 secondes. Lorsque je suis passé à la session memcached, cela s'est légèrement amélioré parce que l'attente était plus courte. Il prend par défaut ces paramètres:
Ce sont les valeurs par défaut d'une ancienne version php-memcached. La dernière version propose ces valeurs par défaut:
Après avoir lu ces deux: https://github.com/php-memcached-dev/php-memcached/pull/350 https://github.com/php-memcached-dev/php-memcached/issues/269
J'ai essayé avec:
dans index.php de Magento et cela accélère à nouveau le processus. Je reçois maintenant une charge de la caisse en environ 4 secondes. Le chariot est un peu plus lent avec ~ 5 secondes à cause du chargement des informations totales. (tout d'abord, essayez de ne pas mettre en cache le navigateur)
Je suppose que la résolution du problème de verrouillage de session accélérerait à nouveau les temps de chargement car la lecture des profils révèle qu'il y a encore une attente
session_start()
de 300 à 800 ms pour plusieurs appels.la source
Optimisations possibles:
Profiler
la source
En utilisant Solar ou Memcache ou Varnish, vous pouvez accélérer votre site magento.
la source