Pourquoi mes applications Heroku de base prennent-elles deux secondes à se charger?

100

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

Tout ce que j'ai fait, c'est créer une simple application Sinatra et la déployer. Je n'ai rien fait pour gâcher 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 vous aide.

Lance Pollard
la source

Réponses:

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

Ceci 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 une note officielle à ce sujet.

clyfe
la source
51
Le moyen le plus simple de résoudre ce problème est d'augmenter vos dynamomètres à 2.
Chap
5
@diegopau J'ai trouvé une belle application ( wekkars.com ) qui fait exactement ce dont vous avez besoin. Pour le moment, il semble être en version bêta mais cela fonctionne parfaitement ici.
SteenhouwerD
68
Cingler votre serveur pour l'empêcher de tourner au ralenti est un jeu d'enfant. Ces services dont vous parlez sont gratuits . Ils ont besoin de conserver les ressources. Si tout le monde envoie un ping à son serveur, aucun n'est échangé et le fournisseur doit évoluer. Cela coûte de l'argent ... adieu le service gratuit. Je pense que l'affiche de cette réponse devrait supprimer la suggestion de cingler le serveur.
GreenAsJade
32
J'utilise uptimerobot.com pour envoyer un ping à mon application Heroku toutes les 5 minutes gratuitement - cela me dit que j'ai un 200OK (et plus important encore quand je ne le fais pas) et cela garde l'application réactive. Je ne m'excuse pas pour cela; J'ai 10 applications heroku, dont la plupart sont des applications de développement ou de démonstration, mais celle-ci en particulier est en direct / en production et malgré un faible trafic, elle doit répondre rapidement à la demande. Si c'était une menace pour le modèle commercial d'Heroku, ils nous empêcheraient de le faire. Quand j'aurai des milliers d'utilisateurs mondiaux, je lancerai un autre dyno et je commencerai à payer pour ce qui est un excellent service. Alors arrêtez avec le truc de la culpabilité! :)
ED-209
3
Je suis avec Tokn. Comment les nouvelles applications sont-elles censées attirer les utilisateurs si le site se charge si lentement qu'ils partent avant qu'il ne soit opérationnel?
Deborah
14

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 inchangée, 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 connaîtront pas le coup de chargement jusqu'à ce qu'ils veuillent «faire quelque chose» plutôt qu'à leur arrivée.

sept dix-neuf
la source
4

Vous devriez consulter 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'applications), puis obtenir une plus grande part du gâteau en retour.

Dans votre cas cependant, 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 faite à votre adresse. Lorsque cela se produit et que votre application est inactive depuis longtemps, le rechargement prend du temps.

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

RKelley
la source
3

J'ai 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 disait que ça devrait aller en utilisant certaines instructions qu'ils m'ont envoyées.

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

Quoi qu'il en soit, vous voudrez peut-être essayer ce que je vais faire. C'est profiler mon application et voir 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.

Évidemment, 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.

cbmeeks
la source