Messung der Downloadgeschwindigkeit Ruby

360
Elaheh kamaliha

Das Abfrageergebnis wird in einer Datei auf der Serverseite zwischengespeichert. Wenn eine neue Abfrage gesendet wird, sucht der Webservice nach einer Antwort in einer der zwischengespeicherten Dateien. Wenn ja, wird die Datei gesendet. Wenn nicht, wird das Ergebnis generiert und an den Client gesendet. Wenn nun die zwischengespeicherte Datei gesendet wird, ist das Herunterladen wesentlich schneller (verglichen mit dem Generieren des Ergebnisses und dem Senden im String-Format). Mit Downloadzeit meine ich (die Gesamtzeit, die der Benutzer auf die Antwort wartet) - (Zeit, die für die Verarbeitung auf dem Server aufgewendet wurde)

Hast du eine Ahnung was der Grund ist? Oder einen Vorschlag, wie ich es herausfinden kann?

Der Webservice ist in Ruby geschrieben und der Client ist in Javascript.

1

1 Antwort auf die Frage

2
tadman

Das Senden einer Datei wird vom Betriebssystem übernommen. Der Inhalt wird einfach in den Socket eingeklemmt und erfordert keinen zusätzlichen Aufwand für Ihre Anwendung. Es ist buchstäblich Feuer und Vergessen.

Das Senden eines Datenstroms vom Datenbankserver ist erheblich komplizierter. Die Abfrage muss zusammengestellt, codiert, über den Socket gesendet, vom Server interpretiert und ausgeführt werden. Die Ergebnismenge muss erneut codiert und über das Kabel zurückgesendet werden. Vielleicht ziehen Sie diese Zeit von Ihrer Berechnung ab, aber es ist nicht klar.

Sobald der Client das Ergebnis erhalten hat, muss er es vom Socket ablesen, in Ruby-Objekte konvertieren, möglicherweise Modelle, die noch mehr Aufwand verursachen, und das Ergebnisobjekt an die anfordernde Methode zurückgeben. Wenn Sie sie dann in ein Ergebnis re-serialisieren, müssen sie diese Daten ein zweites Mal in den Ausgabestrom kopieren.

Zusammengefasst also das Lesen aus einer bereits vorhandenen Datei: Null Lesen, Null Kopien.

Lesen aus der Datenbank: Ein Lesevorgang, zwei Kopien.

danke tadman. Ich sollte darauf hinweisen, dass ich die auf dem Server verbrachte Zeit bereits abziehe. Und auch wenn der Client sie erhält, berechne ich die Zeit, bevor er irgendetwas tut (z. B. in Objekte konvertieren, ...). In beiden Fällen werden Daten im JSON-Format gesendet. Elaheh kamaliha vor 11 Jahren 0