111 votes

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

J'ai créé deux applications Heroku très simples pour tester le service, mais il faut 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 application Sinatra simple et la déployer. Je n'ai rien fait pour manipuler ou tester les serveurs Heroku. Que puis-je faire pour améliorer le temps de réponse ? Il est très lent pour le moment et je ne sais pas par où commencer. Le code des projets est sur github si cela peut aider.

0 votes

Deux secondes ? Tant mieux pour toi, le mien prend 30 secondes.

196voto

clyfe Points 15388
  • Si votre application n'est pas utilisé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 s'écoule sans que personne n'y accède.

Ceci est fait pour économiser les ressources du serveur. Si personne n'utilise votre application, pourquoi garder les ressources occupées 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 existe un note officielle à ce sujet.

2 votes

Cela permet au serveur de disposer d'un peu de mémoire libre si d'autres applications en ont besoin. Deuxièmement, il est assez facile de surcharger un serveur avec des applications si elles sont toujours en cours d'exécution. Il y a de nombreuses raisons à cela. Clyfe en donne une version simple.

0 votes

Est-ce que c'est dans la documentation quelque part ? combien de temps après l'arrêt de l'utilisation cela se produit-il ? merci pour la réponse, cela rend les choses beaucoup plus claires :).

0 votes

Je pense que c'est un comportement de passager

15voto

sevennineteen Points 999

Vous pouvez également étudier les options de mise en cache dont vous disposez sur Heroku avec Varnish et Memcached. Celles-ci sont persistantes indépendamment des dynos.

Par exemple, si vous avez une page d'accueil qui ne change pas, vous pouvez la mettre en cache pendant de longues périodes dans Varnish en ajoutant des en-têtes Cache-Control à la réponse. Ainsi, vos utilisateurs ne subiront le coup de charge que lorsqu'ils voudront "faire quelque chose" plutôt que lorsqu'ils arriveront.

5voto

RKelley Points 10

Vous devriez consulter la réponse de Tom Robinson à la question "Scalability : How Does Heroku Work ?" 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. Heroku divise en fonction de la demande de ressources. Lorsque vous avez une application populaire qui demande plus de puissance, vous pouvez payer pour plus de "dynos" (conteneurs d'application) et obtenir une plus grande part du gâteau en retour.

Dans votre cas, cependant, vous exécutez une application gratuite que peu de gens - si ce n'est aucun 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 en hibernation essentiellement - jusqu'à ce qu'une demande soit faite à votre adresse. Lorsque cela se produit, et que votre application est restée en veille pendant un long moment, il lui faut du temps pour se recharger.

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

3voto

cbmeeks Points 3305

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

Je comprends que la première demande après une longue période soit la plus longue. C'est logique. Mais le simple chargement de pages qui ne se connectent même pas à une base de données prend parfois 10 secondes, ce qui est plutôt mauvais.

Bref, tu pourrais vouloir essayer ce que je vais faire. C'est-à-dire profiler mon application et voir combien de temps elle prend localement. Si cela prend 400 ms, alors il y a un problème. Mais si j'obtiens 50 ms en local et que cela prend 10 secondes sur Heroku, alors il y a vraiment un problème.

Évidemment, la mise en cache est utile, mais vous ne disposez que de 5 Mo gratuitement et, encore une fois, si UNE personne utilise le site, il ne devrait pas être si lent.

1voto

diegopau Points 586

Si vous ne pouvez pas obtenir suffisamment de trafic, ce serait une bien meilleure solution qu'une page blanche qui se charge pendant 10 secondes : http://scottswezey.com/blog/2010/07/25/dealing-with-heroku-startup-lag/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X