web-dev-qa-db-ja.com

基本的なHerokuアプリの読み込みに2秒かかるのはなぜですか?

サービスをテストするために2つの非常に単純なHerokuアプリを作成しましたが、最初にアクセスしたときにページを読み込むのに数秒かかることがよくあります。

私がしたことは、単純なSinatraアプリを作成してデプロイすることだけでした。 Herokuサーバーをいじったり、テストしたりすることはありません。応答時間を改善するために何ができますか?今は非常に遅く、どこから始めればいいのかわかりません。プロジェクトのコードは、それが役立つ場合、githubにあります。

96
Lance Pollard
  • アプリケーションがしばらく使用されていない場合、(サーバーのメモリから)アンロードされます。
  • 最初のヒットでロードされ、誰かがアクセスすることなくしばらく時間が経過するまでロードされたままになります。

これは、サーバーリソースを節約するために行われます。誰もあなたのアプリを使用しない場合、なぜリソースをビジーにして、本当に必要な人にそれらを使用させないのですか?
アプリに大量のトラフィックが連続している場合、アプリはアンロードされません。

これについて 公式ノート があります。

161
clyfe

また、Heroku w/VarnishおよびMemcachedのキャッシュオプションを調査することもできます。これらはダイノとは無関係に持続します。

たとえば、不変のホームページがある場合、応答にCache-Controlヘッダーを追加することで、ワニスで長期間ホームページをキャッシュできます。そうすると、ユーザーは、到着したときではなく「何かをしたい」までロードヒットを経験しません。

14
sevennineteen

「スケーラビリティ:Herokuの仕組み」に対するTom Robinsonの答えを確認してください。 Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Herokuは、サーバーリソースを多くの異なる顧客/アプリケーションに分割します。アプリには、計算能力のブロックが割り当てられます。リソースの需要に基づいたHerokuパーティション。より多くの電力を必要とする人気のあるアプリケーションがある場合、より多くの「dynos」(アプリケーションコンテナ)にお金を払ってから、見返りにパイの大きな塊を取得できます。

ただし、あなたの場合、あなたは、あなた以外の人が訪問/使用している人がほとんどいない無料アプリを実行しています。そのため、Herokuは、アドレスへの要求があるまで、アプリをアンロードする(基本的に休止状態にする)ことで、取得するリソースを削減します。それが発生し、アプリが長時間アイドリングしていた場合、リロードに時間がかかります。

リロード時間が重要な場合は、1つの余分なdynoを追加して、アプリがスリープ状態にならないようにします。

4
RKelley

私は同じ問題を抱えています。昨夜Rails 3(1.9.2)アプリをデプロイしましたが、遅いです。Herokuで1.9.2/Rails 3がベータ版であることがわかりましたが、サポートチケットでは問題なく使用できるはずです。彼らが私に送ったいくつかの指示。

久しぶりの最初のリクエストに最も時間がかかることを理解しています。理にかなっています。しかし、10秒かかってもDBに接続しないページをロードするだけでは、かなり悪い場合があります。

とにかく、あなたは私がやろうとしていることを試してみたいかもしれません。それが私のアプリのプロファイルであり、ローカルにかかる時間を確認します。 400ミリ秒かかる場合は、何か問題があります。ただし、ローカルで50ミリ秒を取得しても、Herokuで10秒かかる場合は、間違いがあります。

明らかに、キャッシングは役立ちますが、無料で5MBしか獲得できず、1人がサイトを使用しているので、それほど遅くないはずです。

3
cbmeeks