バンドラー
私にとっては、バンドラーの読み込みの問題のようです。もう少し測定することをお勧めします。プロジェクトごとに1つのジェムセットを使用しますか、それともすべてを1つのジェムセットに保存しますか(何も使用しない場合はそうです)? 1つのディレクトリに多数のgemがある場合(つまり、すべてに1つのgemsetがある場合)、ジョブを実行するためにより多くのパスをトラバースする必要があるため、最終的にバンドラーの速度が大幅に低下します。
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
gem list-q|の場合wc -l </ code> 非常に大きな値を報告します(
237
があります そして、私にとってはすべてが正常に思えます)、インストールされたgemをプロジェクトごとに個別のgemsetに分割する必要があるかもしれません。
time
でさらに測定を行います コマンド、 real
を探します 値、それは合計です。
まず、 bundled_rspec
を削除します ラッパー、最新のRVM
では必要ありません バージョン。
次に、Bundlerを使用した場合と使用しない場合のrspecの読み込みを測定します。
time rspec -v # with implicit bundler loading, rubygems-bundler gem is in use
time NOEXEC_DISABLE=1 rspec -v # without bundler, disable rubygems-bundler gem for this call`
time rspec -v
の場合 Gemfileが比較的小さいプロジェクトでも大きな数値が得られますが、これはバンドラーの問題です。
レール
次のボトルネックは通常、Rails自体です。 Railsをロードしない1つのテストを測定してみてください(つまり、 spec_helper
だけです) )次に、レールを使用してテストします(つまり、 rails_helper
を使用します) 。
数字に大きな違いが見られるようになるとすぐに、どこに問題があるのかがわかります。
春
Railsのパフォーマンスを改善するためのクイックフィックスソリューションとして、 spring
を使用します。 宝石
。 Rails 4.1以降を使用する場合、Springはすでに有効になっています。
rspec
に対してSpringを有効にするには Gemfile
に追加します
gem 'spring-commands-rspec', group: :development
を実行します
$ bundle install
$ spring binstub --all
最後のコマンドは、プロジェクトの bin
でSpringがサポートするすべてのバイナリのラッパーを生成します フォルダー(そこを見て、コミットすることを忘れないでください)。その後、 rspec
を実行する必要があります bin / rspec
を使用 。最初の実行はまだ遅いですが、Railsはすでにロードされているため、その後のすべての実行は十分に高速である必要があります。