Turbo für die Webseite – htaccess tunen mit gzip u. Browser Caching.

citylight1976 schrieb am 05.02.2014 um 14:43 Uhr

Browser Caching ist eine einfache Methode um den Traffic einer Webseite zu reduzieren und somit die Performance zu erhöhen. Zudem dauert die Einrichtung im Apache Webserver maximal fünf Minuten und sollte bei allen gängigen Webhosting Paketen unterstützt werden.

Auf Google Pages Speed Insights, kann man seine Website auf Geschwindigkeit (Performance) überprüfen lassen. Und erhält zudem eine detailierte Auswertung und sehr ernst gemeinte Verbesserungsvorschläge.

Jeder moderne Webbrowser (Chrome, Firefox, Internet Explorer, etc) hat einen eingebauten Cache, was bedeutet: dass Dateien zwischengespeichert und nicht bei jedem Aufruf neu heruntergeladen werden müssen. Darunter fallen in der Regel Dateitypen wie Bilder, Stylesheets, Javascripts, etc.. Der Browsercache funktioniert allerdings nur dann vernünftig, wenn auch am Webserver entsprechende Regeln bzw. ein Ablaufdatum für die einzelnen Dateitypen festgelegt wird.

Ist eine entsprechende “expire” Regel aktiviert, so wird dem Browser vom Webserver mitgeteilt, dass zB. das Bild background.jpg für 7 Tage gecached werden kann. Der Browser muss das Bild somit nicht bei jedem Seitenaufruf neu laden, sondern behält es in seinem Zwischenspeicher. Das spart somit Traffic und dadurch auch Ladezeit.

Browser Caching aktivieren – htaccess mit mod_expires

Damit man das Browser Caching nun auf dem eigenen Root Server aktivieren kann, wird zuvor das Modul “mod_expires” aktiviert, falls es noch nicht aktiviert ist. Ein managed Webhosting Paket sollte das Modul eigentlich zur Verfügung stellen. Unter den gängigsten Linux Distributionen wird mod_expires folgendermaßen auf der Commandline aktiviert. Ein Neustart des Apache Prozess ist anschließend erforderlich:

 

a2enmod expires
/etc/init.d/apache2 restart

 

Anschließend wird in die bestehende .htaccess Datei (falls vorhanden) oder in eine neue .htaccess Datei folgender Inhalt eingefügt. Der Teil kann auch direkt in die globale Apache Konfiguration oder in die Vhost Konfiguration geschrieben werden. Die If Anweisung schützt dabei den Apache Prozess, sodass angeführte “Expire Regeln” nur zum Einsatz kommen, wenn auch das Modul mod_expires aktiviert ist:



<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif "access plus 7 days"
  ExpiresByType image/ico "access plus 7 days"
  ExpiresByType image/jpeg "access plus 7 days"
  ExpiresByType image/jpg "access plus 7 days"
  ExpiresByType image/png "access plus 7 days"
  ExpiresByType text/css "access plus 7 days"
  ExpiresByType text/javascript "access plus 7 days"
  ExpiresByType application/x-javascript "access plus 7 days"
  ExpiresByType application/javascript "access plus 7 days"
</IfModule>

 

“ExpiresByType” spricht den MIME Type an und setzt via “access plus 7 days” den Cache Wert auf 7 Tage. Die entsprechenden Dateien bleiben also bis zu 7 Tage im Browser Cache erhalten. Hier kann natürlich auch ein höherer oder für gewisse MIME Types (css, xml, js, ..) auch ein niedrigerer Wert eingestellt werden. Je nach Anwendungsgebiet kann hier variiert werden. Mit 7 Tage haben wir allerdings gute Erfahrungen gemacht.

Alternative: Browser Caching mit mod_headers

Als Alternative zur Methode mit dem Modul mod_expires gibt es noch eine Variante mit dem Modul mod_headers. Hier können die Dateitypen direkt über die Dateiendungen angesprochen werden und nicht via MIME-Types:

a2enmod headers
/etc/init.d/apache2 restart

Nachdem das Modul aktiviert wurde, kann folgender Teil wieder direkt in die .htaccess Datei oder in die Apache Konfiguration eingetragen werden.



<IfModule mod_headers.c>
<FilesMatch "\.(gif|ico|jpeg|jpe|png|css|js)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
</IfModule>

 

Header set Cache-Control setzt den Wert für max-age auf 604800 Sekunden (7 Tage). Dem Browser wird somit mitgeteilt, dass die gespeicherten Dateien für 7 Tage aktuell sind und nicht erneut vom Server geladen werden müssen. Wenn man für andere Dateitypen noch verschiedene Ablaufdaten festlagen möchte, dann kann einfach eine weitere Zeile (<FilesMatch …. </FilesMatch>) eingefügt werden.

Auswirkung und Fazit

Sobald die htaccess Datei gespeichert wird, ist das Browser Caching aktiv. Eine Aktualisierung des Google Page Speed Insights sollte dabei sofort eine Score Verbesserung anzeigen:

Der Score nur durch die Aktivierung des Browser Caching von 87 auf 90 gestiegen. Das mag auf den ersten Blick nicht viel erscheinen, bringt aber tatsächlich ein wenig Geschwindigkeit und sollte daher auch genutzt werden. Warum Potential verschenken, wenn es so einfach umgesetzt werden kann?

 

.htaccess & Komprimierung

Die Komprimierung von Internetseiten kann zu einer ganzen Reihe von Vorteilen führen: So kann es beispielsweise zu einer schnelleren Auslieferung der Website kommen, was wiederum die Usability der Seite erhöht. Aber auch der Kostenaspekt spielt eine Rolle, denn schließlich kostet das durch eine Website übertragene Datenvolumen auch Geld. Apache-Server verfügen über einen eingebauten Mechanismus zur Komprimierung, der über die Konfigurationdatei .htaccess gesteuert wird.

Durch Komprimierung von Inhalten – sowohl HTML-Seiten als auch Stylesheets und JavaScript-Dateien – kann der durch eine Website zu versendende Traffic (bzw. das Datenvolumen) signifikant verringert werden. Dies führt nicht nur dazu, dass Traffic-Kosten geringer ausfallen, sondern kann auch die Auslieferungsgeschwindigkeit beim Seitenabruf verkürzen. Hierdurch entsteht der schöne Nebeneffekt, dass – gerade wenn die auszuliefernden Dateien recht groß geraten sind – die bei der Auslieferung entstehende Latezzeit der Internetseite kürzer ausfällt als es ohne Komprimierung der Fall ist. Der schnellere Download der durch den Browser benötigten Informationen steigert die Usability der Website – der Seitenbesucher freut sich über geringere Ladezeiten.

Und so sieht meine .htaccess datei aus.

# Deflate Compression by FileType
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/atom_xml
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/x-shockwave-flash
</IfModule>
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif "access plus 7 days"
  ExpiresByType image/ico "access plus 7 days"
  ExpiresByType image/jpeg "access plus 7 days"
  ExpiresByType image/jpg "access plus 7 days"
  ExpiresByType image/png "access plus 7 days"
  ExpiresByType text/css "access plus 7 days"
  ExpiresByType text/javascript "access plus 7 days"
  ExpiresByType application/x-javascript "access plus 7 days"
  ExpiresByType application/javascript "access plus 7 days"
</IfModule>

Zu der eigendeliche Frage jetzt, was könnte man hier noch verbessern ? Gibt es vielleicht andere meinungen hier zu, um das Ganze noch weiter zu Optimieren. Würde mich freuen!

Ach ja, meine eckdaten von PageSpeed Insights 81 Mobil / 89 Desktop

Zuletzt geändert von BilderMacher am 11.01.2017, 10:46, insgesamt 1-mal geändert.

Grund: alt

Wenn Stiftung Warentest Vibratoren testet, ist dann "Befriedigend" besser als "Gut"?

Ich bin unehrlich! Bei einem unehrlichen Mann wie mir könnt Ihr darauf vertrauen, dass er unehrlich ist... ehrlich!

Kommentare

marboe schrieb am 05.02.2014 um 17:06 Uhr

Hallo citylights,

leider hast du uns keinen Link zu deiner Seite gepostet. Das wäre nämlich ganz sicher der erste Ansatzpunkt.

Wenn es sich um die Seite in deinem Profil handelt, dann gibt es da schon Potential. Zum Beispiel hier:

  oder hier: 

Allerdings bin ich mir nicht sicher, ob du diese Seite meinst, denn da steht:

Gruß Martina

citylight1976 schrieb am 05.02.2014 um 17:36 Uhr

Ja das ist meine Website , doch leider kann ich nichts auf den Bilder erkennen ..sie sind etwas zu klein geraten. Mit welchen Tool Arbeitest du denn da?

Gruß ;)

Zuletzt geändert von citylight1976 am 05.02.2014, 17:43, insgesamt 3-mal geändert.

Wenn Stiftung Warentest Vibratoren testet, ist dann "Befriedigend" besser als "Gut"?

Ich bin unehrlich! Bei einem unehrlichen Mann wie mir könnt Ihr darauf vertrauen, dass er unehrlich ist... ehrlich!

marboe schrieb am 05.02.2014 um 20:38 Uhr

hi, dass ist die Erweiterung Webdeveloper von Firefox. Kann dir die Bilder heute leider nicht mehr größer schicken, da ich nicht am PC sitze. Gruß Martina

marboe schrieb am 06.02.2014 um 10:10 Uhr

Hallo citylights,

wenn du Firefox nutzt, dann ist das Tool bereits enthalten. Wähle deine zu testende Seite aus, klicke im Seitenbereich auf die rechte Maustaste und wähle "Element untersuchen".

Im dann erscheinenden Fenster kannst du die Laufzeitanalyse oder den Netzwerktest aktivieren (und ggf auch noch detaillierte Anzeigen auswählen unter Profil 1)  und in der Browserzeile dann einen erneuten Abruf vom Server starten; so dass der Aufruf aller Dateien in Milisekunden gemessen werden kann.

Du wirst Bilder finden, die doch recht lange zum Laden brauchen; genauso wie diese Angabe (aus dem einen Bild, welches du nicht genau sehen konntest):

Ich lese daraus, dass deine htaccess mit der Angabe "7 Tage" nicht richtig gelesen werden kann, oder du sie noch nicht veröffentlicht hast. Du findest diese Anzeige wenn du in der Netzwerkanalyse auf irgendein Bild oder eine .css oder anderes klickst.

Was ich damit sagen wollte: bevor ich mich mit weiteren Verbesserungen auf dem Server rumschlagen würde, wäre es vielleicht sinnvoll, sich die eingebauten Dateien wie Bilder, Schatten usw gut anzugucken. Da steckt in der Regel sehr viel Verbesserungspotential (was ich bei dir jetzt nicht geprüft habe).

Diese Arbeit würde ich mir für meine Seiten auch nur bedingt machen, da es noch jede Menge Faktoren gibt, die dafür wichtig sind, auf die du aber gar keinen großen Einfluss hast. Jeder Hoster wird je nach gebuchtem Paket hier einen schnelleren Server bereitstellen und die Downloadzeit deiner Seite ist auch sicher nicht zu jeder Uhrzeit gleich. Desweiteren ist zu beachten: der PageSpeedTest ist nur eines von geschätzten 200 Kriterien wie Google deine Seite bewertet. Da kann man sich ganz schnell verlieren.

Wenn du das Optimum willst, dann musst du deine Seiten selbst hosten; also selbst den Server bereitstellen und natürlich auch den Code selbst schreiben. Ich bin da mit meinen Seiten wesentlich gelassener .  Gruß und viel Erfolg!!! Martina

Eugen200 schrieb am 23.01.2015 um 20:36 Uhr

Hallo citylight1976,

danke für deine Frage, oder besser gesagt für deine Lösung zur deiner Frage! Ich habe deinen Code für die .htaccess Datei übernommen und alles hat fast perfekt geklappt. Leider meckert Google immer noch bei 3 Sachen bei mir:

.../index_html_files/calibri.ttf (Ablaufdatum nicht festgelegt)
.../index_html_files/calibrib.ttf (Ablaufdatum nicht festgelegt)
http://www.google-analytics.com/analytics.js (2 Stunden)

 

Hast du oder jemand anderer ein Tip für mich, wie ich die .htaccess Datei ergänzen muss um auch diese 3 Punke anzusprechen?

mfg Eugen

citylight1976 schrieb am 23.01.2015 um 21:38 Uhr

Hallo citylight1976,

danke für deine Frage, oder besser gesagt für deine Lösung zur deiner Frage! Ich habe deinen Code für die .htaccess Datei übernommen und alles hat fast perfekt geklappt. Leider meckert Google immer noch bei 3 Sachen bei mir:

.../index_html_files/calibri.ttf (Ablaufdatum nicht festgelegt)
.../index_html_files/calibrib.ttf (Ablaufdatum nicht festgelegt)
http://www.google-analytics.com/analytics.js (2 Stunden)

 

Hast du oder jemand anderer ein Tip für mich, wie ich die .htaccess Datei ergänzen muss um auch diese 3 Punke anzusprechen?

mfg Eugen

 

Nun hierbei handelt es sich um Fontdatein (*.ttf) klicke hier > http://page-speed.net/tipps/webfonts-optimieren.html für weiteres vorgehen.

*.js dateien Sind Java Dateien ...ich vermute Goggle möchte da du sie Optimierst. Also so eine art Komprimieren ...aber diese lohnen sich nicht immer!

 

Gruß

Zuletzt geändert von citylight1976 am 23.01.2015, 21:38, insgesamt 1-mal geändert.

Wenn Stiftung Warentest Vibratoren testet, ist dann "Befriedigend" besser als "Gut"?

Ich bin unehrlich! Bei einem unehrlichen Mann wie mir könnt Ihr darauf vertrauen, dass er unehrlich ist... ehrlich!

Eugen200 schrieb am 23.01.2015 um 23:48 Uhr

Hallo citylight1976,

danke für deine Frage, oder besser gesagt für deine Lösung zur deiner Frage! Ich habe deinen Code für die .htaccess Datei übernommen und alles hat fast perfekt geklappt. Leider meckert Google immer noch bei 3 Sachen bei mir:

.../index_html_files/calibri.ttf (Ablaufdatum nicht festgelegt)
.../index_html_files/calibrib.ttf (Ablaufdatum nicht festgelegt)
http://www.google-analytics.com/analytics.js (2 Stunden)

 

Hast du oder jemand anderer ein Tip für mich, wie ich die .htaccess Datei ergänzen muss um auch diese 3 Punke anzusprechen?

mfg Eugen

 

Nun hierbei handelt es sich um Fontdatein (*.ttf) klicke hier > http://page-speed.net/tipps/webfonts-optimieren.html für weiteres vorgehen.

*.js dateien Sind Java Dateien ...ich vermute Goggle möchte da du sie Optimierst. Also so eine art Komprimieren ...aber diese lohnen sich nicht immer!

 

Gruß

Danke für schnelle Info!

Leider klappt es irgendwie nicht. Wie soll ich den 2 Code in der .htaccess Datei so platzieren, dass sie funktionieren? Das ist mein jetziger Code, der einwandfrei funktioniert:

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif "access plus 7 days"
  ExpiresByType image/ico "access plus 7 days"
  ExpiresByType image/jpeg "access plus 7 days"
  ExpiresByType image/jpg "access plus 7 days"
  ExpiresByType image/png "access plus 7 days"
  ExpiresByType text/css "access plus 7 days"
  ExpiresByType text/javascript "access plus 7 days"
  ExpiresByType application/x-javascript "access plus 7 days"
  ExpiresByType application/javascript "access plus 7 days"
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-shockwave-flash
</IfModule>

Und das ist der Code, der ich zufügen soll, um Google zufrieden zu stellen:

<ifmodule mod_deflate.c>
<ifmodule mod_mime.c> #Checks if your server supports Addtype
Addtype font/opentype .otf
Addtype font/eot .eot
Addtype font/truetype .ttf
</ifmodule>
AddOutputFilterByType DEFLATE font/opentype font/truetype font/eot
</ifmodule>

Ich habe versucht die zweite Code unten, oben, mittig zu platzieren. Das Ergebnis ist immer das gleiche: Internal Server Error

Meine Webseite wird nicht erreichbar.

Wie soll man aus diesen beiden Cods ein Code basteln, der funktioniert???

mfg Eugen

 

citylight1976 schrieb am 24.01.2015 um 00:24 Uhr

Ich selber kann es jetzt nicht testen aber ich denke so sollte es klappen können. Wenn nicht findest du einiges im Welt weiten Internet. darüber. Suche sonst über Google ;)

 

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif "access plus 7 days"
  ExpiresByType image/ico "access plus 7 days"
  ExpiresByType image/jpeg "access plus 7 days"
  ExpiresByType image/jpg "access plus 7 days"
  ExpiresByType image/png "access plus 7 days"
  ExpiresByType text/css "access plus 7 days"
  ExpiresByType text/javascript "access plus 7 days"
  ExpiresByType application/x-javascript "access plus 7 days"
  ExpiresByType application/javascript "access plus 7 days"
</IfModule>
 

<IfModule mod_deflate.c>

<ifmodule mod_mime.c> #Checks if your server supports Addtype

Addtype font/opentype .otf
Addtype font/eot .eot
Addtype font/truetype .ttf
</ifmodule>

AddOutputFilterByType DEFLATE font/opentype font/truetype font/eot

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-shockwave-flash
</IfModule>

Zuletzt geändert von citylight1976 am 24.01.2015, 00:24, insgesamt 1-mal geändert.

Wenn Stiftung Warentest Vibratoren testet, ist dann "Befriedigend" besser als "Gut"?

Ich bin unehrlich! Bei einem unehrlichen Mann wie mir könnt Ihr darauf vertrauen, dass er unehrlich ist... ehrlich!

Eugen200 schrieb am 24.01.2015 um 14:41 Uhr

Ich selber kann es jetzt nicht testen aber ich denke so sollte es klappen können. Wenn nicht findest du einiges im Welt weiten Internet. darüber. Suche sonst über Google ;)

 

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif "access plus 7 days"
  ExpiresByType image/ico "access plus 7 days"
  ExpiresByType image/jpeg "access plus 7 days"
  ExpiresByType image/jpg "access plus 7 days"
  ExpiresByType image/png "access plus 7 days"
  ExpiresByType text/css "access plus 7 days"
  ExpiresByType text/javascript "access plus 7 days"
  ExpiresByType application/x-javascript "access plus 7 days"
  ExpiresByType application/javascript "access plus 7 days"
</IfModule>
 

<IfModule mod_deflate.c>

<ifmodule mod_mime.c> #Checks if your server supports Addtype

Addtype font/opentype .otf
Addtype font/eot .eot
Addtype font/truetype .ttf
</ifmodule>

AddOutputFilterByType DEFLATE font/opentype font/truetype font/eot

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-shockwave-flash
</IfModule>

Nein, leider funktioniert es auch nicht. Na ja, trotzedem Danke. Dann suche ich mal im Internen nach einer Lösung.