Webseite tunen – Google Pagespeed über 90 Punkte

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:

Jetpack 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.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Christian Hummel