2009-06-24 10 views
4

Client-Seite Ajax JavaScript-Code verwendet XMLHttpRequest, um eine POST-Anfrage zu senden, aber ich bekomme wie eine Verzögerung von 0,5 Sekunden in die Antwort und ich versuche herauszufinden, warum, da ich würde mag es, schneller zu sein, mehr wie 0,2 Sekunden. Beide Endpunkte befinden sich im selben Intranet, der Client ist direkt über Ethernet und der Server über 802.11b verbunden.POST-Antwort dauert zu lang

Wireshark schnupperte ich die folgenden TCP-Transaktionen:

 
Time(ms)  From   To    Info 
------------------------------------------------------------------------ 
0.0   client  server   [SYN] 
11.7   server  client   [SYN,ACK] 
11.8   client  server   [ACK] 
12.0   client  server   [POST] 
12.1   client  server   Continuation 
39.0   server  client   ACK 
46.0   server  client   ACK 
150.0  server  client   TCP segment of reassembled PDU 
311.0  client  server   ACK 
324.0  server  client   HTTP/1.1 200 OK (text/html) 
512.0  client  server   ACK 

Die eigentliche Post und Antwort sind wirklich kurz. Grundsätzlich ist der Inhalt der POST-Anforderung ist:

cmd=getCurXY&chan=CH_L_JX 

Und der Inhalt der Antwort, dass ich jetzt bin das Senden ist einfach:

cmd=noresponse 

Die Antwort als Transfer-Encoding: chunked gesendet wird.

Kann diese Transaktion in irgendeiner Weise beschleunigt werden?
Warum braucht es eine ganze halbe Sekunde?

+2

Sie sollten einen Code eingeben – stevedbrown

+0

Haben Sie versucht, direkt über Ethernet zu verbinden? Es ist wirklich seltsam, dass der TCP-Stack die Pakete fragmentiert - MTU falsch konfiguriert? – qdot

Antwort

0

Firstable Ich empfehle Ihnen dringend, dieses Juwel zu Ihrer Entwicklungsgruppe in Ihrer Edelsteindatei hinzuzufügen.

Es ermöglicht Ihnen, Zeittransaktionen zu verfolgen, wenn Sie AJAX-Anforderungen oder irgendeine Art von Anfrage von einem Webbrowser implementieren. Bedenken Sie auch, dass Webrick (von Rails verwendeter Standard-Entwicklungsserver) ein ziemlich langsamer Entwicklungsserver ist. Wenn Sie also Puma als Entwicklungsserver und Unicorn als Produktivserver verwenden können, empfehlen wir Ihnen.

Benötigen Sie auch wirklich einen Rails Controller, um diese Anfragen zu verwalten? Eine sehr gute Implementierung für diese Art von Projekten ist die Verwendung einer Middleware. Es ist immer noch Ruby-Code, aber es lädt nicht alle Rails-Funktionen, die Antworten schneller machen. Weitere Informationen finden Sie unter http://railscasts.com/episodes/319-rails-middleware-walkthrough

Grüße.

Verwandte Themen