Speicherpfad + Name von shopware.yaml + Cache mit Artikel im Warenkorb

Hallo zusammen, ich habe ein paar Fragen und hoffe, jemand kann mir helfen.

Frage 1 - Muss die Datei shopware.yaml oder z-shopware.yaml heißen?
Früher musste man für Änderungen die z-shopware.yaml anlegen, heute heißt es (z.B. hier Link 1)

Zitat:
*"Bei allen neuen Shopware-Projekten findet sich in der Installation unter config/packages/ nur noch eine lock.yaml Datei. Dies kann auch der Fall sein, wenn du ein Update durchgeführt hast und die .yaml Dateien unter config/packages/ im Standard waren. Sollte dies bei dir der Fall sein, musst du eine neue shopware.yaml Datei erstellen und hier die Anpassungen einfügen!"

Aha. Also mache ich Änderungen nun wie früher in der z-shopware.yaml oder nun doch in einer neu angelegten shopware.yaml?

Frage 2 - Welcher Speicherpfad ist der richtige?
Kommt die Datei nun in de Pfad /config/packages oder nach /config/packages/prod?

Grund der Frage ist dieser Beitrag: Link 2

Hier wird folgender Code gezeigt:

# config/packages/prod/shopware.yaml
shopware:
    cache:
        invalidation:
            http_cache: []

Kommt also die shopware.yaml (oder doch die z-shopware.yaml?) nun also nur nach config/packages/prod/ (wie in der #-Zeile) oder doch nach config/packages/ - so wie in „Link 1“ oben?

Frage 3 - Shopware-Cache für eingeloggte Kunden oder Kunden mit Artikel im Warenkorb.

Wie ich unter „Link 2“ gelesen habe (Zitat: „By default, Shopware can no longer deliver complete pages from a cache for a logged-in customer or if products are in the shopping cart.“), werden keine Produkte aus dem Cache geladen, wenn ein Kunde einen Artikel in den Warenkorb legt oder eingeloggt ist.

Ich habs bei mir getestet, tatsächlich erhöht sich die Ladezeit der Seiten, sobald ich
nur einen Artikel im Warenkorb habe. Entferne ich den Artikel aus dem Warenkorb geht alles wieder blitzschnell. Selbiges, wenn ich mich mit meinem Testkunden-Account einlogge.

Ich habe daraufhin, gemäß der Anleitung unter „Link 2“, eine shopware.yaml erstellt.

Diese hat folgenden Inhalt:

shopware:
    auto_update:
        # Disables the auto updater in the UI
        # enabled: false
    admin_worker:
        # The Admin worker should be disabled on production server.
        # enable_admin_worker: false
    cache:
        invalidation:
            http_cache: []

Problem - es bringt nichts! Sobald ein Artikel im Warenkorb liegt, lädt er die Seite wieder langsamer. Artikel raus aus dem Warenkorb und alles ist wieder blitzschnell.

Habe ich da was falsch gemacht an der Datei? Muss ich noch etwas anderes ändern/ergänzen?

Ich möchte, dass auch bei eingeloggten Kunden - oder Kunden mit Artikeln im Warenkorb, immer die gecachte Version der Seite geladen ist, wenn eine gecachte Version der Seite vorhanden ist.

z-xxx

Die Standard xxx.yaml werden beim nächsten Update überschreiben. Daher kannst du mit deinen z-xxx.yaml die Standard yaml überschreiben. Da reichen die Einträge, die du überschreiben möchtest, benötigst nicht alle.

config/packages

Du kannst es auch weiter in prod, dev, test, etc. unterteilen. prod zählt nur bei ENV=prod, test nur im ENV=test, dev im ENV=dev, …

Wenn du den Cache deaktivierst, dann werden keine spezifischen preise, etc. alles was nicht Standard ist nicht mehr berücksichtigt. Falls das bei dir kein Problem ist, dann kannst du es natürlich so machen.

Hattest du den Cache geleert nach der Änderung?

Wenn dein Server beim eingeloggten Kunden spürbar langsamer wird, dann ist dein Server vermutlich unterdimensioniert.

So wie ich es verstanden habe, wird vollständiges Cachen bei Artikeln im Warenkorb zu unerwünschten Nebeneffekten führen, da die Anzeige des (kleinen) Warenkorbs mit gecached wird und dann irgendwas von irgendeinem anderen Kunden angezeigt wird. Deswegen wird das unterbunden. Man müsste diese Inhalte dann dynamisch nachladen (steht meine ich auch irgendwo in der Doku), ich weiß nicht, ob es da ein Plugin gibt oder das eine der Plan-Versionen kann?

Ich danke euch für euere Antworten!

Dann lege ich nur eine z-shopware.yaml an und kopiere diese in config/packages. Es hat mich halt irritiert, da in dem einen Link explizit die Rede ist, man solle eine shopware.yaml anlegen, wenn diese nicht vorhanden ist.

Cache geleert hatte ich nach Anlegen der z-shopware.yaml.

Kundenspezifische Preise benötige ich nicht. Das Laden ist nicht direkt „extrem“ langsamer, ich merke halt einen Unterschied zwischen kein Artikel im Warenkorb und Artikel im Warenkorb.

Mir fällt aber auf, das folgendes passiert: Ist ein Artikel im Warenkorb, ich gehe auf den nächsten, dann wieder auf die Kategorie und auf den Artikel der z.B. schon im Warenkorb liegt, geht diese Seite auch wieder viel schneller. Ich habe den Verdacht, dass der Code schon funktioniert, aber er einen neuen Cache anlegt, der gilt, nachdem ein Artikel im Warenkorb liegt.

Seltsam ist halt – alles sehr schnell, wenn kein Artikel im Warenkorb liegt. Kommt ein Artikel in den Warenkorb geht’s einen ticken langsamer. Nehme ich den Artikel wieder aus dem Warenkorb raus, sodass nichts im Warenkorb liegt, geht alles wieder sehr schnell ohne merkbare Ladezeit. Läge es am Server, müsste das dann nicht unabhängig davon sein, ob ein Artikel im Warenkorb liegt oder nicht? Auch der Browser-Cache sollte darauf eigentlich keinen Einfluss haben bzw. dabei keinen Unterschied machen?

Meine Syntax ist aber schon korrekt? Ich habe gelesen, yaml wäre empfindlich auf Einrückungen?

Deine Erklärung @Anotherone klingt plausibel. Vielleicht verstehe ich den Text aus den docs falsch, übersetzt steht da ja „Sofern das Projekt diese Funktionalität nicht benötigt, können Seiten auch vom HTTP-Cache/Reverse-Proxy zwischengespeichert werden.“ – Klingt fast so, als würde der Cache dann trotzdem neu für jede Seite generiert, sobald ein Artikel im Warenkorb liegt? Ich dachte, damit lässt man Shopware immer die gecachte Produkteseite aufrufen?

Ja, es ist nicht ganz eindeutig, ich versteh es so, wenn man es nicht braucht, das Kundenspezifische Details nicht gecached werden, dann kann man das abschalten. Also wenn man ein Theme hat, das keinen (kleinen) Warenkorb mit Menge/Gesamtpreis anzeigt und keine Unterschiede nach Kundengruppe o.ä. vorhanden sind, dann kann man das Cache invalidieren abschalten.

Man kann diesen theoretisch/praktisch auch per XHR nachladen, was zum Teil auch Shopware selbst macht. Dann kann die Seite aus dem Cache kommen und das Variable aus dem XHR Request.

Ja genau, das ist das, was ich oben meinte. Die CE kann das aber nicht bzw. nur, wenn man was in den Korb legt, oder?

Der Warenkorb, in rechten Side-Menü wird per XHR nachgeladen, wenn man bspw. den Bestand ändert. Das ist im Prinzip das Verhalten, was ich meinte. Auch oben wird der Wert schon automatisch per XHR abgefragt, wenn ich mich nicht irre. Sprich, die CE sollt eigentlich alles haben, um den Cache auch hierfür zu aktivieren.

Ich habe es selbst noch nie getestet.

Einen Unterschied nach Kundengruppe gibt es bei meinen Preisen nicht. Ich verwende ein abgeleitetes Standard-Theme mit eigenen Farben, am Warenkorb wurde nichts verändert.

Wie ist es denn bei euren Shops? Habt ihr mal ein paar Produkte angeklickt, dann eines in den Warenkorb gelegt und die selben Produkte (oder auch andere) dann wieder angeklickt? Und dann zum Vergleich den Artikel aus dem Warenkorb wieder entfernen (damit der Warenkorb leer ist) und nochmal getestet?