Bundelaar
Lijkt me een probleem met het laden van de bundel. Ik zou aanraden om wat meer metingen te doen. Gebruik je 1 edelsteenset per project of bewaar je alles in 1 edelsteenset (het is waar als je er geen gebruikt)? Als je veel edelstenen in 1 map hebt (d.w.z. 1 edelsteenset voor allemaal), zal het de bundel uiteindelijk veel vertragen, omdat het meer paden moet afleggen om zijn werk te doen.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Als gem list -q | wc -l
meldt een vrij grote waarde (ik heb 237
en alles lijkt normaal voor mij), misschien moet je geïnstalleerde edelstenen per project in een aparte edelsteenset splitsen.
Doe nog wat metingen met time
commando, zoek naar de real
waarde, het is de totale som.
Verwijder eerst uw bundled_rspec
wrapper, het is niet nodig met nieuwste RVM
versies.
Meet vervolgens uw rspec-lading met en zonder 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`
Als time rspec -v
geeft je grote aantallen, zelfs voor projecten met relatief kleine Gemfile, het is een bundelprobleem.
Sporen
Het volgende knelpunt is meestal Rails zelf. Probeer één test te meten die geen rails laadt (d.w.z. alleen spec_helper
) en test vervolgens met rails (d.w.z. met rails_helper
).
Zodra je grote verschillen in cijfers begint te zien, weet je waar je een probleem hebt.
Lente
Als een snelle oplossing om de prestaties van de rails te verbeteren, is het gebruik van spring
juweeltje
. Als u Rails 4.1+ gebruikt, is Spring al ingeschakeld.
Spring inschakelen voor rspec
voeg toe aan je Gemfile
gem 'spring-commands-rspec', group: :development
en voer
. uit$ bundle install
$ spring binstub --all
De laatste opdracht genereert wrappers voor alle binaire bestanden die door de lente worden ondersteund in de bin
van uw project map (kijk daar en vergeet ze niet vast te leggen). Daarna moet u rspec
. uitvoeren met bin/rspec
. De eerste run zal nog steeds langzaam zijn, maar alle daaropvolgende runs moeten snel genoeg zijn, aangezien Rails al geladen is.