Frage

Wie kann ich messen, wie lange ein Client für eine Anforderung warten muss.

Auf der Serverseite ist es einfach, durch einen Filter zum Beispiel. Aber wenn wir in accout die Gesamtzeit einschließlich Latenz und Datenübertragung nehmen wollen, wird es schwierig zu erheben.

ist es möglich, die zugrunde liegenden Socket zugreifen, um zu sehen, wenn die Anforderung fertig ist? oder ist es notwendig, einige Javascript Tricks zu tun? vielleicht durch Taktsynchronisation zwischen Browser und Server? gibt es für diese Aufgabe keine vorgefertigten Javascripts?

War es hilfreich?

Lösung

Es gibt keine Möglichkeit, Sie wissen, wie lange der Client rein von der Server-Seite warten. Sie werden einige JavaScript benötigen.

Sie wollen nicht die Client- und Server-Uhren synchronisieren, das ist übertrieben. Einfach messen die Zeit zwischen, wenn der Client macht die Anforderung und wenn er seine Antwort beendet angezeigt wird.

Wenn der Client ist AJAX, kann dies recht einfach sein. Ruft new Date () getTime () die Zeit in Millisekunden zu erhalten, wenn der Antrag gestellt wird, und vergleichen Sie es mit der Zeit nach dem Ergebnis analysiert wird. Dann senden Sie an den Server diese Timing-Informationen im Hintergrund.

Für eine nicht-AJAX-Anwendung, wenn der Benutzer auf einer Anfrage klickt, JavaScript verwendete die aktuellen Zeitstempel zu senden (vom Standpunkt des Kunden aus gesehen) an den Server zusammen mit der Abfrage, und übergibt den gleichen Zeitstempel zurück bis zum Client, wenn die resultierende Seite neu geladen wird. In diesem onLoad Handler Seite, messen Sie die verstrichene Zeit, und es dann an den Server zurückschicken -. Entweder eine XmlHttpRequest mit oder auf einem zusätzlichen Argument für die nächste Anfrage an den Server Anheften

Andere Tipps

Wenn Sie es von Ihrem Browser messen jede Client-Anfrage zu simulieren Sie die Netto-Registerkarte in Firebug beobachten können, um zu sehen, wie lange es jedes Stück der Seite nimmt zum Download und den Download-Auftrag.

Sie könnten das HttpServletResponse Objekt wickeln und den Output durch die HttpServletResponse zurückgegeben. Wenn die Ausgabe zu schreiben beginnt, könnten Sie eine startdate gesetzt, und wenn es aufhört (oder, wenn es etc gespült wird) Sie stopDate einstellen.

Damit kann die Zeitdauer berechnen sie an den Client zurück, alle Daten zu streamen nahm.

Wir verwenden es in unserer Anwendung und die Zahlen aussehen vernünftig.

edit: Sie das Startdatum in einem ServletFilter eingestellt können die Länge der Zeit, sich der Kunde wartete. Ich habe Ihnen die Länge der Zeit, die Ausgabe an den Client zu schreiben nahm.

Sie könnten ein 0-Byte-Buchse Sendepuffer gesetzt (und ich genau das nicht empfehlen), so dass, wenn die blockierenden Aufruf zu HttpResponse.send () haben Sie eine nähere Vorstellung, wann das letzte Byte links, aber Fahrzeit ist nicht inbegriffen. Ekk - ich mulmig es auch nur zu erwähnen. Sie können dies mit Steckern spezifischen Einstellungen in Tomcat tun. ( Tomcat 6 Anschluss Dokumentation )

Oder Sie mit irgendeiner Art von JavaScript-Zeitstempel Ansatz kommen können, aber ich würde erwarten, dass die Client-Uhr einzustellen. Mehrere Anrufe an den Web-Server vorgenommen werden müssten.

  • Zeitstempel-Abfrage
  • die reale Anfrage
  • die Daten Berichterstattung

Und dieser Ansatz würde Latenz decken, obwohl Sie noch etwas Jitter Varianz haben.

Hmmm ... interessant Problem haben Sie da. :)

Schauen Sie sich Jiffy-web , von Netflix entwickelt, um ihnen ein mehr zutreffendes Bild von der gesamten Seite -> Seite Rendering-Zeit

Ich hatte das gleiche Problem. Aber das JavaOne Papier hat mir wirklich geholfen, dieses Problem zu lösen. Ich würde Sie bitten durch sie zu gehen und es nutzt im Grunde Javascript, um die Zeit zu berechnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top