Серьезная задержка Rails в командах AJAX

#ruby-on-rails #jquery

#ruby-on-rails #jquery

Вопрос:

У меня есть этот список удаленных ссылок. При нажатии на одну из них обновляются два divs, каждый со своим собственным partial.

_printing.html.erb

 <%= link_to printing.name, printing, :remote => true %>
  

материалы для печати/show.js.erb

 jQuery('#render').html( "<%= escape_javascript(render "render",:printing=>@printing) %>" );
jQuery('#info').html( "<%= escape_javascript(render "info",:printing=>@printing) %>" );
  

При нажатии на ссылку требуется некоторое время для замены divs. Этот пример занял 15 секунд, прежде чем был заменен. Я рассчитал это с помощью часов. Но журнал рассказывает другую историю.

 Rendered printings/_render.html.erb (22.7ms)
Rendered printings/_info.html.erb (39.7ms)
Rendered printings/show.js.erb (73.6ms)
Completed 200 OK in 978ms (Views: 457.7ms | ActiveRecord: 40.6ms)
  

Таким образом, серьезная задержка возникает в двух случаях. Первый: почему сумма приведенных выше значений настолько невероятно велика?
И, во-вторых, почему я жду 15 секунд, но журнал сообщает мне, что это заняло меньше секунды?

Комментарии:

1. Что засовывается в html()? Сколько данных? Допустимый ли это HTML? Вот в чем ваша проблема, а не в сервере, генерирующем файл.

2. Посмотрите, что Firebug или аналогичный инструмент говорит вам — возможно, это не проблема на стороне сервера.

Ответ №1:

Итак, здесь есть несколько возможностей. Это может быть проблема с задержкой (Firebug или инструменты Safari / Chrome inspector покажут это), какая-то проблема в javascript, которая замедляет цикл событий (это маловероятно, но возможно, вы можете пошагово просмотреть код в отладчике JS), или это может быть связано с производительностью веб-сервера. время отклика в 1 секунду невелико, и просмотр журнала показывает вам только часть истории. В дополнение к времени, затраченному на запрос (который отображается), запрос может быть значительно задержан другими запросами в очереди. В режиме разработки работает сервер с одним процессом, поэтому каждый запрос должен выстраиваться в очередь для обслуживания. Если вы используете Webrick, то с точки зрения производительности все ставки отменяются, но это легко решить, установив mongrel или thin.

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

Ответ №2:

Разница во времени отклика может быть связана с тем, что браузер медленно распаковывает архивированные запросы AJAX.

Рассмотрите возможность тестирования отключения сжатия для этих запросов ajax. Смотрите http://public.ok2life.com/welcome/index/86 для получения подробной информации.