web-dev-qa-db-fra.com

Pourquoi le chargement de mes applications Heroku de base prend-il deux secondes?

J'ai créé deux applications Heroku très simples pour tester le service, mais cela prend souvent plusieurs secondes pour charger la page lors de ma première visite:

Tout ce que j'ai fait, c'est créer une application Sinatra simple et la déployer. Je n'ai rien fait pour jouer ou tester les serveurs Heroku. Que puis-je faire pour améliorer le temps de réponse? C'est très lent en ce moment et je ne sais pas par où commencer. Le code des projets est sur github si cela aide.

96
Lance Pollard
  • Si votre application n'est pas utilisée pendant un certain temps, elle est déchargée (depuis la mémoire du serveur).
  • Au premier coup, il est chargé et reste chargé jusqu'à ce que le temps passe sans que personne n'y accède.

Cela est fait pour économiser les ressources du serveur. Si personne n'utilise votre application, pourquoi occuper les ressources et ne pas laisser quelqu'un qui en a vraiment besoin les utiliser?
Si votre application a beaucoup de trafic continu, elle ne sera jamais déchargée.

Il y a un note officielle à ce sujet.

161
clyfe

Vous voudrez peut-être également étudier les options de mise en cache que vous avez sur Heroku w/Varnish et Memcached. Ceux-ci sont persistants indépendamment des dynos.

Par exemple, si vous avez une page d'accueil immuable, vous pouvez la mettre en cache pendant de longues périodes dans Varnish en ajoutant des en-têtes Cache-Control à la réponse. Ensuite, vos utilisateurs ne subiront pas la charge jusqu'à ce qu'ils souhaitent "faire quelque chose" plutôt que lorsqu'ils arrivent.

14
sevennineteen

Vous devriez vérifier la réponse de Tom Robinson à "Évolutivité: comment fonctionne Heroku?" sur Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku répartit les ressources du serveur entre de nombreux clients/applications différents. Votre application se voit attribuer des blocs de puissance de calcul. Partitions Heroku basées sur la demande de ressources. Lorsque vous avez une application populaire qui demande plus de puissance, vous pouvez payer plus de "dynos" (conteneurs d'application), puis obtenir une plus grande part du gâteau en retour.

Cependant, dans votre cas, vous exécutez une application gratuite que peu de personnes - le cas échéant en dehors de vous - visitent/utilisent. Par conséquent, Heroku réduit les ressources que vous obtenez en déchargeant votre application - en la mettant essentiellement en veille prolongée - jusqu'à ce qu'une demande soit adressée à votre adresse. Lorsque cela se produit et que votre application est inactive depuis longtemps, le rechargement prend du temps.

Ajoutez 1 dynamo supplémentaire pour empêcher votre application de s'endormir, si ce temps de rechargement est important.

4
RKelley

Je rencontre le même problème. J'ai déployé une application Rails 3 (1.9.2) hier soir et c'est lent. Je sais que 1.9.2/Rails 3 est en BETA sur Heroku mais le ticket de support a dit que ça devrait aller avec quelques instructions qu'ils m'ont envoyées.

Je comprends que la première demande après un certain temps prend le plus de temps. Logique. Mais le simple fait de charger des pages qui ne se connectent même pas à une base de données en 10 secondes est parfois très mauvais.

Quoi qu'il en soit, vous voudrez peut-être essayer ce que je vais faire. C'est le profil de mon application et voyez combien de temps cela prend localement. Si cela prend 400 ms, alors quelque chose ne va pas. Mais si j'obtiens 50 ms localement et que cela prend encore 10 secondes sur Heroku, alors quelque chose ne va vraiment pas.

De toute évidence, la mise en cache aide, mais vous n'obtenez que 5 Mo gratuitement et encore une fois, avec UNE personne utilisant le site, cela ne devrait pas être si lent.

3
cbmeeks