Hallo Linuchs,
um das zu tun, braucht man die gleiche Seite, mit den gleichen Daten, die auf unterschiedliche Art realisiert ist. Andernfalls kommen zu viele Nebeneffekte hinein.
Man muss es auch mit umfangreichen Datenmengen tun, andernfalls ist der Server so fix, dass die Unterschiede im Rauschen des Timers untergehen.
Sicherlich willst Du deine DB und deine Code nicht offenlegen. D.h. man muss sich überlegen, mit welchen öffentlichen Daten man den Test durchführen möchte.
Sodann:
Zu 1: Der Anfrage ist die Uhrzeit des Clients mitzusenden
Das auch, aber vor allem ist die Zeitdifferenz zwischen Client und Server zu bestimmen. Bzw. Client und Server müssen sich mittels NTP an der gleichen Quelle synchronisieren.
Die Differenz zwischen (1) und (2) ist aber eigentlich auch irrelevant. Dieser Teil wird (a) von der gewählten Programmstruktur nicht beeinflusst und dürfte auch nicht durch größere Datenmengen bestimmt werden; es ist nur ein URL Abruf.
- Beginn des Programms auf dem Server
- Ende des Programms auf dem Server (Datenübertragung beginnt)
Diese Identität ist nicht zwingend gegeben. Es ist im Allgemeinen eine gute Architektur, die Datenbeschaffung von der HTML Generierung zu trennen, aber das macht nicht jeder. Gerade, wenn man sehr viele Daten hat und viel HTML ausgibt, kann es der Performance nützen, die Daten zu streamen - also nicht erst alles lesen, sondern so früh wie möglich schreiben, was man hat. Die strukturelle Trennung von Datenbeschaffung und -aufbereitung lässt sich im Programm dann ggf. über Generatoren erreichen (yield-Funktionen). Natürlich geht das nicht immer. Wenn ich vor die Haupt-Datenmenge Informationen schreiben will, die erst nach Ermittlung dieser Datenmenge bekannt sind, muss ich wohl oder übel erstmal lesen.
Hinzu kommt der Effekt einer GZIP Kompression. Ist die eingeschaltet, sendet dein PHP Programm Daten und sie werden vom Server blockweise komprimiert
Letztlich interessiert einen Client
- Wann ist die Response vollständig da
- Wann ist das Rendering fertig.
Ersteres kann man dem Netzwerk-Tab des Browsers entnehmen. Letzteres lässt sich über die Performance-Tools des Browsers bestimmen - oder man macht es so wie ich auf meiner Testseite: Man bringt das HTML ins DOM und schickt danach mit setTimeout(..., 0) ein Event in die Queue, um die Dauer der Layout-Phase zu messen.
Man müsste sich für einen validen Vergleich also erstmal einigen auf
- eine genutzte Datenstruktur in der DB, inclusive der Indexe
- die enthaltenen Daten
- die zu realisierende Ausgabe
Das Ergebnis könnte durchaus interessant sein, der Aufwand wird bei etlichen Wochen liegen. Insbesondere die Konzeptphase.
Rolf
sumpsi - posui - obstruxi