3

テストスイートを高速化するために、プロファイルを作成し、次の結果を取得しました

Total: 1445 samples
     650  45.0%  45.0%     1171  81.0% Kernel#require
     261  18.1%  63.0%      261  18.1% garbage_collector
     47   3.3%  66.3%      168  11.6% Kernel.load
     39   2.7%  69.0%       82   5.7% Module#class_eval
     27   1.9%  70.9%      817  56.5% ActiveSupport::Dependencies::Loadable#load_dependency
     25   1.7%  72.6%       58   4.0% Enumerable#find
     25   1.7%  74.3%       25   1.7% Module#constants
     20   1.4%  75.7%     1171  81.0% Kernel#gem_original_require
     19   1.3%  77.0%       19   1.3% File.file?
     18   1.2%  78.3%      415  28.7% Kernel.require
 .
 .
 .

この回答からKernel#require がアプリケーションのリソースを大量に消費するのはなぜですか? これは予想どおりのようですが、ここの膨大な数に本当に驚いています。これは本当ですか?私たちはそれについて何もできませんか?

4

1 に答える 1

0

require ステップは実際に Ruby アプリケーションの AST を構築するため、実行時に「構築」されるため、これについてできることはあまりありません。ただし、アプリケーションのロードがすべて完了している場所にプロファイリングを分離する必要があります (たとえば、アクションで 2 回の予行演習を実行してから、プロファイリングを実行するだけです)。このようにして、コンパイル手順をベンチマークから除外します。

また、require を高速化するための修正が行われたため、1.9.2 ではなく 1.9.3 を使用していることを確認してください。

于 2011-12-13T19:00:11.157 に答える