Почему мой сайт синатры такой медленный? - PullRequest
11 голосов
/ 25 января 2010

Задав этот вопрос, Я начал использовать Синатру как способ обслуживания веб-страниц.

Этим вечером мы с другом начали проверять скорость сервера.

Файл для входа выглядит так:

require 'rubygems'
require 'sinatra'
require 'haml'

enable :sessions #for cookies!

get '/' do 
  haml :index 
end

И index.haml выглядит так:

%title
  First Page

%header 
  %h2 First Page

Он сидит на недавнем ноутбуке, как и я, с маршрутизатором Apple 802.11n между нами двумя. Мы оба работаем под управлением Windows 7. Я также пробовал эти файлы на ноутбуке под управлением Ubuntu 9.10 x64 с Sinatra и всеми соответствующими файлами, установленными из apt-get.

Синатре требуется 7 секунд для обработки одностраничного запроса, независимо от того, ОС сервера, Windows или Linux. Я вижу, что здесь автору удалось обработать более 400 запросов в секунду. Что дает? (или это должно быть на SuperUser или подобном?)

Ответы [ 4 ]

9 голосов
/ 04 февраля 2010

Я оставлю в стороне любые мнения о том, когда следует оптимизировать веб-приложение.

Настройте различные конфигурации в приложении Sinatra для разработки и производства, поскольку некоторые из этих предложений вам не всегда захочется использовать. На самом деле, вам, вероятно, стоит пойти дальше и настроить и среду, аналогичную той, которую вы бы развернули в рабочей среде. Вы бы не развернули, просто запустив ruby app.rb. Вы бы хотели поставить apache или nginx перед своим монгрелом. Mongrel будет обслуживать ваши статические файлы, но это действительно рекомендуется только для режима разработки. В развертывании веб-сервер будет делать намного лучше для этого. Короче говоря, ваша развернутая среда будет быстрее, чем ваша автономная среда разработки.

В этот момент я не стал бы беспокоиться о Монгрел против Тонкого. Если Thin в два раза быстрее - это не так - тогда ваши 7 секунд становятся 3,5. Это будет достаточно хорошо?

Некоторые вещи попробовать ...

Я знаю, что только что сказал вам настроить среду развертывания, но, возможно, это не на стороне сервера. Вы пытались запустить на своих страницах YSlow или PageSpeed ​​? Операции ввода-вывода займут больше этих 7 секунд (отказ от ответственности: я предполагаю, что в настройке вашей сети нет ничего плохого), чем сервер. YSlow - фактически Firebug - скажет вам, сколько времени занимает каждая часть вашей страницы, чтобы добраться до браузера.

Одна из вещей, которые YSlow сказал мне сделать, - это поместить далеко вперед заголовок Expires на мои статические активы, который я знал, но я оставлял оптимизацию до конца. Тогда я понял, что есть по крайней мере 3 разных места, где я мог указать этот заголовок . Я убеждаю себя, что делать это в nginx - правильное место.

Если вы довольны этими результатами, тогда вы можете посмотреть на сервер. От макушки головы, поэтому не исчерпывающий

  1. Включите ответы gzip.
  2. Объедините ваши таблицы стилей, так что на страницу требуется только один. Для этого может быть какое-то промежуточное программное обеспечение стойки, если вы не сделаете это вручную.
  3. Cache. Я пытаюсь Rack :: Cache .
  4. Используйте спрайты, чтобы уменьшить количество загружаемых изображений.
  5. Сократите свой Javascript. Опять может быть через Rack Middleware.

Rack Middleware аккуратен, но использует процессор. Итак, ручная минимизация вашего Javascript добавляет новый шаг в ваш рабочий процесс, но на сервере это быстрее, чем Middleware. Это компромисс.

Извините, если это было бессмысленно.

5 голосов
/ 02 августа 2011

У меня была эта проблема при запуске Sinatra с дробовиком, но не при непосредственном запуске моего приложения (т. Е. ruby -rubygems app.rb).Это потому, что дробовик разветвляется и перезагружает приложение для каждого запроса.

В списке рассылки Sinatra я обнаружил ветку , в которой обсуждалась эта проблема, и люди там советовали использовать rerun .дробовика.Я рад сказать, что это решило эту проблему для меня.

4 голосов
/ 26 января 2010

Попробуйте использовать Thin в качестве сервера. Я заметил увеличение производительности по сравнению с WEBrick и Mongrel.

gem install thin

Когда вы запустите приложение, используя ruby TestServer.rb, вы увидите следующее:

Sinatra / 0.10.1 поднялся на 4567 для разработки с резервным копированием из Thin

1 голос
/ 30 апреля 2014

Я управляю Sinatra внутри VMWare Fusion с Vagrant. Мое приложение работало медленно (около десяти секунд для обслуживания запроса). Тогда я нашел этот драгоценный камень:

Уэбрик очень медленно отвечает. Как это ускорить?

Кажется, что WEBrick (по умолчанию) настроен на обратный просмотр DNS при каждом запросе, и это замедляло его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...