Ich bin derzeit mit einem langsamen Laden der Seite konfrontiert, wobei die Kaufabwicklung die langsamste von allen ist mit :
- 28 Anfragen
- 18,5 KB übertragen (Rest von Festplatte oder Speicher zwischengespeichert)
- Ende: 15.24s (Lader verschwindet und der Benutzer kann etwas tun)
- DOMContentLoaded: 6.45s
- Belastung: 10,28 s
Das Laden der Kasse / des Warenkorbs endet mit:
- 29 Anfragen
- 28,5 KB übertragen (Rest von Festplatte oder Speicher zwischengespeichert)
- Ende: 6,35 s
- DOMContentLoaded: 1.9s
- Belastung: 3,79 s
während ein leerer Wagen dies hat:
- 22 Anfragen
- 8,2 KB übertragen (Rest von Festplatte oder Speicher zwischengespeichert)
- Ende: 2,78s
- DOMContentLoaded: 1.22s
- Belastung: 2,65 s
Ich verwende Redis zum Zwischenspeichern und alle Caches sind aktiv. Javascript wird minimiert, zusammengeführt und gebündelt sowie CSS und HTML. Der Server ist mit 8 CPUs, 16 GB RAM und einer SSD ziemlich gut gelegen. Die Last usw. ist niemals hoch genug, um überhaupt erwähnt zu werden. Grundsätzlich schläft der Server ...
Es gibt nur ~ 80 Produkte und ein Geschäft. Wir verwenden den Inhaltsteil von Magento nicht. Nur Produktdetailseiten, Kasse und Kundenbereich (sowie das Backend) werden von Magento bereitgestellt. Vor Magento befindet sich ein CMS-System, das Seiten in weniger als einer Sekunde einschließlich Medien bereitstellt.
Ich sehe, dass TTFB für das Checkout-Dokument bereits 5,66 Sekunden beträgt. Wenn der Magento-Profiler aktiviert ist, kann ich feststellen, dass dies magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body
die meiste Zeit verursacht. Obwohl es ziemlich unklar ist, was genau es verursacht. Hier kann der Profiler nicht viel helfen (zumindest ich).
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
Ich habe auch den Datenbankprofiler aktiviert, aber keine Abfrage dauert länger als 1 ms, obwohl es fast 120 Aufrufe gibt. Das summiert sich dann aber auf nur 120ms.
Ich habe lokal ein xdebug-Profil erstellt und kann feststellen, dass die meiste Zeit beim automatischen Laden verschwendet wird. Aber ich bin mir nicht sicher, ob das "normal" ist. Ich frage mich nur, warum file_exists so oft aufgerufen wird. Da ich den Eindruck hatte, ist alles vorkompiliert und zwischengespeichert. Ich benutze composer dump-autoload -o --apcu
nach dem Kompilieren di. Und natürlich läuft apc.
Trotzdem stecke ich vorerst hier fest. Ich scheine nicht in der Lage zu sein, herauszufinden, warum TTFB bereits 5 Sekunden beträgt. Und selbst wenn ich das gelöst habe, gibt es noch 10 Sekunden zu erklären und zu beheben. Meine derzeitige Hauptvermutung ist, dass dies einige xhr-Anforderungen in der Hintergrundblockierung sind. Dh. Ich sehe, dass Schätzungsversandmethoden erst nach einer sehr langen Lücke von ungefähr 7 Sekunden bei 13 Sekunden beginnen und ungefähr 647 ms dauern. Warum wartet es so lange, um das auszulösen? Bis dies abgeschlossen ist, wird die Loader-Animation angezeigt, sodass die Seite "hängen bleibt".
Jede Eingabe ist sehr willkommen! Ich hoffe auf eine Seitenladung von 2 - 4 Sekunden max. so habe ich angefangen.
Edit: Ich habe den hohen TTFB behoben. Wie gesagt, ich benutze Redis zum Zwischenspeichern. Auch für das Zwischenspeichern von Sitzungen, führt jedoch zu einer Sperrung zwischen zwei gleichzeitigen Sitzungen. Tatsächlich handelt es sich um die Checkout-Anfrage und die Schätzung-Versand-Anfrage, die zu einer Zeitüberschreitung von 5 Sekunden führen. Ich habe die Sitzungen wieder in den normalen Dateimodus versetzt. Leider hat dies die lange Ladezeit überhaupt nicht behoben! Meine derzeitige beste Vermutung ist, dass etwas dazu führt, dass Schätzungsversandmethoden warten, bevor sie aufgerufen werden, was zu einer Blockierung der Seite führt. Zusätzlich habe ich versucht, alle JS ohne jegliche Änderung aufzuschieben.
Edit2: Wie @ peter-ocallaghan feststellt, ist das Problem mit dem so langsamen Laden der Kasse (+10 Sekunden) eigentlich nur ein chromspezifisches Problem beim Öffnen der Dev-Konsole. Kasse / Warenkorb scheint nicht betroffen zu sein.
Antworten:
Es scheint, dass mein Hauptproblem darin besteht, dass aus irgendeinem Grund gleichzeitig eine Sitzung stattfindet. Ich habe versucht, das Sitzungs-Caching mit Redis wie in der Dokumentation vorgeschlagen zu verwenden.
Aber da ich das Problem mit der Sitzungssperre habe, denke ich, dass dies berücksichtigt wird:
Das heißt, es gibt immer eine Verzögerung von max. 5 Sekunden. Als ich zu einer zwischengespeicherten Sitzung wechselte, wurde es etwas besser, weil die Wartezeit geringer war. Die Standardeinstellungen sind:
Dies sind die Standardeinstellungen einer älteren PHP-Memcached-Version. Die neueste Version schlägt diese Standardeinstellungen vor:
Nach dem Lesen dieser beiden: https://github.com/php-memcached-dev/php-memcached/pull/350 https://github.com/php-memcached-dev/php-memcached/issues/269
Ich habe versucht mit:
in Magentos index.php und dies beschleunigt den Prozess erneut. Ich bekomme jetzt eine Ladung der Kasse in ungefähr 4 Sekunden. Der Wagen ist mit ~ 5 Sekunden etwas langsamer, da die Gesamtinformationen geladen werden. (Alle versuchen zuerst kein Browser-Caching)
Ich nehme an, das Beheben des Problems mit der Sitzungssperre würde die Ladezeiten erneut beschleunigen, da ein Blick auf die Profile zeigt, dass
session_start()
für mehrere Anrufe immer noch 300 bis 800 ms gewartet wird .quelle
Mögliche Optimierungen:
Profiler
quelle
Mit Solar, Memcache oder Varnish können Sie Ihre Magento-Site beschleunigen.
quelle