18

Rails 3.2/Ruby 2.0 のいくつかと、Rails 2.3/Ruby 1.8.7 のいくつかの Rails アプリを使用しています。

それらに共通しているのは、成長して依存関係/宝石を追加するにつれて、起動に時間がかかることです。開発、テスト、本番、コンソール、それは問題ではありません。60 秒以上かかるものもあります。

まず、読み込み時間が非常に遅くなる原因をプロファイルし、次に読み込み時間を改善するための推奨される方法は何ですか?

4

3 に答える 3

19

これには、いくつかの原因が考えられます。

  1. GC パスと一般的な VM の欠点が多すぎる -包括的な説明については、この回答を参照してください。Ruby <2.0 には、ロード速度を劇的に向上させることができる非常に遅いビットがいくつかあります。Falcon や railsexpress のパッチを適用して Ruby をコンパイルすると、これが大幅に改善されます。MRI Ruby のすべてのバージョンは、Rails アプリには不適切な GC 設定をデフォルトで使用します。
  2. ファイルをロードするために反復する必要がある多くのレガシー gem。バンドラーを使用している場合は、 を試してくださいbundle clean。RVM を使用している場合は、新しい gemset を作成してみてください。

プロファイリングに関する限り、 ruby​​-prof を使用して、アプリの起動時に何が起こるかをプロファイリングできます。ruby-prof ブロックでラップconfig/environment.rbしてから、それを使用して、 のようなブート サイクルのプロファイル レポートを生成できますrails r ''。これは、ブートで多くの時間を費やしている場所を追跡するのに役立ちます。のバンドラーのセットアップboot.rbや の#initialize!呼び出しのように、個々のセクションをプロファイリングすることもできますenvironment.rb

考慮していない可能性があるのは、DNS タイムアウトです。アプリが起動時に解決できない DNS ルックアップを実行している場合、プロセスが $timeout 秒間ブロックされる可能性があります (場合によっては 30 秒に達することもあります)。それらについてアプリを監査することもできます。

于 2013-07-02T23:48:02.207 に答える
13

Ryan には、テスト、コンソール、レーキ タスクの高速化に関する優れたチュートリアルがあります

そこにあるすべての方法をチェックしたところ、「」が最適であることがわかりました。次のようなタスクを実行するだけです。

$ spring rspec 

スプリングの最初の走行時間は以前と同じですが、2 回目以降ははるかに速くなります。

また、私の経験から、奇妙なエラーが発生したときにSpringサーバーを停止して再起動する必要がある場合がありますが、その可能性はまれです.

于 2013-07-03T01:30:53.147 に答える