Da meine WordPress-Installation mit dem Standard-Template bei dem Webhoster Strato ziemlich langsam war und ich Ladezeiten von 5-6 Sekunen pro Seitenaufruf hatte, musste ich mich auf die Suche nach der Quelle des Performance-Engpasses machen.
Langw Ladezeiten können verschiedene Ursachen haben:
- Webserver ist überlastet und liefert Daten zu langsam aus
- Webserver ist überlastet und verarbeitet Daten zu langsam
- Datenbankserver ist überlastet und verarbeitet Daten zu langsam
Punkt 1 kann man einfach durch einen Dateidownload testen, ist dieser wesentlich kleiner als die möglich Bandbreite der eigenen DSL-Leitung, ist der Server wohl allgemein überlastet. Weiters kann nach Punkt 2 im Falle eine Scriptsprache, das entsprechende Modul ausgelastet sein. Bei WordPress wäre das die PHP-Verarbeitung auf dem Webserver. Bei einem Hosting bei Strato gibt es einen separaten Server für die Datenbank MySQL, diese kann nach Punkt 3 auch überlastet sein. Wo der Hund vergraben liegt, kann nun genauer getestet werden.
MySQL Benchmark Script
Hier habe ich bei einer Suche nach „mysql speed test“ oder „mysql benchmark script“ nicht viel brauchbares gefunden, was sich direkt von PHP aus starten lässt. Also habe ich was kleines selbstgebastelt, was auf einer MySQL-Benchmark-Funktion beruht. Meine Ergebnisse:
- 5,8 s lokal mit XAMPP
- 1,0 s Dedicated Webserver
- 0,2 s Strato BasicWeb XL Webspace
Wie hier klar zu sehen ist, ist der MySQL Server in XAMPP standardmäßig wohl sehr schlecht konfiguriert. Der MySQL-Server rdbms.strato.de von Strato liefert sehr gute Ergebnisse, was zeigt, dass die langen Ladezeiten bei Strato nicht mit dem Datenbankserver zusammenhängen.
PHP Code für MySQL Benchmark Script
Vorher die MySQL Table nach dem Code in den Kommentaren anlegen und die MySQL Verbindungsdaten in das Script eintragen, als PHP File dann vom Webserver starten.
/*
PHP Script to benchmark a MySQL-Server
(c) www.webdesign-informatik.deSQL Code for Testtable:CREATE TABLE IF NOT EXISTS `mytable` (
`mycol` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `mytable` (`mycol`) VALUES (23);
*/
$db_server = 'localhost';
$db_user = 'root';
$db_pw = '';
$db_name = 'test';$timeStart = microtime_float();
$link = mysql_connect($db_server, $db_user, $db_pw);
mysql_select_db($db_name, $link);
$query = "SELECT BENCHMARK(1000000,ENCODE('hello','goodbye'));";
$result = mysql_query($query, $link);
$query = 'BENCHMARK(10000, (SELECT * FROM mytable)';
$result = mysql_query($query, $link);
$timeEnd = microtime_float();
echo "Time: ".($timeEnd - $timeStart)." s";
mysql_close($link);
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
PHP Benchmarking Script
Um die Ladezeiten von PHP aus einem Host zu messen, habe ich ein PHP Benchmark Script gefunden, was gute Dienste erwies. Es führt einige Mathematik- und Stringberechnungen druch. Hier meine Ergebnisse als grobe Vergleichsgrundlage, entscheidend für die Performance ist natürlich die eigene Hardware und Konfiguratio.
- 70 ms lokal mit XAMPP
- 80 ms Dedicated Webserver
- 515 ms Strato BasicWeb XL Webspace
- 31 ms Strato BasicWeb XL nach internem Webspace Umzug
Ja, richtig gelesen, nach dem Betätigen der unscheinbaren Funktion „Webspace auf schnelleren Server umziehen“, die mir nur durch Zufall im Loginbereich aufgefallen ist, habe ich einen Super Speed bei Strato, wahrscheinlich weil ich mir die Ressourcen noch nicht mit Millionen anderen Usern teilen muss. Mal schauen wie lange das so bleibt. So ist es jedenfall akzeptabel! WordPress-Seitenaufruf in ~2 Sekunden, was nur noch an der langsamen WordPress-Programmierung liegt.