Por que meus aplicativos Heroku básicos demoram dois segundos para carregar?

100

Criei dois aplicativos Heroku muito simples para testar o serviço, mas muitas vezes leva vários segundos para carregar a página quando os visito pela primeira vez:

Tudo o que fiz foi criar um aplicativo Sinatra simples e implantá-lo. Não fiz nada para bagunçar ou testar os servidores Heroku. O que posso fazer para melhorar o tempo de resposta? Está muito lento agora e não tenho certeza por onde começar. O código dos projetos está no github, se isso ajudar.

Lance Pollard
fonte

Respostas:

176
  • Se seu aplicativo ficar sem uso por um tempo, ele será descarregado (da memória do servidor).
  • No primeiro hit, ele é carregado e permanece carregado até que passe algum tempo sem que ninguém o acesse.

Isso é feito para economizar recursos do servidor. Se ninguém usa seu aplicativo, por que manter os recursos ocupados e não permitir que alguém que realmente precisa os use?
Se o seu aplicativo tiver muito tráfego contínuo, ele nunca será descarregado.

Há uma nota oficial sobre isso.

Clyfe
fonte
51
A maneira mais fácil de consertar isso é aumentar seu dinamômetro para 2.
Cap.
5
@diegopau Eu encontrei um aplicativo legal ( wekkars.com ) que faz exatamente o que você precisa. No momento, parece estar em beta, mas funciona perfeitamente aqui.
SteenhouwerD
68
Fazer ping em seu servidor para evitar que ele fique inativo está prejudicando seu próprio ninho. Esses serviços de que você está falando são gratuitos . Eles precisam conservar recursos. Se todos fizerem ping em seus servidores, nenhum será trocado e o provedor terá que ser escalado. Isso custa dinheiro .... adeus serviço gratuito. Acho que o autor desta resposta deve excluir a sugestão de fazer ping no servidor.
GreenAsJade
32
Eu uso uptimerobot.com para executar ping no meu aplicativo Heroku a cada 5 minutos gratuitamente - ele me diz que tenho um 200OK (e mais importante quando não tenho) e mantém o aplicativo responsivo. Não peço desculpas por isso; Eu tenho 10 aplicativos heroku, a maioria dos quais são aplicativos de desenvolvimento ou demo, mas este em particular é ao vivo / produção e, apesar do baixo tráfego, ele precisa responder rapidamente quando solicitado. Se isso fosse uma ameaça ao modelo de negócios do Heroku, eles nos impediriam de fazer isso. Quando tiver milhares de usuários globais, vou ligar outro dinamômetro e começar a pagar por um serviço excelente. Então pare com a coisa da viagem de culpa! :)
ED-209 de
3
Estou com o Tokn. Como os novos aplicativos devem atrair os usuários se o site carrega tão devagar que eles saem antes de começar?
Deborah
14

Você também pode querer investigar as opções de cache disponíveis no Heroku w / Varnish e Memcached. Estes são persistentes independentemente do dynos.

Por exemplo, se você tiver uma página inicial inalterada, pode armazená-la em cache por longos períodos em Varnish adicionando cabeçalhos Cache-Control à resposta. Assim, seus usuários não sentirão o impacto da carga até que queiram "fazer algo", e não quando chegarem.

sete dezenove
fonte
4

Você deve verificar a resposta de Tom Robinson para "Escalabilidade: Como funciona o Heroku?" no Quora: http://www.quora.com/Scalability/How-does-Heroku-work

O Heroku divide os recursos do servidor entre muitos clientes / aplicativos diferentes. Seu aplicativo contém blocos atribuídos de poder de computação. Partições Heroku com base na demanda de recursos. Quando você tem um aplicativo popular que exige mais energia, pode pagar por mais 'dynos' (contêineres de aplicativo) e, em troca, obter uma fatia maior do bolo.

No seu caso, porém, você está executando um aplicativo gratuito que poucas pessoas - se alguma fora de você - estão visitando / usando. Portanto, o Heroku reduz os recursos que você obtém ao descarregar seu aplicativo - basicamente, colocando-o em hibernação - até que uma solicitação seja feita em seu endereço. Quando isso acontece, e seu aplicativo está ocioso por muito tempo, demora para recarregar.

Adicione 1 dinamômetro extra para evitar que seu aplicativo adormeça, se o tempo de recarga for importante.

RKelley
fonte
3

Eu estou tendo o mesmo problema. Implantei um aplicativo Rails 3 (1.9.2) ontem à noite e é lento. Eu sei que 1.9.2 / Rails 3 está em BETA no Heroku, mas o tíquete de suporte disse que deveria funcionar usando algumas instruções que eles me enviaram.

Eu entendo que a primeira solicitação depois de muito tempo é a mais demorada. Faz sentido. Mas simplesmente carregar páginas que nem mesmo se conectam a um banco de dados levando 10 segundos às vezes é muito ruim.

De qualquer forma, você pode querer tentar o que vou fazer. Esse é o perfil do meu aplicativo e veja quanto tempo leva localmente. Se estiver demorando 400 ms, algo está errado. Mas se eu obtiver 50ms localmente e ainda levar 10 segundos no Heroku, então algo está definitivamente errado.

Obviamente, o cache ajuda, mas você só obtém 5 MB de graça e, mais uma vez, com UMA pessoa usando o site, não deve ser tão lento.

cbmeeks
fonte