07.10.2009 22:05 von Schnurpselchen in
Blog,
Tips & Tricks,
Wordpress

Daß das Strato-Shared-Webhosting und Wordpress derzeit nicht gut zusammenpassen und warum das so ist, hatte ich vor einiger Zeit geschrieben. Auf Grund der schlechten PHP-Performance dauert das Laden einer Wordpress-Seite mindestens 3,5 bis 4 Sekunden, auch wenn keine umfangreichen Plugins oder fette Themes installiert sind.
In den Google-Webmastertools kann man sich die Ladezeiten in einem Diagramm für die letzten drei Monate ansehen. Die Grafik oben zeigt den Verlauf für meine Seite schnurpsel.de. Bis Mitte Juli hatte ich alles bei Strato in meinem Webhostingpaket liegen. Allerdings nutzte ich bereits zu dieser Zeit eine externe Datenbank (bei Host-Europe), da es zeitweise bei Strato auch erhebliche Probleme mit dem Datenbankserver gab.
Im Juli bin ich dann schließlich mit der Wordpressinstalltion zu All-Inkl umgezogen, hatte aber weiterhin die externe Datenbank bei HE im Zugriff. Der Umzug verlief bis auf die 410-Gone-Panne auch ganz gut. Die Geschwindigkeit hatte sich schon deutlich verbessert. Einen kleinen Performance-Schub gab es dann nochmal Anfang/Mitte September, da hatte ich dann auch die Datenbank zum Webhoster mit der Wordpressinstallation geholt.
Die Geschwindigkeit liegt nun bei 1 bis 1,5 Sekunden für den Seitenabruf. Das ist zwar kein Spitzenwert, aber durchaus akteptabel. Gut, Wordpress ist keine ganz kleine Webapplikation und erfordert schon einiges an Ressourcen vom Webserver, aber trotzdem ist es auch auf mittleren Shared-Webhostingpaketen fernünftig einsetzbar. Dazu muß allerdings der Webserver ordentlich konfiguriert sein. Ich weiß ehrlich gesagt nicht, was da bei Strato die PHP-Performance so ausbremst, normal ist das aber nicht. Selbst auf einem vergleichbaren 1&1-Paket ist WP schneller, und 1&1 gilt allgemein auch nicht grad als Gschwindigkeits-Überflieger.
Man kann nur hoffen, daß sich da bei Strato mal etwas tut, vielleicht ja unter der Regie eines möglichen, neuen Besitzers.
0 Kommentare »
02.07.2009 16:05 von Schnurpselchen in
Blog,
Konfiguration,
Wordpress
Eigentlich müßte ich besser sagen, was ist kein Grund dafür, daß Wordpress beim Strato-Shared-Webhosting so langsam ist. Denn an einer vermeintlich schlechten Datenbankanbindung bzw. Datenbankperformance, wie man es oft in Foren oder auf Blogs lesen kann, liegt es nicht.
Datenbankgeschwindigkeit, der Test
Bei Wordpress kann man sich alle Datenbankabfragen als SQL-String mit Ausführungszeiten und Aufrufhierarchie in Datenbank-Objekt unter $wpdb->queries speichern lassen. Dazu muß man in der wp-config.php die Konstante ‘SAVEQUERIES’ mit true definieren:
define( 'SAVEQUERIES', true );
Genau das habe ich für die Startseite von schnurpsel.de gemacht und mir die Daten als PHP-Array in eine Datei geschrieben:
global $wpdb;
ob_start();
var_export( $wpdb->queries );
$out1 = ob_get_contents();
ob_end_clean();
plw123_debugfile_write( $out1 );
Diese Liste mit 51 SQL-Abfragen habe ich in ein einfaches PHP-Skript eingebunden und arbeite die Abfragen hintereinander ab. Es wird zunächst ein Connect zur Datenbank ausgeführt und anschließend folgende Schleife durchlaufen:
foreach( $sql_queries as $query ) {
$dbd = @mysql_query( $query[0], $dbh );
while( $row = @mysql_fetch_object( $dbd ) ) {
$last_result[$num_rows] = $row;
$num_rows++;
}
@mysql_free_result( $dbd );
$num_queries++;
}
Es werden natürlich nicht nur die SQL-Abfragen ausgeführt, sondern auch die Ergebnisdatensätze mit mysql_fetch_object abgeholt. Nur die Ausgabe der Daten spare ich mir, das hat dann aber sowieso nichts mehr mit der Datenbank zu tun.
Datenbankgeschwindigkeit, das Ergebnis
Mal von ein paar Lastspitzen abgesehen, werden die 51 Abfragen und 539 Ergebnisdatensätze vom Strato MySQL 5 Server in etwa 0,2 Sekunden abgearbeitet. Man kann das hier [test-db-mysql5] live testen.
Ich habe das auch mal mit MySQL 4 probiert, da sind die Werte sogar noch etwas besser und liegen meist bei 0,1 Sekunden oder darunter [test-db-mysql4].
Und als dritten Test habe ich eine externe Datenbank (bei Host-Europe) eingebunden [test-db-ext]. Die 0,5 bis 0,6 Sekunden sind gar nicht mal so schlecht wenn man bedenkt, daß alle Daten über das Internet von Strato (Karlsruhe/Berlin) zu Host-Europe (Köln) und wieder zurück befördert werden müssen.
Mein Fazit
Die schlechte Geschwindigkeit von Wordpress (und anderen umfangreichen PHP-Applikationen wie z.B. Joomla) liegt ursächlich nicht an einer schlechten Datenbankperformance, sondern vielmehr an einem nicht besonders schnellen Webserver/PHP.
Was hier nun im einzelnen das Problem ist, kann ich nicht sagen. Ein Geschwindigkeits-Nachteil ist sicher die Tatsache, daß PHP bei Strato als CGI läuft. Das bedeutet, daß für jeden Seitenaufruf ein neuer PHP-Prozeß gestartet werden muß. Konfigurationen, bei denen PHP als Apache-Modul läuft, haben da natürlich einen Geschwindigkeitsvorteil.
Vielleicht muß ja auch jede PHP-Datei bei Strato erst einen Sicherheitcheck durchlaufen, bevor sie geladen wird oder was auch immer.
Ein weiterer Hinweis für die mäßige PHP/Webserver-Performance sind auch die nicht besseren Ladezeiten des Strato Weblog-Basic, denn da ist überhaupt kein MySQL-Datenbankserver im Spiel. Die Daten liegen auf dem Webspace des Users und werden per SQLite eingebunden.
Trotz eigentlich nicht schlechter MySQL Datenbankgeschwindigkeit wird meine Startseite hier nicht schneller als in etwa 3,5 Sekunden geladen, dabei verwende ich fast eine WP-Standardkonfiguration ohne umfangreichen Plugins.
Meine Ausführungen tragen zwar nicht zur Lösung des Geschwindigkeitsproblems bei, aber vielleicht zum Verständnis der Ursache und Problematik an sich.
25 Kommentare »
19.06.2007 17:04 von Schnurpselchen in
Blog,
Tips & Tricks
Manchmal denkt man, man glaubt es kaum. Aber eben grade habe ich beim Rumexperimentieren bemerkt, daß Strato doch tatsächlich für die sonst eher etwas minderbemittelten PowerWeb-Pakete das memory_limit auf 16M erhöht und den safe_mode ausgeschaltet (off) hat. Jetzt fehlt nur noch, daß mod_rewrite unterstütz wird, dann sind einige Probleme mit Strato und Wordpress wohl Zeitgeschichte.
In den FAQ steht es auch schon drin, zumindest beim ‘Wert’, die ‘Beschreibung’ ist noch nicht ganz passend. Wundert mich nur, daß die daß nicht an die große Glocke hängen, als Meldung auf Seite 1 oder so:
“Strato PowerWeb-Pakete mit mehr Power, jetzt 16MB Speicher und kein SafeMode für PHP”
Oder hab ichs etwa übersehen?
0 Kommentare »
08.06.2007 14:57 von Schnurpselchen in
PHP
Jaja, das kommt vom Kopieren und Einfügen, auch als “Copy&Paste” bekannt. Da wundere ich mich, was denn der PHP-Interpreter an dieser Stelle wohl nicht mag (Zeile 2):
<?php
function $plw123_debugfile_open() {
global $plw123_debugfile;
$plw123_debugfile = fopen( 'plw123_debugfile.txt', 'a' );
$plw123_debugfile_write( "***** Debugfile open *****" );
}
...
Sieht doch gut aus. Aber bei PHP ist es nun mal so, das alles was mit einem $ beginnt, als Variable interpretiert wird. Und ein Funktionsname darf deshalb niemals nicht mit einem $-Zeichen beginnen.
Im Übereifer hatte ich nicht nur bei den Variablen, sondern auch bei den Funktionsnamen das ‘$plw123_’ dran kopiert, obwohl es da nur das ‘plw123_’ hätte sein dürfen.
0 Kommentare »