Hallo zusammen,
bei einer Bestellung lädt es - gefühlt ewig - circa 10 Sekunden, bis man auf die „Vielen Dank für Ihre Bestellung“-Seite weitergeleitet wird.
Ich denke, die Wartezeit kommt daher, dass im Hintergrund die Rechnungs-PDF erstellt und dann per Mail versendet wird. Und erst, wenn das abgeschlossen ist, die Weiterleitung erfolgt.
Gibt es Möglichkeiten das im Hintergrund auszuführen, dass der Kunde nicht 10 Sekunden warten muss, bis er auf die Bestätigungs-Seite kommt? Also irgendwie asynchronen-Versand und asynchrone-Erstellung der PDF?
Danke vorab
Ziemlich eindeutiges Zeichen, dass der Server für Shopware nicht ausreichend ist. Zugleich auch ein Warnzeichen, weil das auch in anderen Situationen auftreten kann.
Du könntest die Generierung auf einen anderen Status setzen, bspw. Sendung versandt.
Anderenfalls benötigst du eine Delay Funktion für die PDF Generierung. Das geht nur per Plugin.
Grundsätzlich solltest du prüfen, ob der Shop auch an anderen Stellen langsam ist und das optimieren. Für eine Prüfung kannst du z.B. auch das Frosh-Plugin „Tools“ nutzen. Zusätzlich kann man den Mailversand auf asynchron umstellen, sofern das tatsächlich die Ursache ist. Message Queue | Shopware Documentation
Wie kann man über das Frosh Tools Plugin prüfen, ob der Shop langsam ist? Die Möglichkeit wäre mir noch nie aufgefallen.
Der E-Mail-Versand kann je nach fehlgeschlagenen SMTP-Anmeldungen den Prozess verzögern, in dem Fall ist es aber nahezu sicher die PDF-Generierung, die viel CPU benötigt.
per btop geschaut.
Arbeitsspeicher: 60% frei.
CPU: Kurzzeitig ist einer von 4 Kernen komplett auf 100% während die anderen nichts tun.
Lässt sich das auf alle 4 Kerne verteilen?
Ansonsten ist der Shop ausreichend schnell. Lädt alles flüssig und hinreichend schnell, (0,3-0,8 Sekunden?)
PHP ist single-threaded. Nur parallele Requests werden auf mehrere Cores verteilt. Mein Verständnis, muss nicht korrekt sein.
Wenn du Docker nutzt, hast du die CPU ggf. zu stark eingeschränkt.
Wie ich bereits geschrieben habe, dann ist dein Core für Shopware bzw. für den Task vermutlich zu schwach. Als Vergleich: mein 5 Euro mtl. VPS („neueste“ Hardware-Generation beim Hoster) hat bei der PDF-Erstellung keine subjektiv spürbaren Verzögerungen. Aber Managed Tarif sind immer x Mal teuer als VPS.
Verknüpf die PDF Generierung mit einem anderen Status, dann kannst du das Problem auf einen nicht so kritischen Moment verlagern.
Ich habe es nun wie folgt probiert:
- Flow: Auslöser: Bestellung erhalten | Aktion: Bestellbestätigungsmail an den Kunden schicken + Status der Bestellung auf „in Bearbeitung“ setzen
- Flow: Auslöser: Status erreicht „In Bearbeitung“ | Aktion: Rechnung erzeugen + Rechnung an den Kunden versenden.
Wenn ich den 2. Flow deaktiviert lasse. geht es blitzschnell, sobald ich den zweiten Flow aktiviere, dauert es wieder sehr lange. Ein manuelles verändern des Status, um den 2. Flow auszulösen kommt nicht in Frage (Vorkasse).
Was ich nicht verstehe ist, dass nachdem Flow1 ja abgelaufen ist, müsste doch sofort die „Vielen Dank für Ihre Bestellung“-Seite kommen. Aber scheinbar laufen erst alle Flows durch und alle auf dem selben Prozessorkern…
Alle „passenden“ Flows werden ausgeführt. Wenn du eingestellt hast, dass der Status „In Bearbeitung“ sofort gesetzt wird, dann wird diese eben auch mit ausgeführt.
Ich habe das bei einigen Kunden mit dem „Bestellung versandt“ Flow verknüpft.
Rechtlich wahrscheinlich auch deutlich sinnvoller, weil mit der Rechnung machst du aus der Bestellaufgabe vermutlich eine indirekte Auftragsbestätigung, aus der du rechtlich nicht mehr so einfach rauskommst.