Cache Zeitraum der Kategorieseiten ändern?

Hallo Zusammen,

nachdem ich nun schon seit mehreren Tagen mit einem Cache Problem bei unserem Shopware 6 Shop kämpfe, hoffe ich hier entsprechende Hilfe zu finden :). Mittlerweile konnte ich das Problem immerhin schon ganz gut eingrenzen.

Unser Shop hat über 1000 Artikel mit jeweils ca. 100 Varianten. Dadurch gibt es z.T. beim Aufruf einer Kategorieseite sehr hohe Ladezeiten von > 5 Sekunden. Je mehr Artikel in der Kategorie gelistet sind, desto länger dauert es bis die Seite geladen wird. Wenn allerdings die Kategorie einmal geladen wurde, lässt sich die gleiche Kategorie beim zweiten mal innerhalb von < 300ms laden. Das funktioniert dann auch auf jedem anderen Rechner / Browser innerhalb dieser kurzen Zeit. Es hat also nichts mit dem lokalen Browser-Cache zu tun. Daher gehe ich davon aus, dass das Problem gelöst ist, solange die Kategorieseite im Shopware-Cache vorhanden ist.

Daher habe ich in der .env den SHOPWARE_HTTP_DEFAULT_TTL auf 86000 gesetzt, mit dem Ziel, dass die Kategorieseiten für einen Tag im Cache bleiben. Dann könnte ich nachts die Kategorieseiten “aufwärmen” und diese wären dann immer für 24h im Cache. Leider hat die SHOPWARE_HTTP_DEFAULT_TTL allerdings scheinbar keinen Einfluss auf das Listing in den Kategorieseiten. Mittlerweile konnte ich feststellen, dass die Kategorien nach genau 3600s aus dem Cache verschwinden, bzw. die Ladezeit genau nach 3600s wieder entsprechend lange ist.

Ein Auszug aus der Netzwerkanayse bei Aufruf einer Kategorieseite ergibt folgendes:

access-control-allow-headers: Content-Type,Authorization,sw-context-token,sw-access-key,sw-language-id,sw-version-id,sw-inheritance,fail-on-error,indexing-behavior,single-operation,sw-include-seo-urls

access-control-allow-methods: GET,POST,PUT,PATCH,DELETE

access-control-allow-origin: *

age: 480

cache-control: must-revalidate, public, s-maxage=86000

content-encoding: gzip

Sobald age = 3600 erreicht ist, zieht er die Seite nicht mehr aus dem Cache, obwohl s-maxage=86000 ja korrekt erkannt wurde.

Nun zu meiner Frage :). Gibt es eine Möglichkeit die Cache Time für das Produkt Listing auf den Kategorieseiten zu erhöhen? Hier scheint ja irgendwo ein Standardwert von 3600s hinterlegt zu sein. Ich kann aber leider nirgends finden, wo man diesen Wert heraufsetzen könnte. Kann hier bitte jemand helfen?

Vielen Dank vorab und viele Grüße

Hallo,

irgendwie scheint die Änderung von SHOPWARE_HTTP_DEFAULT_TTL überhaupt keine Auswirkung zu haben,

auch bei den Produktseiten.

Welchen Wert muß man denn ändern, damit der Cache länger gültig ist?

Habe alles ausprobiert bin/console cache:clear, dann den Cache neu augewärmt etc…hilft alles nichts.

Gruß,

Werner.

Hallo,

Hatte das auch schon auf Slack gefragt, aber keine Antwort bekommen.

Weiß das keiner oder machen wir was falsch?

Gruß,

Werner.

Hallo,

wir haben das Problem zwar nicht direkt lösen können, aber immerhin konnte die Situation nun erheblich verbessert werden, sodass der Shop wieder normal nutzbar ist. Bei uns waren die Produktvorschaubilder das Hauptproblem für die langen Ladezeiten. Daher cachen wir nun die Bilder folgendermaßen über die .htaccess:

ExpiresActive on
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/jpg "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/png "access plus 1 week"


;
;
Header set Cache-Control "max-age=60500, public"
;

Einmal pro Woche werden dann nachts die Kategorieseiten aufgewärmt, sodass sich dann alle Vorschaubilder für eine Woche im Cache befinden.

So konnten wir die Ladezeiten der Kategorieseiten von teilweise 10 Sekunden auf unter 1-2 Sekunden Ladezeit (je nach Artikelanzahl in den Kategorien) verringern.

Ich denke mal, dass ein Caching der Kategorie- und Produktseiten vielleicht seitens Shopware gar nicht gewollt ist, da hierdurch dann auch noch “alte” Preise bei Preisaktualisierungen angezeigt werden?! Welche Funktion dann SHOPWARE_HTTP_DEFAULT_TTL genau hat, weiß ich leider auch nicht…

Hallo,

mod_expires mit den von Dir genutzten werden bringt allerdings nur etwas für wiederkehrende Besucher, da so die Speicherung Deiner Grafiken im Browser-Cache gespeichert werden. Prüfe ggfs. auch nochmal die Ladezeiten nach Leeren des Browser-Caches.

Viele Grüße

Nachdem ich mich nun nochmal am Wochenende hiermit beschäftigt habe, konnte ich das Problem nun bei uns nachvollziehen. Es war eine Kombination aus mehreren Themen. Das Hauptproblem war jedoch folgendes:
Bei uns läuft im Hintergrund ein System, das über die API beispielsweise den Lagerbestand der Artikel oder auch Preise automatisch anpasst. Sobald eine Anpassung an irgendeinem Artikel erfolgt, und sei es nur die Änderung des Lagerbestands, wird keine Seite mehr aus dem Cache geladen. D.h. sobald eine Änderung an einem Artikel vorgenommen wurde, verlängert sich die Seitenladezeit beim ersten Aufruf danach erheblich. Das finde ich etwas ungeschickt gelöst. Vielleicht kann man das ja in eine der nächsten Versionen optimieren? Ansonsten funktioniert das Caching der Kategorieseiten nämlich grundsätzlich mit dem eingestellten Wert in SHOPWARE_HTTP_DEFAULT_TTL. Wir haben es jetzt so gelöst, dass diese Routinen zum Lagerbestandsabgleich nur noch nachts ausgeführt werden und nachdem dies abgeschlossen ist, der Cache neu aufgewärmt wird. Das scheint bis jetzt zumindest zu funktionieren. Bzw. ist es auch nicht ganz so tragisch, wenn dann der erste Besucher den Cache aufwärmt, solange das nicht alle paar Minuten erfolgen muss :)…

Bei uns ist die Ladezeit einer Kategorieseite mit ca. 300 Artikeln (mit je ca. 100 Varianten) nun folgendermaßen:

  • unaufgewärmter Shop-Cache: ca. 11 Sek.
  • erster Seitenbesuch (leerer Browser-Cache) mit aufgewärmtem Shop-Cache: ca. 1,0 Sek.
  • folgende Seitenbesuche (Bilder im Browser-Cache) mit aufgewärmtem Shop-Cache: 0,3 - 0,6 Sek.

Solange der Shop-Cache aufgewärmt ist, sind unsere Ladezeiten nun also durchaus akzeptabel.