Что касается Ruby on Rails, при использовании Webrick поддерживает ли он одновременные запросы и Keep-Alive, и почему файлы .js и .png загружаются так медленно?

Я использую Rails 3.0.5, и на консоли сообщается, что страница занимает 60 мс, но если я проверю график времени загрузки Firefox Net, это займет 2,9 секунды. Если я запускаю команду ab в Bash, она говорит, что это занимает 300 мс.

Так вот если убрать стоячие javascripts (их 6), то это занимает 1,9 секунды... но интересно почему так медленно? Разве Keep-alive не соблюдается?

Также странно, что Firefox показывает, что 4 файла загружаются одновременно - я думал, что Webrick поддерживает только одно соединение за раз?

(Изменит ли ситуацию или улучшит ли ее переход на использование mongrel или «thin»?)

также странно, что если я

ab -n 10 -c 5 http://www.somesite.com:8080

это занимает 3 секунды, и чтобы проверить, как поддерживается keep-alive, я использовал опцию -k:

ab -n 10 -c 5 -k http://www.somesite.com:8080

но теперь общее время изменяется с 3 секунд до 4,5 секунд. Разве keep-alive не должно делать это быстрее, и поддерживается ли keep-alive Webrick?

Кроме того, если он поддерживает параллельное соединение, то если какой-то код использует переменную класса для обработки вещей, то не может ли возникнуть состояние гонки? (поскольку содержимое переменной класса остается между запросами)


person nonopolarity    schedule 24.03.2011    source источник


Ответы (2)


Это не совсем ответ на ваш вопрос, но я собираюсь дать вам совет, который, вероятно, сделает ваш вопрос неактуальным.

Webrick не следует использовать в производстве. Он написан на чистом рубине и может обрабатывать только один запрос за раз. Он не предназначен для использования вне режима разработки.

Для производства вы хотите использовать несколько экземпляров thin за обратным прокси-сервером, таким как nginx, или вы можете использовать пассажира, который сделает это за вас (и это то, что большинство людей используют в наши дни).


Чтобы частично ответить на ваши вопросы:

Причина, по которой ab работает быстрее, чем firefox, заключается в том, что запрос файлов css и javascript является функцией браузера. ab измеряет только время отклика сервера, которое не включает отправку изображений, css или js.

Причина, по которой бенчмарк rails составляет всего 60 мс, заключается в том, что он измеряет только время, проведенное в стеке rails. Время, необходимое для отправки запроса пользователю, не учитывается.

Поскольку Webrick не предназначен для производства, меня не удивит, если не будет поддерживаться поддержка активности.

person ryeguy    schedule 24.03.2011
comment
ну, я смотрю на это, чтобы понять это с точки зрения режима разработки - понимание, действительно, является проблемой здесь. - person nonopolarity; 24.03.2011

Если вы хотите запустить одно и то же приложение в двух средах локально, просто сделайте еще одну запись в databases.yml следующим образом:

dev2: адаптер: база данных mysql2: db имя пользователя: имя пароль: wpord! хост: mysql.myexample.com пул: 5 тайм-аут: 5000

а затем запустите rails server -e dev2 --port 3001

Это подходит для меня. А именно, одно и то же приложение, запускаемое локально, подключается к локальной и удаленной базе данных.

person Victor Pudeyev    schedule 14.07.2011