Bundlare
Ser ut som ett problem med laddning av buntar för mig. Jag skulle rekommendera att göra några fler mätningar. Använder du 1 ädelsten per projekt eller lagrar du allt i 1 ädelsten (det är sant om du inte använder någon)? Om du har massor av ädelstenar i en katalog (dvs. 1 ädelsten för alla) kommer det så småningom att sakta ner paketeringen mycket, eftersom den behöver gå fler vägar för att göra sitt jobb.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Om gem list -q | wc -l
rapporterar ett ganska stort värde (jag har 237
och allt verkar normalt för mig), kanske du behöver dela upp installerade ädelstenar i en separat ädelsten per projekt.
Gör några fler mätningar med time
kommandot, leta efter real
värde, det är totalsumman.
Ta först bort din bundled_rspec
wrapper, det behövs inte med senaste RVM
versioner.
Mät sedan din rspec-laddning med och utan Bundler:
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`
Om time rspec -v
ger dig stora siffror även för projekt med relativt liten Gemfile, det är ett paketeringsproblem.
Räls
Nästa flaskhals är vanligtvis Rails själv. Försök att mäta ett test som inte laddar Rails (dvs. bara spec_helper
) och testa sedan med rails (dvs med rails_helper
).
Så fort du börjar se stor skillnad i siffror kommer du att veta var du har ett problem.
Vår
Som en snabblösning för att förbättra rälsens prestanda är användningen av spring
pärla
. Om du använder Rails 4.1+ är fjädern redan aktiverad.
För att aktivera Spring för rspec
lägg till i din Gemfile
gem 'spring-commands-rspec', group: :development
och kör
$ bundle install
$ spring binstub --all
Det sista kommandot genererar omslag för alla fjäderstödda binärer i ditt projekts bin
mapp (ta en titt där och glöm inte att binda dem). Efter det bör du köra rspec
med bin/rspec
. Första körningen kommer fortfarande att vara långsam, men alla efterföljande körningar bör vara tillräckligt snabba eftersom Rails redan kommer att vara laddade.