Was ist der Cache?
Bildnachweis: Imeenhae von Pexels

14.09.2022 09:20, zuletzt aktualisiert 26.09.2022 10:44
Benjamin Witte
6

Was ist der Cache?

Warum der Cache-Speicher manchmal bei der Webentwicklung nervt? Hier kurz erklärt!

In diesem Blog-Beitrag erklären wir Ihnen kurz, was genau der Cache-Speicher ist, für was dieser eingesetzt wird und welche Probleme dieser manchmal erzeugen kann.

Was ist der Cache-Speicher?

Kurz erklärt, ist der Cache-Speicher das "Kurzzeitgedächtnis" eines Systems oder eines Browsers. Dabei werden z. B. beim Browser besonders die Daten von bereits besuchten Webseiten in den Cache-Speicher abgespeichert. Der Vorteil dabei ist, dass beim erneuten Aufrufen der Webseite dieser schneller aus dem Speicher geladen werden kann, als das die Anfrage erneut an den Host der Seite übermittelt zu müssen.

Die Ziele eines Cache-Speichers

Während das schnelle Aufrufen von Daten eines der Hauptziele des Cache-Speichers darstellt, hat dieser noch weitere Ziele, die er efüllt. Darunter zählen:

  • Verringerung der Anzahl von Zugriffen (z. B. auf das Host-Server einer Webseite)

  • Entlastung von Schnittstellen auf Ihrem oder externen Geräten

  • Reduzierung der Netzwerklast

  • Minimierung von Übertragungsfehlern

  • Steigerung der Ausführungszeit von Anwendungen.

Das Problem des Cache-Speichers

Der Begriff Cache-Invalidierung bezeichnet die Entscheidung, wann im Cache-Speicher gespeicherte Daten nicht mehr aktuell sind und erneuert werden müssen. Besonders bei Webseiten kann der Cache-Speicher einem die aktuelle Version einer Webseite vorenthalten und gibt aus dem Speicher eine veraltete Version der Webseite aus.

Dies kann vorallem bei der aktiven Entwicklung von Ihrer Webseite ein Problem darstellen. Sofern Sie Änderungen an Ihrer Webseite vorgenommen und die Dateien hochgeladen haben, es im Browser aber nicht "aktualisiert" wird, kann der Cache das Problem sein.

Jedoch kann es auch dazu kommen, dass bereits Daten aus dem Cache-Speicher zu früh überschrieben wurden, dann ist die Rede von einem Cache Miss. Dabei muss der Cache erst die Daten wieder aufwendig lokalisieren und kann diese erst im Anschluss wieder anzeigen.

Gibt es dafür Lösungen?

Besonders bei Fällen, in denen der Cache-Speicher einen älteren Stand ausgibt, ist die beste Lösung den Cache-Speicher zu leeren. Allerdings ist es nicht ratsam, besonders wegen Cache Miss, den Speicher in nahen Abständen manuell zu leeren. Manche Browser bieten dabei die Möglichkeit an, den Cache-Speicher in regelmäßigen Abständen zu leeren. Dabei ist eine mittelfristige Periode empfehlenswert.

Die Lösung über die .htaccess-Datei

Es gibt zudem noch die Möglichkeit, den Cache über Cache-Control-Anweisung über den HTTP-Header zu kontrollieren. Dies ermöglicht es zu bestimmen, wie lange die ausgegebenen Daten der Webseite zwischengespeichert werden sollen und wie diese bei erneuten Anfragen behandelt werden sollen. Dabei kann zwischen "public" oder "privat" unterscheiden werden. Wobei "public" bedeuten das Caching in beliebigen Caches explitzit erlaubt ist. Wiederum bedeutet "privat", dass nur der Browser-Cache die Daten zwischenspeichern darf. Weiterhin wird noch zwischen "no-store", also Caching ist nicht erwünscht und "no-cache" bzw. "must-revalitdate", was "Revalidierung gewünscht" bzw. "Revalidierung, wenn abgelaufen" bedeutet, unterschieden. Allerdings kann es dennoch dazu kommen, dass verschiedene Browser diese Anweisungen mit eigenen überschreibt, bzw. diesen keine Beachtung schenkt. Dies kann jedoch durch Angaben von konkreten Ablaufzeiten gesteurt werden. Dabei sind die "max-age-Anweisungen" im Cache-Control-Header.

Die Cache-Control-Anweisungen werden im Apache mittels der Direktive Header definiert. Dabei können auch die "max-age"-Werte in der Konfiguration direkt bestimmt werden. Jedoch ist es auch möglich solche Anweisungen über die ".htaccess-Datei" zu setzen. Auch in Ihrem Webhosting-Paket bei uns, haben Sie die Möglichkeit über die .htaccess-Datei solche Direktiven zu setzen.

Ein Beispiel für das Setzen solcher Direktiven für das Caching einer Grafik- oder einer Multimediadatei für eine Stunde wäre wie folgt:

<IfModule mod_headers.c>
    <FilesMatch "\.(ico|jpg|jpeg|png|gif|pdf|mp3|mp4)$">
        Header set Cache-Control "public, max-age=3600, no transform"
    </FilesMatch>
</IfModule>

Hingegen könnte eine Direktive für Textdateien für 20 Minuten wie folgt aussehen:

<IfModule mod_headers.c>
    <FilesMatch "\.(html|htm|xml|txt|xsl)$">
        Header set Cache-Control "privat, max-age=1200, must-revalidate"
    </FilesMatch>
</IfModule>
Browser Cache Cache-Speicher Webentwicklung