Ответ POST занимает слишком много времени

Код Ajax Javascript на стороне клиента использует XMLHttpRequest для отправки запроса POST, но я получаю задержку в 0,5 секунды при получении ответа, и я пытаюсь выяснить, почему, так как я хотел бы, чтобы это было быстрее, больше похоже на 0,2 секунды. Обе конечные точки находятся в одной и той же интрасети, клиент напрямую подключен через Ethernet, а сервер использует 802.11b.

С помощью Wireshark я перехватил следующие TCP-транзакции:

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

Фактический пост и ответ очень короткие. В основном содержание POST-запроса:

cmd=getCurXY&chan=CH_L_JX

И содержание ответа, которое я отправляю прямо сейчас, просто:

cmd=noresponse

Ответ отправляется как Transfer-Encoding: chunked.

Можно ли как-то ускорить эту транзакцию?
Зачем ей целых полсекунды?


person apalopohapa    schedule 24.06.2009    source источник
comment
Вы пробовали подключаться напрямую через Ethernet? Действительно кажется странным, что стек TCP фрагментирует пакеты - неправильно настроен MTU?   -  person qdot    schedule 06.05.2011


Ответы (1)


Прежде всего, я настоятельно рекомендую вам добавить этот драгоценный камень в драгоценные камни вашей группы разработки в вашем gemfile.

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

Это позволяет вам отслеживать временные транзакции, когда вы реализуете запросы AJAX или любые запросы из веб-браузера. Также помните, что Webrick (сервер разработки по умолчанию, используемый Rails) является довольно медленным сервером разработки, поэтому, если вы можете, я рекомендую вам использовать Puma в качестве сервера разработки и Unicorn в качестве сервера разработки.

Кроме того, вам действительно нужно использовать контроллер Rails для управления этими запросами? Очень хорошей реализацией для таких проектов является использование промежуточного программного обеспечения. Это по-прежнему рубиновый код, но он не загружает все функции Rails, что делает ответы более быстрыми. Дополнительную информацию можно найти на странице http://railscasts.com/episodes/319-rails-middleware-walkthrough

С Уважением.

person Core2Juan    schedule 01.11.2013