Die Geschwindigkeit, wie lange es dauert, eine Webseite aufzurufen ist nicht nur für die Nutzererfahrung wichtig. Auch das Ranking in Suchmaschinen kann dadurch beeinflusst werden.
Suchmaschinen möchte ihre Nutzer natürlich auch lieber an schnelle und gut funktionierende Webseiten schicken, als an lahme Krücken.
Und Besucher kommen auch eher freiwillig wieder, wenn die Webseite schnell und zuverlässig funktioniert.
Wenn Sie zum Beispiel ein Forum Betreiben, dann möchte kein Besucher bei jedem Klick Sekunden (gefühlte Ewigkeit) warten müssen, bis die nächste Seite aufgeht.
Google hat für das Messen der Geschwindigkeit des Aufbaus einer Webseite ein Tool.
Den Pagespeed Checker.
Der Traumwert jedes Webseitenbetreibers ist natürlich in den Grünen Bereich zwischen 90 und 100 zu kommen.
Der Pagespeed Checker unterscheidet bei dem Test zwischen Mobile Gerät und Desktop (Also PC/Laptop).
Der Mobile Test ist meist niedriger, als der vom Desktop.
Das liegt daran, dass beim Mobil Test, ein Mittelklasse-Mobiltelefon mit Mobilfunk Geschwindigkeit simuliert wird.
Ein Smartphone hat nicht so viel Rechenleistung wie ein PC und die Internetgeschwindigkeit ist oft auch langsame als eine Standleitung zu Hause oder im Büro.
Das hier sind die Werte die meine Webseite erreicht
Mobil:
Desktop:
100 hab ich selbst noch nie erreicht. Das geht wohl mit einer einfachen statischen Webseite, die nur Text enthält.
Mit WordPress, das im Hintergrund Daten aus eine Datenbank lädt und jede Menge CSS und Javascript Code beinhaltet, wird das schon schwieriger.
Diese Werte erreicht man auch nicht ohne Cache Plugins und anderem Feintuning.
Ohne Caching mit WordPress-Plugins und Apache Caching, hatte ich eher so um die 45 erreicht.
Aber wie komme ich mit dieser Webseite auf solche Werte.
Zunächst, diese Webseite läuft auf einem physischen Server in einem Rechenzentrum in Deutschland.
Der Server hat einen AMD Ryzen 5 3600 Prozessor, 64 GB DDR4 RAM und eine NVMe SSD Festplatte.
Und diese Hardware steht nur mir zur Verfügung. Der Server wir mit niemand anderen geteilt.
Es laufen schon noch anderen Webseiten und Mailserver Dienste darauf. Aber dafür hat er mehr als genug Ressourcen.
Also, wenn man seine Webseite bei einem Hoster betreibt und dafür 4 Euro im Monate bezahlt, wird man evtl. diese Werte nicht erreichen können, weil diese Server von den Hosting Providern viele Webseiten hosten und man sich die Ressourcen mit den andern teilen muss.
Oft sind diese Server auch noch virtualisiert.
Mit virtuellen Root Server habe ich gute und weniger gute Erfahrungen gemacht. Virtuelle Server laufen auf physischen Servern. Auch hier müssen sich die virtuellen Server die Ressourcen des physischen Servers teilen. Da kann es auch zu Lastspitzen und CPU, Speicher oder I/O Engpässen auf den Disken kommen.
Ich hatte flotte virtuelle Server, aber mit langsamer Internetanbindung und vServer mit schnellem Internet aber immer wieder Probleme mit der Auslastung.
Zurück zu meinem Pagespeed Ergebnis
Um das zu erreichen, musste ich die WordPress-Plugins
Jetpack von WordPress.com
WP Super Cache
Autoptimize
installieren und den Apache Disk Cache aktivieren (Ob das bei dem jeweiligen Hosting Anbieter möglich ist, muss man evtl. anfragen)
In Jetpack (Man muss sich dafür bei WordPress.com anmelden) nutze ich diese Einstellung:
Die ist eine Art CDN (Content Delivery Network). Das bedeutet, das Bilder und statische Seiten auf den Servern von WordPress.com rund um die Welt gehostet werden können. Dadurch sind diese Seiten auch aus anderen Ländern schneller abrufbar. Ein Besucher aus z.B. Australien lädt diese Seite dann nicht vom Server in Deutschland, sondern von einem WordPress.com Server, der in Australien steht.
Das WP Super Cache Plugin hat folgenden Einstellungen:
Und Autoptimize folgende:
Wer seinen Apache Webserver selbst betreibt, kann noch das Disk Cache Modul aktivieren.
Befehl: a2enmod cache_disk
Aber Achtung. Damit WordPress mit dem Apache Cache richtig funktioniert, muss in der .htaccess Datei von WordPress folgendes geändert werden.
#RewriteRule . /index.php [L]
RewriteRule ^(.*)$ /index.php/$1 [L]
Wenn man das nicht ändert, wird man ein „wirres“ Verhalten feststellen. Die Startseite ist plötzlich irgendein Blogeintrag usw.
Die Apache Disk Cache Konfiguration
Das mod_cache bzw. mod_cache_disk Modul ist bei mir so konfiguriert:
/etc/apache2/mods-enabled/cache_disk.conf
<IfModule mod_cache.c>
CacheQuickHandler Off
CacheHeader Off
CacheDetailHeader Off
CacheIgnoreNoLastMod On
CacheDefaultExpire 180
CacheMinExpire 5
CacheStoreExpired Off
CacheLastModifiedFactor 0.5
CacheIgnoreCacheControl On
CacheIgnoreHeaders Set-Cookie Cookie
CacheLock on
CacheLockMaxAge 5
CacheDisable /wp-admin
CacheDisable /wp-content
CacheDisable /wp-login.php
CacheDisable /wp-cron.php
SetOutputFilter CACHE
AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/rss+xml text/xml image/svg+xml
<IfModule mod_cache_disk.c>
CacheRoot /var/cache/apache2/mod_cache_disk
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
CacheMaxFileSize 20000000
</IfModule>
</IfModule>
Mit diesen Einstellungen sollte der PageSpeed Test deutlich bessere Werte liefern.
Nachwort
Der „Mobil“ Wert kann aber bei jedem Test stark variieren.
Der „Desktop“ Test schwankt nicht so stark zwischen den Tests.
Ergänzung: Apache Benchmark
Hier noch ab (Apache Benchmark) Tests:
Ergebnis mit WordPress Cache und Apache Disk Cache:
ab -k -n 1000 -c 10 "https://hummel-web.at/"
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking hummel-web.at (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache
Server Hostname: hummel-web.at
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Server Temp Key: X25519 253 bits
TLS Server Name: hummel-web.at
Document Path: /
Document Length: 45081 bytes
Concurrency Level: 10
Time taken for tests: 0.125 seconds
Complete requests: 1000
Failed requests: 0
Keep-Alive requests: 998
Total transferred: 45574227 bytes
HTML transferred: 45081000 bytes
Requests per second: 7977.41 [#/sec] (mean)
Time per request: 1.254 [ms] (mean)
Time per request: 0.125 [ms] (mean, across all concurrent requests)
Transfer rate: 355043.17 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 8
Processing: 0 1 1.1 1 9
Waiting: 0 1 1.1 1 9
Total: 0 1 1.3 1 9
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 2
90% 2
95% 4
98% 5
99% 8
100% 9 (longest request)
Test nur mit WordPress Cache:
ab -k -n 1000 -c 10 "https://hummel-web.at/"
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking hummel-web.at (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache
Server Hostname: hummel-web.at
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Server Temp Key: X25519 253 bits
TLS Server Name: hummel-web.at
Document Path: /
Document Length: 45081 bytes
Concurrency Level: 10
Time taken for tests: 7.558 seconds
Complete requests: 1000
Failed requests: 0
Keep-Alive requests: 996
Total transferred: 45729227 bytes
HTML transferred: 45081000 bytes
Requests per second: 132.32 [#/sec] (mean)
Time per request: 75.575 [ms] (mean)
Time per request: 7.558 [ms] (mean, across all concurrent requests)
Transfer rate: 5909.01 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.7 0 12
Processing: 51 74 17.4 67 173
Waiting: 49 71 16.6 64 162
Total: 51 74 17.4 67 175
Percentage of the requests served within a certain time (ms)
50% 67
66% 72
75% 78
80% 83
90% 100
95% 114
98% 125
99% 134
100% 175 (longest request)
Test ohne Caching:
ab -k -n 1000 -c 10 "https://hummel-web.at/"
This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking hummel-web.at (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache
Server Hostname: hummel-web.at
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Server Temp Key: X25519 253 bits
TLS Server Name: hummel-web.at
Document Path: /
Document Length: 93257 bytes
Concurrency Level: 10
Time taken for tests: 10.994 seconds
Complete requests: 1000
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 94020000 bytes
HTML transferred: 93257000 bytes
Requests per second: 90.96 [#/sec] (mean)
Time per request: 109.936 [ms] (mean)
Time per request: 10.994 [ms] (mean, across all concurrent requests)
Transfer rate: 8351.81 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 0.8 2 10
Processing: 75 107 24.8 95 232
Waiting: 73 104 24.3 92 229
Total: 77 109 24.9 97 234
Percentage of the requests served within a certain time (ms)
50% 97
66% 107
75% 120
80% 127
90% 147
95% 163
98% 180
99% 189
100% 234 (longest request)
Also man erkennt sehr gut, wie viel der Apache Disk Cache bringt.
Der Cache von NGINX wird vermutlich sogar noch bessere Werte liefern.