Warum dauert das Laden meiner grundlegenden Heroku-Apps zwei Sekunden?

100

Ich habe zwei sehr einfache Heroku-Apps erstellt, um den Dienst zu testen, aber es dauert oft einige Sekunden, bis die Seite geladen ist, wenn ich sie zum ersten Mal besuche:

Ich habe lediglich eine einfache Sinatra-App erstellt und bereitgestellt. Ich habe nichts getan, um mich mit den Heroku-Servern herumzuschlagen oder sie zu testen. Was kann ich tun, um die Reaktionszeit zu verbessern? Es ist momentan sehr langsam und ich bin mir nicht sicher, wo ich anfangen soll. Der Code für die Projekte ist auf Github, wenn das hilft.

Lance Pollard
quelle

Antworten:

175
  • Wenn Ihre Anwendung längere Zeit nicht verwendet wird, wird sie entladen (aus dem Serverspeicher).
  • Beim ersten Treffer wird es geladen und bleibt geladen, bis einige Zeit vergeht, ohne dass jemand darauf zugreift.

Dies geschieht, um Serverressourcen zu sparen. Wenn niemand Ihre App verwendet, warum sollten Sie die Ressourcen beschäftigen und nicht zulassen, dass jemand, der sie wirklich benötigt, sie verwendet?
Wenn Ihre App viel ständigen Datenverkehr hat, wird sie niemals entladen.

Es gibt einen offiziellen Hinweis dazu.

Clyfe
quelle
51
Der einfachste Weg, dies zu beheben, besteht darin, Ihre Dynos auf 2 zu erhöhen.
Kap
5
@diegopau Ich habe eine nette App gefunden ( wekkars.com ), die genau das macht, was du brauchst. Im Moment scheint es in der Beta zu sein, aber es funktioniert hier perfekt.
SteenhouwerD
68
Wenn Sie Ihren Server anpingen, damit er nicht im Leerlauf läuft, wird in Ihrem eigenen Nest gekackt. Diese Dienste, über die Sie sprechen, sind kostenlos . Sie müssen Ressourcen schonen. Wenn jeder seinen Server anpingt, wird keiner ausgetauscht, und der Anbieter muss skalieren. Das kostet Geld .... auf Wiedersehen kostenloser Service. Ich denke, das Poster dieser Antwort sollte den Vorschlag zum Pingen des Servers löschen.
GreenAsJade
32
Ich verwende uppimerobot.com, um meine Heroku-App alle 5 Minuten kostenlos zu pingen. Es zeigt mir, dass ich einen 200OK habe (und was noch wichtiger ist, wenn ich es nicht tue) und die App reagiert. Ich entschuldige mich nicht dafür; Ich habe 10 Heroku-Apps, von denen die meisten Entwickler- oder Demo-Apps sind, aber diese ist insbesondere Live / Produktion und muss trotz des geringen Datenverkehrs schnell reagieren, wenn sie angefordert wird. Wenn dies eine Bedrohung für Herokus Geschäftsmodell wäre, würden sie uns daran hindern. Wenn ich Tausende von globalen Benutzern habe, starte ich einen weiteren Prüfstand und bezahle für einen großartigen Service. Also hör auf mit der Schuldgefühle! :)
ED-209
3
Ich bin bei Tokn. Wie sollen neue Apps Benutzer erreichen, wenn die Website so langsam geladen wird, dass sie die Website verlässt, bevor sie aktiv ist?
Deborah
14

Vielleicht möchten Sie auch die Caching-Optionen untersuchen, die Sie für Heroku mit Lack und Memcached haben. Diese bleiben unabhängig von den Dynos bestehen.

Wenn Sie beispielsweise eine unveränderte Homepage haben, können Sie diese für längere Zeit in Varnish zwischenspeichern, indem Sie der Antwort Cache-Control-Header hinzufügen. Dann werden Ihre Benutzer den Lastschlag erst erleben, wenn sie "etwas tun" möchten, anstatt wenn sie ankommen.

siebenzehn
quelle
4

Sie sollten sich Tom Robinsons Antwort auf "Skalierbarkeit: Wie funktioniert Heroku?" auf Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku teilt die Serverressourcen auf viele verschiedene Kunden / Anwendungen auf. Ihrer App werden Rechenleistungsblöcke zugewiesen. Heroku-Partitionen basierend auf dem Ressourcenbedarf. Wenn Sie eine beliebte Anwendung haben, die mehr Leistung erfordert, können Sie für mehr „Dynos“ (Anwendungscontainer) bezahlen und erhalten dafür einen größeren Teil des Kuchens.

In Ihrem Fall führen Sie jedoch eine kostenlose App aus, die nur wenige Personen - wenn überhaupt außerhalb von Ihnen - besuchen / verwenden. Daher reduziert Heroku die Ressourcen, die Sie erhalten, indem Sie Ihre App entladen - und sie im Wesentlichen in den Ruhezustand versetzen -, bis eine Anfrage an Ihre Adresse gesendet wird. Wenn dies passiert und Ihre App lange Zeit im Leerlauf war, dauert das Neuladen einige Zeit.

Fügen Sie 1 zusätzlichen Prüfstand hinzu, damit Ihre App nicht einschlafen kann, wenn diese Nachladezeit wichtig ist.

RKelley
quelle
3

Ich habe das gleiche Problem. Ich habe letzte Nacht eine Rails 3 (1.9.2) App bereitgestellt und sie ist langsam. Ich weiß, dass 1.9.2 / Rails 3 in BETA auf Heroku ist, aber das Support-Ticket sagte, dass es mit einigen Anweisungen, die sie mir geschickt haben, in Ordnung sein sollte.

Ich verstehe, dass die erste Anfrage nach langer Zeit am längsten dauert. Macht Sinn. Aber das einfache Laden von Seiten, die nicht einmal eine Verbindung zu einer Datenbank herstellen, dauert manchmal 10 Sekunden und ist ziemlich schlecht.

Wie auch immer, vielleicht möchten Sie versuchen, was ich tun werde. Das ist Profil meiner App und sehen, wie lange es lokal dauert. Wenn es 400 ms dauert, stimmt etwas nicht. Aber wenn ich vor Ort 50 ms bekomme und es auf Heroku immer noch 10 Sekunden dauert, stimmt definitiv etwas nicht.

Natürlich hilft das Caching, aber Sie erhalten nur 5 MB kostenlos und mit EINER Person, die die Site nutzt, sollte es nicht so langsam sein.

cbmeeks
quelle