code4business Software GmbH - Magento Associate

Umsetzung eines Full Page Cache Warmups in Magento

Ohne weitere Einstellungen wird in der Magento Enterprise Edition der Cache gefüllt, wenn eine Seite abgerufen wird. Magento bietet unter System/Konfiguration/System/Full Page Cache Auto Generation die Möglichkeit, den Cache vorab zu füllen. Leider ist diese Option allenfalls für sehr kleine Shops nützlich. Bei dem von uns bearbeitetem Shop, mit ca. 20.000 Artikeln, sollten 100.000 URLs gecached werden. Bei einer Ladezeit von ca. drei Sekunden auf dem Testserver, wäre das System also nach ca. dreieinhalb Tagen fertig gewesen.

Skriptbasiertes Cache Warmup

Glücklicherweise gibt es eine recht einfache Möglichkeit, nur die gewünschten Seiten abzurufen, um für diese Seiten den Cache zu füllen. Idee ist, dass alle Seiten gecached werden sollen, die mit einem Klick von einer angegebenen Seite aus zu erreichen sind. Dazu wird das Unix-Tool wget eingesetzt. Ein entsprechendes Skript sieht folgendermaßen aus:

wget -O – subdomain.test.de/site.html | grep -o '<a href="http[^"]*"' | sed 's/<a href="//;s/"$//' | grep "subdomain.test.de" | while read line; do
  wget -P /tmp/warmup/output --delete-after $line
done

Das Skript im Detail

Geht man die Bestandteile durch, so findet man folgende Eigenschaften:

wget -O - test1.sky-testserver.de/site.html

ruft die Zielseite auf und gibt das Ergebnis (den HTML-Quelltext) auf die Standardausgabe.

grep -o '<a href="http[^"]*"'

sucht alle Links (<a href=“http://subdomain.test.de/link.html“>) aus dem Quelltext heraus.

sed 's/<a href="//;s/"$//

sorgt dafür, dass aus dem Link im nächsten Schritt die reine http-Adresse (http://subdomain.test.de/link.html) extrahiert wird.

grep "subdomain.test.de"

Diese http-Adressen werden dann auf die reduziert, die subdomain.test.de enthält.

while read line; do … done

Für jeden Link wird dann die folgende Funktion ausgeführt:

wget -P /tmp/warmup/output --delete-after $line

Ein wget mit der extrahierten URL wird ausgeführt. Die heruntergeladene Datei wird unter /tmp/warmup/output abgelegt und danach wieder gelöscht.

Es scheint essentiell zu sein, für jede Adresse ein einzelnes wget zu nutzen. Andernfalls wird der Full Page Cache nicht so aufgebaut, dass er auch von außen wirklich nutzbar ist. Daher fallen die wget-Paramter -r und –level weg, obwohl diese das Skript erheblich vereinfachen würden.

Fazit

Mit diesem Skript lässt sich ein Full Page Cache einfach für eine Reihe von Seiten, und deren direkte Nachfolger, bauen. Dies führt für diese Seiten zu sehr guten Zugriffszeiten, selbst auf einem Testserver, der lediglich Files als Cache-Storage verwendet. Diese Methode ist zu empfehlen, wenn häufiger ein Cache-Refresh nötig ist.

Antwort hinterlassen