Ответ 1
Я потратил некоторое время на настройку своего приложения на heroku и некоторое время работал над настройкой производительности Rails-приложений в различных настройках.
Когда я запускаю ab -n 300 -c 75... myapp.com.... #, который является резервной копией на моем основном сайте, и находится на бесплатном плане кедра с единорогом
Requests per second: 132.11 [#/sec] (mean)
Time per request: 567.707 [ms] (mean)
Time per request: 7.569 [ms] (mean, across all concurrent requests)
(это против домашней страницы, которая не делает ничего интенсивного, поэтому я предоставляю ее только как "как быстро может быть герою на бесплатном плане с очень простой страницей?", например, а не "ваш приложения должны быть такими быстрыми" )
Вот мой контрольный список настройки производительности Rails 101:
-
Сначала измерьте время загрузки браузера/страницы (браузер делает много запросов, ab сообщает только об одном из них, и обычно ваш запрос главной страницы не является проблемой), получите базовые номера загрузки страницы из такие как www.webpagetest.org или www.gtmetrix.com для общедоступных страниц или инструментов браузера Yslow, google page скорость или динамичность для личных страниц. Если вы посмотрите на диаграмму загрузки страницы на странице (панель "Сеть" в chrome/firefox), она обычно показывает, что ваш html загружается быстро (в секундах), но затем все остальное занимает 1-3 секунды для загрузки. Следуйте рекомендациям Yslow/page speed о том, как улучшить (убедитесь, что вы используете материал конвейера Rails 3.1 в полной мере)
-
Прочитайте ваши файлы журналов/новую реликвию, чтобы найти сладкое пятно запроса "самый медленный/наиболее часто удачный" и профайл, что происходит для этого запроса (это медленный рубин/много использования памяти или лоты запросов?) У вас должен быть надежный способ обнаружения и мониторинга проблем производительности, а не просто менять вещи наугад. После того, как вы определили некоторые целевые области, создайте тестовые скрипты, которые помогут с тестированием до и после тестирования, и докажите, что ваши изменения помогают, и обнаруживают, что происходит регрессия.
-
Недостаток индексов на столбцах db является одной из наиболее распространенных проблем и проще всего адресовать. Запустите объяснение по целевым запросам или просмотрите журнал медленных запросов, чтобы узнать, что делает планировщик запросов. Добавьте индексы для внешних ключей, столбцов поиска или первичных данных (охватывающий индекс), если это необходимо. Повторите проверку с фактическими данными о производстве, чтобы доказать, что это имеет значение. (вы можете запустить объяснение в heroku, а также запустить запросы для отсутствующих или неиспользуемых индексов)
-
Большинство неудачных приложений Rails страдают от N + 1 запросов, потому что так легко писать order.owner.address.city и не думать о том, что происходит, когда это в цикле. Запросы N + 1 не обязательно являются медленными запросами, поэтому они не отображаются в журнале медленных запросов, а именно, что их много, и более эффективно делать все это сразу. Используйте: include или .includes() для активной загрузки этих данных или посмотрите на выполнение запроса другим способом.
-
Проанализируйте поток вашего приложения и найдите возможности кэширования. Если пользователь отскакивает назад и вперед между индексной страницей и страницей деталей и обратно, возможно, ajax-представление деталей, не выходя из индексной страницы, даст им нужные им данные быстрее. Я написал несколько больше мыслей об этом в своем блоге
Я выступил с презентацией об этих методах и других идеях в Чикаго в этом году на конференции WindyCityRails. Вы можете посмотреть видео здесь, в моем блоге www.RailsPerformance.com То, что я люблю в героике, - это то, что вы должны быть масштабируемыми с самого начала. Когда вы смотрите на обсуждения в списке рассылки, вы видите, что большинство людей знают о лучших примерах производительности и о том, как извлечь максимальную выгоду из сервера. Мне также нравится, как вы, если хотите остаться дешевым, вы узнаете, как трюки настройки производительности, которые будут вам наиболее эффективны.
Удачи!