Website Cache anhand der Sitemap automatisch aufbauen
Website Cache anhand der Sitemap automatisch aufbauen

Website Cache anhand der Sitemap automatisch aufbauen

Lesedauer: ca. 5 Minuten

Ich habe mich neulich dazu entschlossen, mein Skript zum automatischen Aufbau des Website Cache von Grund auf zu erneuern, da es nicht mehr für meine Zwecke geeignet war. Die neue Version ruft nun alle Beitragsseiten, die in der Sitemap stehen, auf verschiedene Arten auf, um den Cache möglichst umfangreich anzulegen. Hier war es mir wichtig, sowohl Varianten für WebP, als auch für JPEG Bilder erstellen zu lassen. Zusätzlich wollte ich je eine mit gzip komprimierte Version als auch eine unkomprimierte Version haben. Damit dürften dann wohl alle Nutzer und Browser abgedeckt sein.

Ich setze das Skript unter WordPress auf einem Uberspace Host ein. Das Skript ist für Cache Enabler geschrieben und berücksichtigt Autoptimize. Wie es mit anderen Caching Plugins funktioniert, kann ich nicht sagen. Wenn die Funktionen grundlegend gleich sind, sollte es allerdings auch funktionieren. Es müssen dann allerdings die Pfade im Skript angepasst werden.

In der von mir erstellten Fassung dauert es natürlich, je nachdem wie viele Beiträge in der Sitemap stehen, unter Umständen recht lange. Da meine Website aktuell jedoch recht klein ist, stört mich das nicht wirklich.

Disclaimer: Ich habe das Skript die letzten Tage bei mir getestet und es läuft bei mir einwandfrei. Ich übernehme jedoch keine Gewähr dafür, dass es auch bei euch wie vorgesehen funktioniert, vor allem dann nicht, wenn ihr andere Caching Plugins verwendet.

#!/bin/bash

#
# cache-rebuild.sh v2.0
# by Torsten Meyer
# https://knodderdachs.de
#
# Disclaimer: Ich habe das Skript bei mir getestet und es läuft bei mir einwandfrei. Ich übernehme jedoch keine
# Gewähr dafür, dass es auch auf anderen Systemen (z. B. bei euch) wie vorgesehen funktioniert, vor allem dann
# nicht, wenn ihr andere Caching Plugins verwendet.
#
# Dieses Skript prüft, ob der Cache eurer Website unterhalb einer bestimmten Größe liegt und baut den Cache anhand
# den URL in eurer Sitemap neu auf.
#
# Das Skript habe ich für Cache Enabler geschrieben. Cache Enabler kann verschiedene Arten von Caches aufbauen.
# Caches mit JPEG oder WebP Bildern, sowie komprimierte und unkomprimierte HTML-Dateien.
#
# Ich habe das Skript so geschrieben, dass für jede URL alle vier Konstellationen abgespeichert werden.
# Das mag durchaus zu viel werden bzw. zu lange dauern, je nachdem, wie umfangreich die Website ist, aber das
# sollte jeder für sich selbst entscheiden und das Skript entsprechend anpassen. 
#

clear

#
# Verzeichnisnamen einstellen
#
# Ich nutze Cache Enabler und Autoptimize - ihr müsst die Pfade entsprechend euren Plugins anpassen.
# Wenn Autoptimize nicht genutzt wird, dann solltet ihr die entsprechenden Zeilen im Skript auskommentieren oder
# löschen.
#
# Bitte achtet darauf die "/" am Ende der Pfade anzuhängen.
#

website_url="https://knodderdachs.de/" # Hier natürlich eure Website URL eintragen... :)
cacheenabler_dir="/home/$USER/html/wp-content/cache/cache-enabler/"
autoptimize_dir="/home/$USER/html/wp-content/cache/autoptimize/"

#
# Nun kommen die eigentlichen Funktionen, die später im Skript aufgerufen werden.
# Auch hier solltet ihr die Einträge zu Autoptimize auskommentieren oder entfernen, solltet ihr Autoptimize nicht
# verwenden.
#
# Bei der Funktion "cache_aufbauen" könnt ihr auch weitere URL eintragen, die nicht in eurer Sitemap drin sind,
# aber dennoch gecached werden sollen. Hierzu habe ich ein paar Beispiele eingetragen.
#
# Ich habe das Skript so geschrieben, dass zuerst eine mit gzip komprimierte HTML für WebP Bilder heruntergeladen
# wird, danach kommt eine gzip komprimierte Version für JPEG Bilder. Danach dann die unkomprimierten Versionen
# jeweils für WebP und dann für JPEG.
#
# Auch das könnt bzw. solltet ihr nach euren Bedürfnissen anpassen.
#

function cache_leeren () {
	echo "Eventuell vorhandene Cacherückstände werden entfernt."
	rm -rf $cacheenabler_dir
	rm ${autoptimize_dir}css/autoptimize_* >/dev/null 2>&1
	rm ${autoptimize_dir}js/autoptimize_* >/dev/null 2>&1
}

function cache_aufbauen () {
	echo "Der Cache wird neu aufgebaut."
	wget -nv $website_url -nd --delete-after --header='Accept: text/html,image/webp' --header="accept-encoding: gzip"
	wget -nv $website_url -nd --delete-after --header='Accept: text/html,image/jpeg' --header="accept-encoding: gzip"
	wget -nv $website_url -nd --delete-after --header='Accept: text/html,image/webp'
	wget -nv $website_url -nd --delete-after --header='Accept: text/html,image/jpeg'
	wget -nv ${website_url}sitemap-post.xml --output-document - | egrep -o "https?://[^<]+" | wget -nd --delete-after --header='Accept: text/html,image/webp' --header="accept-encoding: gzip" -i -
	wget -nv ${website_url}sitemap-post.xml --output-document - | egrep -o "https?://[^<]+" | wget -nd --delete-after --header='Accept: text/html,image/jpeg' --header="accept-encoding: gzip" -i -
	wget -nv ${website_url}sitemap-post.xml --output-document - | egrep -o "https?://[^<]+" | wget -nd --delete-after --header='Accept: text/html,image/webp' -i -
	wget -nv ${website_url}sitemap-post.xml --output-document - | egrep -o "https?://[^<]+" | wget -nd --delete-after --header='Accept: text/html,image/jpeg' -i -
	wget -nv ${website_url}galerien/ -nd --delete-after --header='Accept: text/html,image/webp' --header="accept-encoding: gzip"
	wget -nv ${website_url}galerien/ -nd --delete-after --header='Accept: text/html,image/jpeg' --header="accept-encoding: gzip"
	wget -nv ${website_url}galerien/ -nd --delete-after --header='Accept: text/html,image/webp'
	wget -nv ${website_url}galerien/ -nd --delete-after --header='Accept: text/html,image/jpeg'
	wget -nv ${website_url}archiv/ -nd --delete-after --header='Accept: text/html,image/webp' --header="accept-encoding: gzip"
	wget -nv ${website_url}archiv/ -nd --delete-after --header='Accept: text/html,image/jpeg' --header="accept-encoding: gzip"
	wget -nv ${website_url}archiv/ -nd --delete-after --header='Accept: text/html,image/webp'
	wget -nv ${website_url}archiv/ -nd --delete-after --header='Accept: text/html,image/jpeg'
	wget -nv ${website_url}ueber-mich/ -nd --delete-after --header='Accept: text/html,image/webp' --header="accept-encoding: gzip"
	wget -nv ${website_url}ueber-mich/ -nd --delete-after --header='Accept: text/html,image/jpeg' --header="accept-encoding: gzip"
	wget -nv ${website_url}ueber-mich/ -nd --delete-after --header='Accept: text/html,image/webp'
	wget -nv ${website_url}ueber-mich/ -nd --delete-after --header='Accept: text/html,image/jpeg'
	wget -nv ${website_url}kontakt/ -nd --delete-after --header='Accept: text/html,image/webp' --header="accept-encoding: gzip"
	wget -nv ${website_url}kontakt/ -nd --delete-after --header='Accept: text/html,image/jpeg' --header="accept-encoding: gzip"
	wget -nv ${website_url}kontakt/ -nd --delete-after --header='Accept: text/html,image/webp'
	wget -nv ${website_url}kontakt/ -nd --delete-after --header='Accept: text/html,image/jpeg'
}

#
# Jetzt prüfen wir, ob das Cache Enabler Verzeichnis existiert. Falls nicht, legen wir es an.
#

if [ ! -d $cacheenabler_dir ]; then
	mkdir $cacheenabler_dir
fi

#
# Nun überprüfen wir, wie groß der aktuell vorhandene Cache ist. Ab einer Größe von 3000000 Bytes wird der Cache
# neu angelegt. Den Wert müsst ihr anhand eurer Website- bzw. Cachegröße anpassen.
#

cachedirsize=$(du -bs $cacheenabler_dir | cut -f1)

if [ "$cachedirsize" -ge 3000000 ]; then
	echo "Der Cache ist bereits aufgebaut."
else
	cache_leeren
	cache_aufbauen
fi

#
# Ende :)
#

Da das Skript beim Starten prüft, wie groß der aktuell vorhandene Cache ist, kann man das Skript ohne Probleme per Cronjob alle paar Minuten aufrufen lassen, ohne den Server unnötig zu belasten. Bei Änderungen an der Website wird der Cache dann nach kurzer Zeit wieder vollständig aufgebaut.

Bei Fragen, Anregungen oder Tipps schreibt gerne einen Kommentar.

Abonnieren
Benachrichtige mich bei
guest
0 Kommentare
Inline Feedbacks
Zeige alle Kommentare
0
Ich freue mich auf deinen Kommentar.x
()
x