Почему мои базовые приложения Heroku занимают две секунды для загрузки?

Я создал два очень простых приложения Heroku для тестирования службы, но часто занимает несколько секунд, чтобы загрузить страницу, когда я впервые нахожу их:

Все, что я сделал, это создать простое приложение Sinatra и развернуть его. Я ничего не делал, чтобы возиться или тестировать серверы Heroku. Что я могу сделать, чтобы улучшить время отклика? Сейчас очень медленно, и я не уверен, с чего начать. Код для проектов находится на github, если это помогает.

Ответ 1

  • Если ваше приложение не используется некоторое время, оно выгружается (из памяти сервера).
  • При первом попадании он загружается и остается загруженным до тех пор, пока кто-либо не обратится к нему.

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

Если ваше приложение имеет много непрерывного трафика, оно никогда не будет выгружено.

официальная заметка об этом.

Ответ 2

Вы также можете исследовать параметры кэширования, которые у вас есть на Heroku w/Larnish и Memcached. Они сохраняются независимо от динамиков.

Например, если у вас есть неизменная домашняя страница, вы можете кэшировать ее в течение длительного времени в Varnish, добавляя заголовки Cache-Control к ответу. Тогда ваши пользователи не будут испытывать нагрузку, пока они не захотят "сделать что-то", а не когда они прибудут.

Ответ 3

У меня такая же проблема. Вчера вечером я развернул приложение Rails 3 (1.9.2), и оно медленно. Я знаю, что 1.9.2/Rails 3 находится в BETA на Heroku, но билет поддержки сказал, что должно быть хорошо, используя некоторые инструкции, которые они мне прислали.

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

В любом случае, вы можете попробовать, что я буду делать. Это профиль моего приложения и посмотреть, сколько времени он занимает локально. Если он принимает 400 мс, тогда что-то не так. Но если я получаю 50 мс локально, и это все еще занимает 10 секунд на Heroku, то что-то определенно неправильно.

Очевидно, кеширование помогает, но вы получаете только 5 МБ бесплатно и еще раз, при использовании ОДНОГО человека, использующего сайт, это не должно быть так медленно.

Ответ 4

Вы должны проверить ответ Тома Робинсона на "Масштабируемость: как работает Heroku?" на Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku делит серверные ресурсы среди множества различных клиентов/приложений. Вашему приложению выделены блоки вычислительной мощности. Разделение Heroku основано на потребностях в ресурсах. Когда у вас есть популярное приложение, которое требует большей мощности, вы можете заплатить за "dynos" (контейнеры приложений), а затем получить больше куска пирога взамен.

В вашем случае, однако, вы используете бесплатное приложение, в котором мало людей - если они есть вне вас - посещают/используют. Поэтому Heroku сокращает ресурсы, которые вы получаете, выгружая свое приложение - по существу, в режиме гибернации - до тех пор, пока на ваш адрес не будет сделан запрос. Когда это произойдет, и ваше приложение работает на холостом ходу в течение длительного времени, требуется время перезагрузки.

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