Bundler
Vypadá to na problém s načítáním balíku. Doporučuji provést další měření. Používáte 1 gemset na projekt nebo ukládáte vše do 1 gemsetu (je to pravda, pokud žádný nepoužíváte)? Pokud máte v 1 adresáři hodně drahokamů (tj. 1 sadu drahokamů pro všechny), nakonec to svazek hodně zpomalí, protože potřebuje projít více cest, aby splnil svou úlohu.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Pokud gem list -q | wc -l
hlásí poměrně velkou hodnotu (mám 237
a vše se mi zdá normální), možná budete muset rozdělit nainstalované drahokamy do samostatné sady drahokamů na projekt.
Proveďte další měření pomocí time
hledejte real
hodnota, je to celkový součet.
Nejprve odstraňte bundled_rspec
wrapper, není potřeba s nejnovější RVM
verze.
Poté změřte zatížení rspec s a bez 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`
Pokud time rspec -v
vám dává velká čísla i pro projekt s relativně malým souborem Gemfile, je to problém svazku.
Koľaje
Dalším úzkým hrdlem je obvykle samotný Rails. Zkuste změřit jeden test, který nenačte Rails (tj. pouze spec_helper
) a poté otestujte pomocí kolejí (tj. pomocí rails_helper
). ).
Jakmile začnete vidět velký rozdíl v číslech, budete vědět, kde máte problém.
Jaro
Jako rychlé řešení pro zlepšení výkonu kolejnic je použití spring
drahokam
. Pokud používáte Rails 4.1+ Spring je již povolen.
Chcete-li povolit Spring pro rspec
přidat do svého Gemfile
gem 'spring-commands-rspec', group: :development
a spusťte
$ bundle install
$ spring binstub --all
Poslední příkaz vygeneruje obaly pro všechny binární soubory podporované pružinou v bin
vašeho projektu složku (podívejte se tam a nezapomeňte je odevzdat). Poté byste měli spustit rspec
pomocí bin/rspec
. První jízda bude stále pomalá, ale všechny následující jízdy by měly být dostatečně rychlé, protože Rails již budou načteny.