Die Ladezeit von Webseiten verbessern

Die hier gezeigten Serveranweisungen sind bei 1und1, Strato und Host-Europe erfolgreich getestet. Allerdings haben verschiedene Hostingpakete unterschiedliche Konfigurationsmöglichkeiten - hier gilt zunächst ausprobieren. Falls der Serverfehler 500 erscheint funktionieren eine oder mehrere Anweisungen eben nicht.
 

Um die Ladezeit einer Webseite zu verbessern gibt es verschiedene M├Âglichkeiten der Optimierung. Zun├Ąchst gilt es zu analysieren, wo die Schw├Ąchen liegen. Diese k├Ânnen einerseits an der Seite selbst oder auch am Server zu finden sein.
F├╝r die Seiten- und Serveranalyse bietet Google die Seite PageSpeedInsights an.
Nach der Analyse zeigen sowohl PageSpeed als auch YSlow Verbesserungsvorschl├Ąge an. Auch wenn davon nicht immer alles umsetzbar ist, sind die gegegbenen Informationen allemal n├╝tzlich.

Um heraus zu finden was der Server kann oder eben nicht kann, sollte zun├Ąchst die Abfrage mit einer info.php gen├╝gen.

Dazu eine PHP-Datei mit folgendem Inhalt erstellen

phpinfo();

Diese ins Rootverzeichnis hochladen und im Browser aufrufen (z.B. http://www.domain.de/info.php). Scrollt man in der ├ťbersicht etwas nach unten erscheint eine ├ťberschrift "apache2handler". In der Zeile "Loaded Modules" sind die Eintr├Ąge mod_gzip bzw. mod_deflate und mod_headers von besonderem Interesse.

Unter dem Eintrag Loaded Modules ist die vom Server genutzte Art der Komprimierung abzulesen.
 

Für die Komprimierung mit dem Apache-Modul Deflate können folgende Anweisungen gelten:


# Insert filter on all content  
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

Für die Komprimierung mit dem Apache-Modul Gzip können die Anweisungen so aussehen:


mod_gzip_on yes
mod_gzip_static_suffix .gz
mod_gzip_can_negotiate yes
AddEncoding gzip .gz
mod_gzip_update_static no
mod_gzip_item_include file \.(php|css|js|html)$
#mod_gzip_item_exclude file \.(css|js)$
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_dechunk yes

Gleichzeitig sind folgende Anweisungen für das Caching und den ETag nützlich:


FileETag None
Header set Vary Accept-Encoding
Header unset LastModified
Header set Vary *
Header append Vary User-Agent env=!dont-vary
Header set Connection keep-alive  
# 1 year

Header set Cache-Control "max-age=29030400,
public"
Header unset ETag

# 1 month

Header set Cache-Control "max-age=2592000,
public"
Header unset ETag

# 1 week

Header set Cache-Control "max-age=604800,
proxy-revalidate"
Header unset ETag

# 1 day

Header set Cache-Control "max-age=86400,
private,
must-revalidate"
  

Zusätzlich können noch die Verfallzeiten für die MIME-Typen angegeben werden:


ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
ExpiresByType text/javascript "access plus 432000 seconds"
ExpiresByType application/javascript "access plus 432000 seconds"
ExpiresByType application/x-javascript "access plus 432000 seconds"
ExpiresByType text/css "access plus 86400 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/ico "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"

Um bei 1und1 die Komprimierung via zlib zu aktivieren wird dort die Erstellung und der Upload einer php.ini-Datei ins Root-Verzeichnis empfohlen.
Diese sieht dann wie folgt aus:

[PHP]
; Output buffering is a mechanism for controlling how much output data (excluding headers and cookies)
; PHP should keep internally before pushing that data to the client.
; If your application's output exceeds this setting, PHP will send that data in chunks of roughly the size you specify.
; Turning on this setting and managing its maximum buffer size can yield some interesting side-effects depending on your application and web server.
; You may be able to send headers and cookies after you've already sent output through print or echo.
; You also may see performance benefits if your server is emitting less packets due to buffered output versus PHP streaming the output as it gets it.
; On production servers, 4096 bytes is a good setting for performance reasons.
; Note: Output buffering can also be controlled via Output Buffering Control functions.
; Possible Values:
;   On = Enabled and buffer is unlimited. (Use with caution)
;   Off = Disabled
;   Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096

; You can redirect all of the output of your scripts to a function.
; For example, if you set output_handler to "mb_output_handler", character encoding will be transparently converted to the specified encoding.
; Setting any output handler automatically turns on output buffering.
; Note: People who wrote portable scripts should not depend on this ini directive.
; Instead, explicitly set the output handler using ob_start().
; Using this ini directive may cause problems unless you know what script is doing.
; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler"
; and you cannot use both "ob_gzhandler" and "zlib.output_compression".
; Note: output_handler must be empty if this is set 'On' !!!
; Instead you must use zlib.output_handler.
; http://php.net/output-handler
;output_handler =

; Transparent output compression using the zlib library
; Valid values for this option are 'off', 'on', or a specific buffer size to be used for compression (default is 4KB)
; Note: Resulting chunk size may vary due to nature of compression.
; PHP outputs chunks that are few hundreds bytes each as a result of compression.
; If you prefer a larger chunk size for better performance, enable output_buffering in addition.
; Note: You need to use zlib.output_handler instead of the standard output_handler, or otherwise the output will be corrupted.
; http://php.net/zlib.output-compression
zlib.output_compression = On

; http://php.net/zlib.output-compression-level
zlib.output_compression_level = 5

; End: