Bundler
Изглежда като някакъв проблем със зареждането на пакета за мен. Бих препоръчал да направите още измервания. Използвате ли 1 gemset на проект или съхранявате всичко в 1 gemset (вярно е, ако не използвате нито един)? Ако имате много скъпоценни камъни в 1 директория (т.е. 1 скъпоценен набор за всички), това в крайна сметка ще забави много пакетирането, тъй като трябва да премине през повече пътища, за да свърши работата си.
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
отчита доста голяма стойност (имам 237
и всичко изглежда нормално за мен), може би трябва да разделите инсталираните скъпоценни камъни в отделен набор от скъпоценни камъни за всеки проект.
Направете още измервания с time
команда, потърсете real
стойност, това е общата сума.
Първо премахнете своя bundled_rspec
обвивка, не е необходимо с най-новата RVM
версии.
След това измерете зареждането на rspec със и без 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`
Ако time rspec -v
ви дава големи числа дори за проект със сравнително малък Gemfile, това е проблем на пакета.
Релси
Следващото тясно място обикновено е самият Rails. Опитайте да измерите един тест, който не зарежда Rails (т.е. само spec_helper
) и след това тествайте с rails (т.е. с rails_helper
).
Веднага щом започнете да виждате голяма разлика в числата, ще разберете къде имате проблем.
Пролет
Като бързо решение за подобряване на производителността на rails е използването на spring
скъпоценен камък
. Ако използвате Rails 4.1+, Spring вече е активиран.
За да активирате Spring за rspec
добавете към вашия Gemfile
gem 'spring-commands-rspec', group: :development
и стартирайте
$ bundle install
$ spring binstub --all
Последната команда ще генерира обвивки за всички поддържани от spring двоични файлове в bin
на вашия проект папка (погледнете там и не забравяйте да ги ангажирате). След това трябва да стартирате rspec
с bin/rspec
. Първото изпълнение все още ще бъде бавно, но всички последващи стартирания трябва да са достатъчно бързи, тъй като Rails вече ще бъде зареден.