chargement lent des pages

8

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_bodycause 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 --apcuaprès avoir compilé di. Et bien sûr, apc est opérationnel.

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

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.

estimation-expédition-méthodes "retard"

chargement de la page de paiement

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é.

Steros
la source
je n'en sais pas beaucoup plus. J'ai rencontré ce problème lorsque j'appelais une API ou un plugin tiers. Cela s'est produit lorsque je n'ai reçu aucune réponse de sa part.
55840
J'essaie actuellement d'éliminer tout ce qui pourrait interférer. J'appelle également une API tierce, je l'ai donc désactivée pour un test. Pas de changement. Jusqu'à présent, je n'ai pas réussi à exclure ce qui ralentit le chargement de la page.
steros
Je vais sortir sur une branche et deviner que si vous fermez le débogueur Chrome, le temps passera "comme par magie" dans (ou au moins significativement plus près) le temps de chargement de 2 à 4 secondes. Pendant les enquêtes sur les sites M2 en direct, je ne pouvais pas comprendre comment les commerçants accepteraient des temps de chargement de 15 secondes. J'ai finalement réalisé qu'en utilisant le débogueur chrome comme mécanisme de synchronisation, je ralentissais par inadvertance la demande d'un ordre de grandeur.
Peter O'Callaghan
Je testais juste ça. La plupart des pages prennent au moins ~ 4 secondes et le panier jusqu'à 7 secondes. Mais au moins, le paiement ne se charge pas en 15 secondes dans tous les autres navigateurs, plus comme 5 secondes. Semble que c'est quelque chose avec du chrome.
steros
J'ai réussi à réduire davantage le temps en utilisant memcached pour le cache de session. Comme mentionné, j'ai utilisé redis mais cela a conduit au verrouillage, donc je suis revenu aux fichiers mais il semble que les verrous aussi. Je suis donc passé à memcached et maintenant le chariot se charge en ~ 2 secondes sur la deuxième charge et 5-7 secondes sur la première. Il semble que les méthodes d'estimation et d'expédition et les informations totales soient le bloqueur ici. Si je recharge juste le chariot sans aucun changement, c'est que 2 secondes. Si j'ajoute un produit ou modifie simplement la quantité et rafraîchis le panier -> 5-7 secondes.
steros

Réponses:

3

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.

'session' =>
array (
  'save' => 'redis',
  'redis' =>
  array (
    'host' => '127.0.0.1',
    'port' => '6379',
    'password' => '',
    'timeout' => '2.5',
    'persistent_identifier' => '',
    'database' => '2',
    'compression_threshold' => '2048',
    'compression_library' => 'gzip',
    'log_level' => '1',
    'max_concurrency' => '6',
    'break_after_frontend' => '5',
    'break_after_adminhtml' => '30',
    'first_lifetime' => '600',
    'bot_first_lifetime' => '60',
    'bot_lifetime' => '7200',
    'disable_locking' => '0',
    'min_lifetime' => '60',
    'max_lifetime' => '2592000'
  )
),

Mais comme j'ai le problème de verrouillage de session, je pense que cela prend en compte:

break_after_frontend

Nombre de secondes à attendre avant d'essayer de briser le verrou pour la session frontend (c'est-à-dire la vitrine).

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:

memcached.sess_lock_wait_min => 1000
memcached.sess_lock_wait_max => 2000
memcached.sess_lock_retries => 5

Ce sont les valeurs par défaut d'une ancienne version php-memcached. La dernière version propose ces valeurs par défaut:

memcached.sess_lock_wait_min => 150
memcached.sess_lock_wait_max => 150
memcached.sess_lock_retries => 200

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:

ini_set('memcached.sess_lock_wait_min', 150);
ini_set('memcached.sess_lock_wait_max', 150);
ini_set('memcached.sess_lock_retries', ini_get('max_execution_time') * 1000 / 150);

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.

Steros
la source
Je suis également coincé sur ce Sateros. J'utilise du vernis avec une solution de contournement pour https et Redis. Le site est lent. J'ai parcouru newrelic et je n'ai pas trouvé la réponse concluante. Est-ce le problème de Redis?
Adarsh ​​Khatri
1

Optimisations possibles:

Profiler

M. Lewis
la source
0

En utilisant Solar ou Memcache ou Varnish, vous pouvez accélérer votre site magento.

Puspalata Panigrahi
la source
J'utilise Redis et memcached. Je ne peux pas utiliser Varnish car il ne prend pas en charge https et je ne veux pas utiliser l'une des solutions de contournement.
steros
@steros Veuillez consulter mon profil, le profil du réseau pour les coordonnées et contactez-moi par Skype pour obtenir de l'aide.
Wilson Hauck