Inhaltsverzeichnis
Caching ist der Hauptfaktor, mit das Modul Ihren Gambio-Shop beschleunigt. Über die manuelle Generierung des Caches via Button-Klick im Admin-Menü hinaus stehen zwei CronJob-Varianten zur Verfügung. Dieses Tutorial unterstützt Sie bei der Einrichtung des geeigneten CronJobs, erläutert mögliche Parameter und gibt Tipps für die Praxis.
Cache manuell generieren
Wenn Sie die kostenlose Testversion des Moduls zur Ladezeitoptimierung nutzen oder das Modul gerade erst installiert haben, ist ein unkomplizierter Vorher-Nachher-Vergleich bestimmt der interessanteste Aspekt. Bevor Sie den CronJob einrichten, sollten Sie sich von der rapide gesunkenen Ladezeit und dem gestiegenen PageSpeed-Score überzeugen.
Ein einfacher Klick auf den Button Cache jetzt generieren tut genau das, was der Button-Titel verspricht. Je nach Anzahl zu speichernder Seiten kann der Vorgang einige Minuten dauern. Mit Hilfe der Fortschrittsanzeige können Sie den Verlauf des Cachings live verfolgen.
Sofern Sie es nicht schon vor Generierung des Caches getan haben, klicken Sie bitte im Anschluss den Button namens In .htaccess-Datei schreiben in der Zeile RewriteRules. Während der eine Button-Klick die Erstellung des Caches bewirkt, sorgt der andere dafür, dass die Dateien aus dem Cache geladen werden.
Angemeldeten Nutzern werden maximal die Optimierungen, jedoch nicht die Dateien aus dem Cache zuteil. Daher müssen Sie zum Testen entweder einen anderen Browser verwenden oder ein neues Fenster im privaten Modus öffnen. Wenn Sie nicht vor Installation des Moduls schon umfangreiche Schritte zur Ladezeitoptimierung unternommen haben, ist der Performancegewinn nicht nur messbar. Sie können ihn beim Surfen durch Ihren Shop direkt „spüren“.
CronJob (CLI)
Dies ist der empfohlene Weg, den Cache im dauerhaften Betrieb des Optimierungs-Moduls auf dem aktuellen Stand zu halten. Sofern Sie die Möglichkeit haben, sollten Sie auf jeden Fall einen CronJob anlegen, der einen Befehl bzw. ein PHP-Script ausführt. Das Modul schlägt Ihnen hierfür einen Befehl vor, der ähnlich diesem aussieht:
php /var/www/vhosts/meinshop.de/httpdocs/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 912ec803b2ce49e4a541068d495ab570
Plesk (z.B. Estugo)
Betrachten wir das Anlegen des CronJobs am konkreten Beispiel Plesk. In der im deutschen Sprachraum gegenüber cPanel weitaus populäreren Server-Verwaltungssoftware heißen CronJobs Geplante Aufgaben.
Auf dem Screenshot sehen Sie, wie das Anlegen eines solchen CronJobs in Plesk aussieht. Da Sie in Plesk PHP-Skript ausführen eigens auswählen können, erübrigt sich die Angabe des auszuführenden Programms. Das heißt, Sie kopieren nicht den im Admin-Menü angezeigten Befehl php /var/www/vhosts/...
in das Eingabefeld nach Skriptpfad, sondern eben nur den Pfad /var/www/vhosts/...
ohne php
.
Als Argument geben Sie mindestens die 32stellige Zeichenkette an, die Ihnen das Modul in der oben zitierten Zeile anzeigt. Diese dient der Authentifizierung und dem Schutz vor Aufrufen des Caching-Scripts durch andere Nutzer.
Beispiel cPanel
cPanel nennt CronJobs bei ihrem Namen, schreibt sie allerdings schön abwechselnd mit und ohne Bindestrich. So können Sie im Menüpunkt Cron-Jobs einen Neuen Cronjob hinzufügen.
Wie schon Plesk beitet auch cPanel verschiedene häufig verwendete Einstellungen zum Ausführungsintervall zur Auswahl, so dass die manuelle Eingabe im Crontab-Format nicht erforderlich sein sollte.
Den Pfad zur PHP-Binary können Sie einfach aus den von cPanel vorgegebenen Beispielen kopieren. Statt des im Admin-Menü angezeigten Befehls zur Ausführung via CronJob könnte der Befehl dann in etwa so aussehen:
/usr/local/bin/php /home/meinshop/domain_path/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 912ec803b2ce49e4a541068d495ab570
LiveConfig (u.a. publicompserver.de)
Im Verwaltungstool LiveConfig legen Sie neue CronJobs ganz unkompliziert unter Hosting > Cron-Jobs an. Klicken Sie dort auf den Button Neuer Cron-Job. Im Formular ist der im Gambio-Adminmenü angezeigte PHP-Befehl 1:1 hineinzukopieren. Den auszuwählenden Vertrag wissen Sie selbst am besten.
Zu beachten gilt, dass der CronJob den Befehl unter Umständen mit einer anderen PHP-Version ausführt als der Webserver für Ihren Shop einsetzt. Das kann zu Kompatibilitätsproblemen mit der Gambio-Version (z.B. PHP Parse error: syntax error, unexpected '?'
) oder verschlüsselten Modulen anderer Anbieter (Fatal error: ... was encoded by the ionCube Encoder for PHP x.x and cannot run under PHP x.x or later.
) führen. Um dieses Problem zu umgehen, ist nach folgendem Schema ein Ausweichen auf die HTTP-Variante nötig:
/usr/bin/wget -q -O - https://www.ihrshop.de/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php?cacheToken=2f82d5cbde1d5228da128ff680464f49
Mit cleanup. und force-Parameter sieht der Befehl dann so aus (bitte beachten Sie die Anführungszeichen):
/usr/bin/wget -q -O - "https://www.ihrshop.de/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php?cacheToken=2f82d5cbde1d5228da128ff680464f49&force=1&cleanup=1"
Beispiel Strato
Mit dem Caching gehören Gambio-Ladezeiten bei Strato von einer Minute und mehr oder Serverfehler 500 größtenteils der Vergangenheit an. Beachten Sie aber, dass dies nur für Seiten gilt, die im Cache liegen. Der Checkout beispielsweise wird mit Einsatz des Moduls nicht schneller.
Bei den Webhosting-Paketen von Strato sind CronJobs im Kundenmenü einzurichten. Die Option zum Anlegen des CronJobs finden Sie nach Auswahl des Paketes unter Datenbanken und Webspace > Cron-Jobs.
Davon ausgehend, dass Ihr Shop im Hauptverzeichnis der Domain installiert ist, sieht der unter Kommandozeile einzutragende Befehl etwa so aus:
/bin/php ./GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 912ec803b2ce49e4a541068d495ab570
Ihren individuellen Cache-Token, also die Zeichenkette 912ec803b2ce49e4a541068d495ab570 im Beispiel, entnehmen Sie dem Admin-Menüpunkt Ladezeitoptimierung.
Hetzner (konsoleH)
In Hetzners konsoleH finden Sie die CronJob-Verwaltung unter Einstellungen > Konfiguration > Cronjob Manager. Als Interpreter wählen Sie die PHP-Version, unter der auch Ihr Shop bei der Ausführung durch den Webserver läuft. Wenn Ihnen diese gerade nicht geläufig ist, unterstützt Sie der Gambio-Admin-Menüpunkt Toolbox > Server Info dabei, die richtige Wahl zu treffen.
Durch die Auswahl des Interpreters ist die Angabe des Programms überflüssig. Das heißt, dass Sie aus dem Gambio-Adminmenü Skriptpfad und Argument (den 32-stelligen Code) ohne das vorangestellte php
kopieren und in der konsoleH als Skript (absoluter Pfad) einfügen.
Wie bei allen Tools zur CronJob-Verwaltung lautet auch bei Hetzner die Empfehlung, 2 CronJobs anzulegen. Für die „normale“ Cache-Aktualisierung wählen Sie ein geringes Ausführungsintervall, zum Beispiel Alle 2 Stunden. Ein nächtlicher CronJob aktualisiert den kompletten Cache und löscht nicht mehr benötigte Dateien. Bei Skriptpfad tragen Sie hierfür selbigen mit den beiden zusätzlichen Argumenten force und cleanup nach diesem Schema ein:
/usr/www/users/shop/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 6e492a9a7ee28cf8b7fc97a9a0f2da3b force cleanup
Keyweb (KeyHelp)
Optionen (Parameter & Argumente)
Aktualisierung erzwingen
Standardmäßig aktualisiert das Caching-Script nur Dateien, wenn diese gemäß lastmod
-Angabe (Änderungsdatum) in der Sitemap abgelaufen sind. Bekannte Gambio-Fehler, wonach z.B. ein abgelaufenes Sonderangebot nicht als Änderung des Artikels erkannt wird, korrigiert das Modul automatisch. So spart der normale CronJob-Aufruf Ressourcen, indem er nur geänderte Seiten aktualisiert.
Dennoch erkennt diese Vorgehensweise nicht alle relevanten Änderungen. Wenn Sie beispielsweise das allgemeine Layout Ihres Shops überarbeitet haben, hat dies keinerlei Auswirkung auf das Änderungsdatum gemäß Sitemap. Dabei wären in diesem Fall alle Seiten im Cache zu aktualisieren.
Daher akzeptiert das Caching-Script ein weiteres Argument. Geben Sie den Befehl wie nachfolgend an, um eine Aktualisierung aller Dateien im Cache zu erzwingen, unabhängig von ihrem Erstellungsdatum und dem Last-Modification-Date:
php /var/www/vhosts/meinshop.de/httpdocs/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 912ec803b2ce49e4a541068d495ab570 force
Gehen Sie mit dieser Option behutsam um und messen Sie die Auslastung von CPU und Arbeitsspeicher. Alle 5 Minuten einen Cache mit 200.000 Seiten vollständig neu aufzubauen ist bestimmt keine gute Idee. Ggf. genügt die tägliche Ausführung nachts oder Sie kommen ganz ohne den force-Parameter aus.
Alte Dateien löschen
Der force-Parameter erzwingt lediglich die Aktualisierung noch benötigter Dateien. Haben Sie jedoch beispielsweise Artikel gelöscht, genügt kein Update des Caches, sondern bedarf es einer Aufräumen-Funktion.
Dieses Aufräumen, das heißt das Löschen nicht mehr benötigter Dateien, übernimmt der cleanup
-Parameter. Diesen verwenden Sie ganz ähnlich dem force-Parameter und können die beiden auch kombinieren. Auf diese Weise bringen Sie den Cache beispielsweise einmal täglich in den frühen Morgenstunden auf den neuesten Stand:
php /var/www/vhosts/meinshop.de/httpdocs/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 912ec803b2ce49e4a541068d495ab570 force cleanup
Sprache & Limit
Insbesondere unter Verwendung des force- und cleanup-Arguments kann es passieren, dass das Caching-Script nicht bis zum Ende ausgeführt wird. Im Normalfall führt das zwar nicht zu gravierenden Problemen. Der Cache wird dann eben bei der nächsten Ausführung aktualisiert bzw. neu aufgebaut. Fehlermeldungen wie /bin/sh: line 1: 11218 Segmentation fault /opt/plesk/php/7.3/bin/php
oder auf deutsch /bin/sh: Zeile 1: 18881 Speicherzugriffsfehler /opt/plesk/php/7.3/bin/php
sind aber mindestens lästig.
Für das Problem gibt es nicht die eine finale Lösung. Vielmehr gilt es, durch Verringerung der Ausführzeit und des Speicherverbrauchs das Auftreten zu reduzieren. Bei mehrsprachigen Shops ist es dabei zunächst eine Option, den Cache nach Sprachen unterteilt generieren zu lassen. Gehen wir davon aus, dass in Ihrem Shop deutsch, englisch und französisch aktiviert sind und Sie den Cache zumindest tagsüber stündlich aktualisieren möchten. Der Skriptpfad lautet für alle 3 dafür benötigten CronJobs gleich, zum Beispiel:
httpdocs/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php
Auch das erste Argument ist für alle 3 Aufrufe gleich, zum Beispiel: 6e492a9a7ee28cf8b7fc97a9a0f2da3b
Als zweites Argument fügen Sie nun das jeweilige Sprachkürzel an und geben die um 20min (stündliche Aktualisierung bei 3 Sprachen) versetzte Ausführungszeit im Cron-Stil an:
- 6e492a9a7ee28cf8b7fc97a9a0f2da3b de
10 5-23 * * * - 6e492a9a7ee28cf8b7fc97a9a0f2da3b en
30 5-23 * * * - 6e492a9a7ee28cf8b7fc97a9a0f2da3b fr
50 5-23 * * *
Damit wird zwischen 5 und 23 Uhr immer um 10 nach der Cache für die deutschen Seiten aktualisiert, um halb der englische und um 10 vor der französische.
Seit Version 1.4.3 des Gambio-Moduls akzeptiert das Caching-Skript ein Limit als Argument. Obigem Beispiel folgend geben Sie einfach statt oder zusätzlich zu den Sprachkürzeln eine Zahl an. Um beispielsweise maximal 100 Seiten pro Aufruf zu aktualisieren, könnte der Skriptpfad und die Argumente so aussehen:
httpdocs/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 6e492a9a7ee28cf8b7fc97a9a0f2da3b force cleanup 100
Ausführungsintervall
Wie schon der force-Parameter im vorangegangenen Abschnitt, ist auch das Ausführungsintervall schlichtweg von der Häufigkeit von Änderungen in Ihrem Shop sowie den Einstellungen zur Änderungsfrequenz in der Sitemap abhängig.
Wenn Sie beispielsweise Artikel via Zufallsprinzip auf der Startseite einblenden und die Startseite zugleich die einzige Seite mit Änderungsfrequenz Immer ist, spricht nichts gegen eine minütliche Ausführung des CronJobs.
Ist es eher so, dass Sie Ihren Shop ins Web gestellt, Ihre komplette Produktpalette eingepflegt haben und höchstens wöchentlich Aktualisierungen vornehmen, sollte die tägliche Ausführung des CronJobs genügen.
CronJob (HTTP)
Dies ist die Ausweichlösung, wenn Ihnen die Ausführung von PHP-Skripten oder Befehlen via CronJob nicht zur Verfügung steht. Das Modul zeigt Ihnen die via HTTP aufzurufende URL, die ähnlich aussieht wie diese:
https://ihrshop.de/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php?cacheToken=912ec803b2ce49e4a541068d495ab570
Äquivalent zur direkten Ausführung des PHP-Scripts steht Ihnen auch bei der HTTP-Variante der force-Parameter zur Verfügung. Der Aufruf mit force-Parameter erfolgt gemäß diesem Schema:
https://ihrshop.de/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php?cacheToken=912ec803b2ce49e4a541068d495ab570&force=1
Selbiges gilt für den cleanup-Parameter zum Löschen nicht mehr benötigter Dateien. Genau wie bei der Ausführung via CLI können Sie diesen statt des cleaup-Parameters nutzen oder in Kombination mit diesem. Letzteres sähe z.B. so aus, wobei die Reihenfolge der Parameter irrelevant ist:
https://ihrshop.de/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php?cacheToken=912ec803b2ce49e4a541068d495ab570&force=1&cleanup=1
Von der Art der Ausführung abgesehen gibt es keine weiteren Unterschiede. Es handelt sich um dasselbe Caching-Script, das dieselbe Aufgabe erfüllt. Es gilt lediglich zu beachten, dass für die Ausführung via HTTP strengere Limits gelten können als bei der Ausführung via CLI. So sind schlimmstenfalls mehrere HTTP-Aufrufe erforderlich, um den gesamten Cache zu generieren. Wir haben jedoch erstens auf eine Schonung der Ressourcen geachtet und zweitens darauf, dass auch bei Erreichen der maximalen Ausführzeit Ihr Onlineshop ohne funktionelle Störungen weiter läuft.
HTTP-CronJob bei all-inkl
Beim Hosting-Provider all-inkl gibt es leider nur die Möglichkeit, den CronJob via HTTP auszuführen. Die entsprechende Option finden Sie im KAS (technische Verwaltung) unter Tools > Cronjobs. Davon abgesehen, dass Sie das „https“ als Protokoll auswählen und entsprechend im Eingabefeld weglassen, entspricht das Anlegen des CronJobs bei all-inkl exakt obiger Beschreibung.
Best Practice (Video)
Seiten vom Caching ausschließen
Um bestimmte Seiten vom Caching auszuschließen, also dynamisch generiert und somit erheblich langsamer auszuliefern, platzieren Sie einfach das Attribut namens data-wmnocache
an beliebiger Stelle im Quellcode. Je nach Seitenart ist das in der Artikel- oder Kategoriebeschreibung, im Content Manager oder StyleEdit zu bewerkstelligen.