2009-06-24 12 views
4

Le code JavaScript Ajax côté client utilise XMLHttpRequest pour envoyer une requête POST, mais je reçois un délai de 0,5 seconde pour obtenir la réponse et j'essaie de savoir pourquoi comme pour être plus rapide, plus comme 0,2 secondes. Les deux points d'extrémité sont dans le même intranet, le client est directement connecté via Ethernet et le serveur utilisant 802.11b.Réponse POST trop longue

En utilisant Wireshark Je reniflé les transactions TCP suivantes:

 
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 

Le poste réel et la réponse sont très courts. Fondamentalement, le contenu de la requête POST est:

cmd=getCurXY&chan=CH_L_JX 

Et le contenu de la réponse que je vous envoie est en ce moment simplement:

cmd=noresponse 

La réponse est envoyé comme Transfer-Encoding: chunked.

Cette transaction pourrait-elle être accélérée d'une manière ou d'une autre?
Pourquoi a-t-il besoin d'une demi-seconde?

+2

Vous devez inclure du code – stevedbrown

+0

Avez-vous essayé de vous connecter directement via Ethernet? Il semble vraiment étrange que la pile TCP fragmente les paquets - MTU mal configuré? – qdot

Répondre

0

D'abord je vous recommande fortement d'ajouter cette gemme à vos gemmes de groupe de développement dans votre gemfile.

group :development, :test do 
    gem 'rack-mini-profiler' 
end 

Il vous permet de suivre les transactions en temps lorsque vous implémentez les requêtes AJAX ou tout type de demande d'un navigateur Web. Rappelez-vous également que Webrick (serveur de développement par défaut utilisé par Rails) est un serveur de développement assez lent, donc si vous le pouvez, je vous recommande d'utiliser Puma comme serveur de développement et Unicorn comme serveur de production.

De même, avez-vous vraiment besoin d'utiliser un contrôleur Rails pour gérer ces demandes? Une très bonne implémentation pour ce genre de projets est d'utiliser un middleware. C'est toujours du code ruby ​​mais il ne charge pas toutes les fonctionnalités de Rails, ce qui rend les réponses plus rapides. Vous pouvez trouver plus d'informations dans http://railscasts.com/episodes/319-rails-middleware-walkthrough

Cordialement.

Questions connexes