Website Performance: Caching und Expires Header von Bildern, CSS und JavaScript
Tutorial von Stefan Trost | Letztes Update am 15.01.2024 | Erstellt am 18.04.2012
Bilder, CSS- und JavaScript-Dateien haben zwei Dinge gemeinsam: Sie sind im Vergleich zu einer reinen HTML-Seite oft relativ groß und ändern sich selten oder überhaupt nicht.
Daher wäre es aus Perfomance-Sicht eine Katastrophe, wenn man bei jedem Aufruf einer Website alle Bilder und Scriptdateien komplett neu laden würde, obwohl bei dem Aufruf der Seite zuvor schon die selben Skripte und die selben Bilder (zum Beispiel das Hintergrundbilder oder der Header) geladen wurden.
Schön wäre es also, dem Browser zu sagen: Lade diese Dateien nur einmal herunter und nicht erneut, behalte sie und zeige sie immer neu an. Wie das geht, schauen wir uns in diesem Tutorial an.
Beispiel .htaccess Datei
Schauen wir uns zuerst diese Zeilen aus einer .htaccess Datei an:
<FilesMatch "\.(ico|jpg|png|js|gif|css|gz)$"> Header set Cache-Control "max-age=29030400, public" ExpiresActive On ExpiresDefault "access plus 29030400 seconds" </FilesMatch>
Hier fügen wir allen Dateien mit den Endungen .ico, .jpg, .png, .js, .gif, .css und .gz einen Cache-Control-Header sowie einen Expires-Header hinzu. Damit bezwecken wir genau das, was wir erreichen wollten.
Fragt der Browser nun eine der Dateien an, bekommt er vom Server neben der eigentlichen Datei durch unsere .htaccess Datei auch noch folgende Informationen mit auf den Weg:
Cache-Control: max-age=29030400, public Expires: Wed, 01 April 2013 22:17:51 GMT
Das bedeutet nichts anderes, als das wir dem Browser die Information geben, dass sich die Dateien bis zu dem angegebenen Datum beziehungsweise der angegebenen Anzahl von Sekunden nicht mehr verändern werden. Der Browser weiß dann, dass er die Dateien bis zum Ablauf dieser Zeitspanne aus dem Cache laden kann und nicht neu herunterladen muss.
Individuell anpassen
Wenn Sie das Beispiel oben individuell anpassen möchten, können Sie wie folgt vorgehen:
Zuerst sollten Sie sich anschauen, welche Dateiendungen genau bei Ihnen auf der Homepage mit den entsprechenden Headern versehen werden sollen. Diese Endungen können Sie in die erste Zeile des Beispiels oben mit aufnehmen oder Ihre nicht benötigten Dateiendungen aus der Aufzählung herausnehmen.
Danach müssen Sie entscheiden, wie lange die Dateien gechached werden sollen. Die Werte hinter "max-age" und "access plus" geben an, wie lange (in Sekunden) die Dateien gechached werden dürfen. Setzen Sie hier also zum Beispiel für eine Stunde 3600 ein, für einen Tag 86400, für einen Monat 2592000 und so weiter. In der Regel sollte die Cache-Zeit aber nicht länger als ein Jahr betragen.
Wenn Sie für verschiedene Dateiendungen unterschiedliche Cache Zeiten setzen möchten, können Sie einfach mehrere Blöcke für die Dateiendungen anlegen, wie zum Beispiel:
<FilesMatch "\.(ico|jpg|png|js|gif|gz)$"> Header set Cache-Control "max-age=2592000, public" ExpiresActive On ExpiresDefault "access plus 2592000 seconds" </FilesMatch> <FilesMatch "\.(css)$"> Header set Cache-Control "max-age=86400, public" ExpiresActive On ExpiresDefault "access plus 86400 seconds" </FilesMatch> <Files seite.html> Header set Cache-Control "max-age=3600, public" ExpiresActive On ExpiresDefault "access plus 3600 seconds" </Files>
Hier wird für die Datei seite.html eine Zeit von 1 Stunde (3600 Sekunden) gesetzt, für alle CSS-Dateien eine Zeite von 1 Tag (86400) Sekunden und für die anderen oben angegeben Dateien 1 Monat (2592000) Sekunden.
Alternative Schreibweise
Neben der eben vorgestellten Schreibweise, kann man den Expires-Header auch mit ExpiresByType angeben. Hier ein Beispiel dafür:
ExpiresActive On ExpiresDefault "access plus 1 year" ExpiresByType text/html "access plus 10 seconds" ExpiresByType text/css "access plus 6 months" ExpiresByType application/x-javascript "access plus 6 days" ExpiresByType image/png "access plus 3 months" ExpiresByType image/jpeg "access plus 3 months" ExpiresByType image/gif "access plus 86400 seconds" ExpiresByType image/x-icon A86400
In diesem Beispiel können Sie sehen, wie Sie individuell für jeden Typ einen Expires-Header setzen können. Wenn ein Typ nicht konkret angegeben wurde, wird der unter "ExpiresDefault" gesetzte Header verwendet. An diesem Beispiel kann man sehen, dass neben "seconds" auch andere Zeitangeben wie "days", "months" oder "year" möglich sind. Außerdem kann statt "access plus 86400 seconds" auch "A86400" geschrieben werden, wie es in der letzten Zeile demonstriert ist.
Über den Autor
Software von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen
Ähnliche Themen
CSS-Stylesheets in HTML einbinden
Tutorial | 0 Kommentare
Bilder, CSS, JS und Seiten neu laden trotz Browser-Cache
Tipp | 2 Kommentare
PHP: Eine E-Mail versenden
Tutorial | 0 Kommentare
Website Performance: Javascript und CSS komprimiert ausliefern und Ladezeiten verkürzen
Tutorial | 0 Kommentare
Ist das Liebeskummer oder was anderes?
Offene Frage | 1 Antwort
PHP: Datei Download Skript
Tutorial | 0 Kommentare
PHP Mail Funktion: UTF-8 Header in E-Mails
Info | 0 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.