Hallo Jörg,
Mein größeres Problem ist eher, dass ich mich nicht wirklich auf den Server "verlassen kann". Soll heißen, die Messungen selber sind schlicht nicht reproduzierbar
Das ist natürlich Käse. Du hast aber Anfang-zu-Ende Messungen im PHP drin, und die liefern die monströsen Schwankungen. Das schließt schonmal eine Menge von infrastrukturellen Problemen aus:
- Verbindungszeit Browser -> Server
- Wakeup-Zeit Apache
- Request Queueing (der Apache bzw. ein FastCGI Prozess kann nur eine gewisse Anzahl von PHP Requests gleichzeitig bedienen; ist es zu viel, müssen neue Requests warten)
- Wakeup-Zeit PHP (welche es bei einem ordentlichen Server eh nicht geben sollte)
- Verbindungszeit Server -> Browser
Dann schriebst Du:
Es sind aber zu viele Codezeilen, um jede Query oder ´jede php-Anweisung einzeln zu hinterfragen, bevor ich mich nicht in Richtung der Codepassage angenähert habe, die hier so stockt.
Und das ist nun das Entscheidende. Du musst die Knackpunkte finden, und das geht nur mit Kenntnis deines Codes.
Für das Sammeln der Profiling-Punkte solltest Du entweder ein globales Array anlegen, oder eine statische Klasse definieren (also eine Klasse ohne Instanz, die nur static-Methoden und -Properties enthält). Am Ende des Requests stoppst Du die Uhr und haust alle gesammelten Messpunkte in den Footer der Antwortseite. Das stellt sicher, dass Du nicht Messungen verschiedener Requests in einer Datei vermengst und die auseinander dröseln musst.
Wenn Du einen Autoloader für Klassen verwendest und den im Sourcecode hast: Messpunkte für das Autoloading schreiben. "Load class XY" - "Class XY loaded"
Hoffentlich holst Du Dir nur einmal eine DB-Verbindung. Vorher/Nachher.
Und dann teile deinen Code grob in 2-3 gleichgroße Abschnitte und schreibe Messpunkte, wenn Du dahin kommst. Die Hoffnung wäre, dass Du einen Abschnitt findest auf den sich der Zeitverlust konzentriert.
Bei einem Shared Hoster wäre meine Befürchtung allerdings, dass der Webserver oder der DB Server überlastet ist und generell zu langsam antwortet. Die overcommitten gerne ihr Blech und stellen nicht genug davon hin. Dann hilft nur meckern meckern meckern bei der Hotline - mit etwas Glück bekommst Du dann das Flag "sensibler user, nicht auf überlastete Server legen".
Oder dein Hosting-Angebot ist zu billig. Wat nix kost, dat taugt nix 😉
Rolf
sumpsi - posui - obstruxi