Modul 6 · 6.4
Deutsch
Geschwindigkeit und Caching bei einem Shop
Modul 6: Verwaltung und Sicherheit · Lesezeit: 10 Minuten
Lernziel: Nach dieser Lektion können Sie das Caching für einen WooCommerce-Shop so einrichten, dass der Shop schnell ist und persönliche Seiten nie in den Cache gelangen, und Sie können das anhand der Header prüfen.
Kernbegriffe: Seiten-Cache, Ausschlüsse (Warenkorb, Kasse, Ihr Konto), Cookies, die den Cache umgehen, No-Cache-Header, DONOTCACHEPAGE, Objekt-Cache, Redis, Warenkorb-Fragmente, Geolokalisierung mit Seiten-Cache, geplante Aktionen aufräumen
Zwei Arten von Seiten
Die Grundlagen des Cachings (Seiten-Cache, Browser-Cache, Objekt-Cache, OPcache, ein CDN) finden Sie im WordPress-Kurs, Lektion 6.2. Dort steht auch schon die wichtigste Regel für Shops: Persönliche Seiten dürfen nicht in den Seiten-Cache. Diese Lektion vertieft das.
Ein Shop hat zwei Arten von Seiten:
| Art | Beispiele | Cache |
|---|---|---|
| Für alle gleich | Startseite, Shopseite, Kategorien, Produktseiten, Informationsseiten | Seiten-Cache: ja, hier liegt der größte Gewinn |
| Für jeden Besucher anders | Warenkorb, Kasse, Ihr Konto, die Widerrufsseite mit einem angemeldeten Kunden | Seiten-Cache: nie |
Geht etwas schief, sehen Sie es sofort: Ein Kunde sieht den Warenkorb eines anderen oder, schlimmer noch, die Adresse einer anderen Person auf der Kassenseite. Das ist auch eine Datenpanne im Sinne der DSGVO (KB 6749).
Was WooCommerce selbst schon tut
WooCommerce unterstützt einen Cache auf drei Arten. Es ist gut, sie zu kennen, damit Sie bemerken, wenn etwas sie aushebelt:
- Konstanten. Auf Warenkorb, Kasse und Ihr Konto setzt WooCommerce
DONOTCACHEPAGE(und ebenso Konstanten für Objekt- und Datenbank-Cache). Viele Cache-Plugins lesen diese Konstante und überspringen die Seite dann. - Header. Auf denselben Seiten sendet WooCommerce die No-Cache-Header von WordPress mit:
Cache-Control: no-cache, must-revalidate, max-age=0, privateund einExpiresin der Vergangenheit. Ein Proxy oder CDN, das sich an die Regeln hält, speichert die Seite dann nicht. Für angemeldete Benutzer kommtno-storehinzu. - Cookies. Sobald jemand etwas in den Warenkorb legt, setzt WooCommerce Cookies wie
woocommerce_items_in_cart,woocommerce_cart_hashundwp_woocommerce_session_.... Gute Caches liefern Besuchern mit einem solchen Cookie keine gespeicherte Seite mehr aus, auch nicht bei Produktseiten, weil zum Beispiel der Warenkorb im Kopfbereich dann für jeden Besucher anders ist.
Die Dokumentation von WooCommerce nennt für Cache-Plugins: Schließen Sie Warenkorb, Ihr Konto und Kasse aus, außerdem die Cookies woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed und store_notice[...]. Für Varnish nennt sie zusätzlich Regeln für Adressen mit ?add-to-cart=.
Wo es in der Praxis schiefgeht
- Andere Adressen für die Shopseiten. Sie haben den Warenkorb in
/einkaufskorb/umbenannt oder ein Übersetzungs-Plugin erzeugt/de/warenkorb/. Ein Cache, der feste Adressen wie/cartausschließt, erfasst diese nicht. Cache-Plugins, die WooCommerce kennen, lesen die Seiten aus den Einstellungen; ein Cache auf dem Server oder bei einem CDN tut das nicht. - Ein CDN, das alles cacht. Manche CDN-Regeln („cache everything“) ignorieren die Header. Schließen Sie dann die Shopseiten und die genannten Cookies ausdrücklich aus.
- Ein Plugin, das die Header überschreibt. Ein Sicherheits- oder Performance-Plugin setzt manchmal auf jeder Seite
Cache-Control: public, max-age=.... Dann sind die No-Cache-Header verschwunden. - Eine Sitzung für jeden Besucher. Normalerweise setzt WooCommerce erst dann ein Sitzungscookie, wenn etwas im Warenkorb liegt. Startet ein Plugin oder Theme schon für jeden Besucher eine Sitzung (ein Cookie
wp_woocommerce_session_oderPHPSESSIDbeim ersten Besuch), entfällt der Seiten-Cache für alle, und Ihr Shop wird bei hohem Andrang langsam. - Geolokalisierung. Unter WooCommerce > Einstellungen > Allgemein wählen Sie den Standard-Standort eines Kunden. Mit der einfachen „Geolokalisierung“ ermittelt der Server für jeden Besucher das Land, und bei Preisen pro Land passt das nicht zu einem Seiten-Cache. WooCommerce bietet deshalb die Option „Geolokalisierung (mit Unterstützung für Seiten-Caching)“, die das Land über eine zusätzliche Abfrage im Browser bestimmt. Brauchen Sie vor der Kasse keine Preise oder Umsatzsteuer pro Land, wählen Sie das Land des Shops: Das ist am einfachsten. Für die Geolokalisierung lädt WooCommerce regelmäßig eine Datenbank von MaxMind herunter.
Auf einem LiteSpeed-Server (wie bei WebOké) regelt das Plugin LiteSpeed Cache die Ausschlüsse für WooCommerce selbst; prüfen Sie sie in den Einstellungen für Ausschlüsse. Bei anderen Webservern und Hostern funktioniert es mit einem anderen Cache-Plugin ähnlich.
Was der Seiten-Cache nicht löst
Warenkorb und Kasse werden immer von PHP und der Datenbank aufgebaut. Bei hohem Andrang (eine Aktion, ein Newsletter) sind das genau die Seiten, auf denen Ihre Kunden Geld ausgeben. Dort helfen andere Dinge:
- Ein Objekt-Cache wie Redis speichert die Ergebnisse von Datenbankabfragen im Arbeitsspeicher. Bei einem Shop mit vielen Seiten, die nicht in den Seiten-Cache dürfen, bringt das spürbar mehr als bei einer gewöhnlichen Website. Ihr Hosting muss Redis anbieten (bei WebOké ist das möglich, DA 15.7); danach aktivieren Sie es mit einem Plugin.
- Warenkorb-Fragmente. Klassische Themes aktualisieren den Warenkorb im Kopfbereich mit einem Skript (
wc-cart-fragments), das bei einem gefüllten Warenkorb eine zusätzliche Abfrage auslöst. Moderne Block-Themes mit dem Mini-Warenkorb-Block brauchen das weniger. Laden Sie solche Skripte nicht auf Seiten, auf denen sie nichts tun. - Aufgeräumte geplante Aktionen. WooCommerce nutzt den Action Scheduler für Hintergrundaufgaben (Lektion 7.3). Abgeschlossene Aktionen werden standardmäßig nach einem Monat aufgeräumt. Wächst die Liste trotzdem auf Hunderttausende an, oft durch eine Erweiterung, die immer weiter etwas plant, oder durch fehlgeschlagene Aktionen, werden Datenbankabfragen langsamer. Prüfen Sie unter WooCommerce > Status > Geplante Aktionen die Anzahl der fehlgeschlagenen und ausstehenden Aktionen.
- HPOS. Bestellungen in eigenen Tabellen (Lektion 1.2) machen die Suche in Bestellungen schneller als in der alten Beitragstabelle. Bestehende Shops müssen selbst umstellen (Lektion 6.2 zu Backups vorab).
- Eine aktuelle PHP-Version und genügend Arbeitsspeicher (Lektion 7.2).
In der Praxis: So sieht es in WooCommerce aus
Prüfen Sie es bei Theehuis Example in einem privaten Fenster mit den Entwicklerwerkzeugen Ihres Browsers (F12, Registerkarte Netzwerk, erste Anfrage):
- Startseite zweimal laden: Beim zweiten Mal erscheint ein Header wie
x-litespeed-cache: hitodercf-cache-status: HIT. Kein Cookiewp_woocommerce_session_beim ersten Besuch. shop.example.com/winkelwagen/zweimal laden: kein Hit, undcache-controlmitno-cacheoderprivate.- Dasselbe für die Kasse und Ihr Konto.
- Legen Sie ein Produkt in den Warenkorb und laden Sie eine Produktseite: Sie sehen Ihren eigenen Warenkorb, keine gespeicherte Version.
Zusammenfassung
- Seiten, die für alle gleich sind, in den Cache; Warenkorb, Kasse und Ihr Konto nie.
- WooCommerce setzt selbst DONOTCACHEPAGE, No-Cache-Header und Cookies; prüfen Sie, dass nichts diese entfernt oder ignoriert.
- Achten Sie auf umbenannte Adressen, CDN-Regeln, Plugins, die Header überschreiben, Sitzungen für jeden Besucher und Geolokalisierung.
- Redis, aufgeräumte geplante Aktionen, HPOS und eine gute PHP-Version helfen dort, wo der Seiten-Cache nicht greifen darf.
- Testen Sie durch zweimaliges Laden in einem privaten Fenster und lesen Sie die Header.
Quiz
Aufgabe
Aufgabe A6.4: Bleiben Warenkorb und Kasse aus dem Cache? Geben Sie die Adresse Ihres Shops ein sowie die Adressen Ihrer Warenkorb- und Kassenseite (und gegebenenfalls von Ihr Konto). Das Programm ruft die Startseite zweimal im Abstand von 2 Sekunden ohne Cookies ab und danach jede Shopseite ebenfalls zweimal. Es wird nichts in den Warenkorb gelegt und nichts bestellt. Grün, wenn die Startseite beim zweiten Mal aus dem Cache kommt (oder deutlich schneller ist), ohne ein Sitzungscookie zu setzen, und wenn jede Shopseite beim zweiten Mal keinen Cache-Treffer hat und einen Cache-Control mit no-cache, no-store, private oder max-age=0 sendet. Orange, wenn die Startseite keinen Cache nutzt oder eine Shopseite zwar keinen Treffer, aber auch keinen No-Cache-Header hat. Rot bei einem Cache-Treffer auf Warenkorb, Kasse oder Ihr Konto oder wenn die Startseite für jeden Besucher eine WooCommerce-Sitzung startet.
Ein grünes Häkchen bedeutet, dass diese Prüfung jetzt stimmt, nicht, dass Ihr Shop sicher ist.
Weiterführende Informationen
Schritte in einem Panel gelten für WebOké; bei anderen Anbietern funktioniert es ähnlich.
- Kostenloser WordPress-Kurs 6.2: Caching
- Kostenloser WordPress-Kurs 6.3: Bilder, PHP und weitere Geschwindigkeitsgewinne
- DirectAdmin Anleitung 15.7: Redis
- Meine Website ist langsam oder nutzt zu viel CPU: So machen Sie sie schneller
- Handelt es sich hierbei um eine Datenpanne und muss ich diese melden?
- Configuring caching plugins (developer.woocommerce.com, Englisch): https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins/
