JavaScript HTTP Requests in NodeJS langsamer als in Chrome Konsole?

shoa66

Lt. Junior Grade
Dabei seit
Mai 2005
Beiträge
301
Hey Leute,

kurz zum Kontext: Ich entwickle eine sehr zeitkritische Anwendung, die HTTP requests verschickt und auch mit einer API interagiert (POST an die API) und bei der wirklich jede ms zählt (es gilt Daten als erster zu finden und auch als erster zu verarbeiten und daraufhin einen POST abzusetzen)!

Bei der Entwicklung ist mir aufgefallen, dass HTTP Requests die in der Chrome Konsole via Ajax Request ausgeführt werden in der Regel immer 100-300 ms schneller sind als die Requests in NodeJS via request lib:

42f2f42a-e835-4e86-80cc-04d8f6187aab.png


Dies gilt sowohl für die GETS um die Daten zu holen als auch für den POST um Daten zu senden. Natürlich habe ich das mit höherer Samplesize ausprobiert und ausgewertet, der Screen soll nur nen beispielhafter Vergleich sein.
Ausgangs und Zielserver sind immer die selben, der Ping ist konstant usw.

Ich habe schon mit den Headern (insbesondere "Connection": "keep-alive") sowie der Option forever: true, gespielt, doch beides brachte leider keine Verbesserung.

Kann sich das jemand von euch erklären bzw. habt ihr Vorschläge, was man noch probieren könnte?

Leider ist die Lösung mit der Chrome Konsole keine dauerhafte Lösung, da man dort ja nicht wirklich mit den Request Headern arbeiten kann, was ich leider für ein paar Ideen brauche. Oder geht das via Ajax Requests doch irgendwie?

Besten Dank schon mal vorab!

LG,
 

Nafi

Captain
Dabei seit
Feb. 2010
Beiträge
3.204
Wie misst du denn die Dauer, wie lange der Request dauert?

Wieso sollten Request Headers in Chrome nicht setzbar sein?
 

bog

Ensign
Dabei seit
Apr. 2008
Beiträge
254
mal eine detailliertere zeitmessung à la hier probiert?
Zitat von Nafi:
Wie misst du denn die Dauer, wie lange der Request dauert?

Wieso sollten Request Headers in Chrome nicht setzbar sein?
hauptsaechlich aufgrund von CORS. da die devtools im kontext der webseite laufen gelten fuer sie dieselben restriktionen wie fuer scripte auf der webseite, sprich: kein cross origin kram, nur vlgw. wenige header duerfen gesetzt/gelesen werden, etc.
 

shoa66

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Mai 2005
Beiträge
301
Zitat von Nafi:
Wie misst du denn die Dauer, wie lange der Request dauert?

Direkt vor dem Senden des Requests via new Date().getTime(); und direkt nach Empfangen des Requests erneut - und davon dann die Differenz.

Fehler bei der Messung sind aber allein durch die Logik ausgeschlossen (falls du darauf hinaus wolltest), denn wenn man beide Scripts parallel laufen lässt und nur auf den Request counter schaut, sieht man wie das Chrome Konsolen-Script dem NodeJS script "davonläuft" (die Unterschiede beim Counter werden immer höher und NodeJS fällt immer weiter ab, ergo kommen auch faktisch mehr/öfters Requests an).

Zitat von Nafi:
Wieso sollten Request Headers in Chrome nicht setzbar sein?

Sorry, my bad, meinte neben den Headern (die wegen CORS wirklich nur bedingt zu gebrauchen sind), auch noch so fancy und nützliche Sachen wie localAddress bzw. proxy, womit man bei der request lib von NodeJS ganz easy mehrere IP-Adressen nutzen kann... wüsste nicht wie das im Browser funktionieren sollte (bin aber immer offen für Anregungen!).

Zitat von bog:
mal eine detailliertere zeitmessung à la hier probiert?

Schau ich mir mal an, Danke!
 
Top