Bundler
Det ligner et problem med indlæsning af bundler for mig. Jeg vil anbefale at lave nogle flere målinger. Bruger du 1 smykkesæt pr. projekt eller opbevarer du alt i 1 smykkesæt (det er sandt, hvis du ikke bruger nogen)? Hvis du har masser af ædelstene i 1 bibliotek (dvs. 1 ædelsten for alle), vil det i sidste ende sænke bundleren meget, da den skal krydse flere stier for at udføre sit arbejde.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Hvis gem list -q | wc -l
rapporterer ret stor værdi (jeg har 237
og alt virker normalt for mig), måske skal du opdele installerede ædelstene i en separat ædelsten pr. projekt.
Foretag nogle flere målinger med time
kommando, se efter den real
værdi, det er den samlede sum.
Fjern først din bundled_rspec
wrapper, det er ikke nødvendigt med seneste RVM
versioner.
Mål derefter din rspec-belastning med og uden 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`
Hvis time rspec -v
giver dig store tal selv for projekter med relativt små Gemfile, det er et bundterproblem.
Skinner
Næste flaskehals er normalt Rails selv. Prøv at måle en test, der ikke indlæser Rails (dvs. bare spec_helper
) og test derefter med rails (dvs. med rails_helper
).
Så snart du begynder at se stor forskel i tal, vil du vide, hvor du har et problem.
Forår
Som en hurtig løsning til at forbedre skinnernes ydeevne er brugen af spring
perle
. Hvis du bruger Rails 4.1+, er fjeder allerede aktiveret.
For at aktivere Spring for rspec
tilføje til din Gemfile
gem 'spring-commands-rspec', group: :development
og kør
$ bundle install
$ spring binstub --all
Sidste kommando vil generere wrappers for alle fjederunderstøttede binære filer i dit projekts bin
mappe (tag et kig der og glem ikke at begå dem). Derefter skal du køre rspec
med bin/rspec
. Første kørsel vil stadig være langsom, men alle efterfølgende kørsler bør være hurtige nok, da skinner allerede vil være indlæst.