5

多くの依存関係を持つRailsアプリケーションを起動するとき、requireファイルの処理に多くの時間が費やされます(私はそう思います)。

require同じルール (同じファイルを 2 回取得しないなど) を使用して、すべてのステートメントをファイル連結に変換するデプロイ プロセスを作成するとします。基本的に、アセット パイプラインが JavaScript を処理するのと同じように Ruby を処理します。

これは実際の速度の違いになりますか? 元のソース ファイルにエラーを追跡するのが難しくなる以外に、たとえば可変スコープで問題が発生しますか?

要するに、これは素晴らしいですか、それともクレイジーですか?

アップデート

pst が指摘しているように、これは本番環境では無意味です。サーバーはすべてを 1 回ロードしてから、フォークして新しい要求を処理する可能性があります。

しかし、テストを実行するたびに Rails アプリを起動するテスト環境について考えてみましょう。すべての gem を事前に連結すると、Spork gem と同様の効果が得られます。

私の本当の質問は、ファイルの内容を解析するのにどれだけの時間が費やされているかrequireだと思います。

4

2 に答える 2

4

Ruby 2.0 になった理由をご覧いただければ幸いです: http://bugs.ruby-lang.org/issues/7158

于 2012-11-07T23:34:34.067 に答える
2

tldr; リクエスト間で償却される違いはありません1 -些細な起動コストは重要ではありません2 .

1「パフォーマンスを向上させる」ためのはるかに優れた方法は、プロセスを再利用することです。たとえば、プロセスを N 回のリクエストに対して 1 回だけロードします (これは、requireステートメントを 1 回だけ「実行」することを意味します) 。

2「解析が速くなるか」が本当に気になる方は、ベンチマークを実行してみてください。次に、それが問題ではないことを認識してください。起動時に 1 秒節約することでさえ、Web サーバー インフラストラクチャにとって重要ではありません。(もちろん、数ミリ秒の追加のディスク シークから、仮にあったとしても、わずか数ミリ秒速くなります。)

于 2012-11-07T19:59:18.330 に答える