Cache generieren im Gambio-Modul zur Ladezeitoptimierung

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.

RewriteRules in .htaccess-Datei schreiben, um das Laden der Seiten aus dem Cache zu aktivieren

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.

CronJob anlegen in Plesk: PHP-Script ausführen
Beispiel Plesk: So legen Sie den CronJob an.

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

Caching-CronJob in cPanel hinzufügen

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)

Modal Neuer Cron-Job mit Formularfeldern für Vertrag, Befehl und Ausführungs-Intervall
CronJob in LiveConfig bei 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

Cron-Job Details
CronJob im Strato-Kundenmenü

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)

Server Informationen: "gambio":"v4.0.0.0", "phpversion":"7.2.31",
Gambio PHP-Version unter Toolbox > Server Info

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.

/usr/www/users/shop/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php 6e492a9a7ee28cf8b7fc97a9a0f2da3b
CronJob-Befehl im Gambio-Admin

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.

Cronjob Hinzufügen: Name: Ladezeitoptimierung 2h Interpreter PHP 7.2 Skript (absoluter Pfad) Status Aktiviert Ausführungszeiten
CronJob in Hetzners konsoleH

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

httpdocs/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php mit Argumenten 6e492a9a7ee28cf8b7fc97a9a0f2da3b de
CronJob zur Cache-Aktualisierung in Plesk

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:

  1. 6e492a9a7ee28cf8b7fc97a9a0f2da3b de
    10 5-23 * * *
  2. 6e492a9a7ee28cf8b7fc97a9a0f2da3b en
    30 5-23 * * *
  3. 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.

httpdocs/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php mit Argumenten 6e492a9a7ee28cf8b7fc97a9a0f2da3b force cleanup 100
Cache leeren & 100 Seiten in den Cache legen

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

All-inkl Tools > Cronjobs > Anlegen > Protokoll / Pfad: https://ihrshop.de/GXModules/Werbe-Markt/Ladezeitoptimierung/Cache.php?cacheToken=2f82d5cbde1d5228da128ff680464f49, Beschreibung: Gambio Ladezeitoptimierung, Zeitpunkt der Ausführung: stündlich zur 11. Minute
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

HTML-Code mit einem data-wmnocache Attribut
data-wmnocache im Content Manager

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.