MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Tempo de carregamento do RSpec incrível no OS X

Agrupador


Parece algum problema de carregamento do bundler para mim. Recomendo fazer mais algumas medidas. Você usa 1 gemset por projeto ou armazena tudo em 1 gemset (é verdade se você não usar nenhum)? Se você tiver muitas gems em 1 diretório (ou seja, 1 gemset para todos), ele eventualmente desacelerará muito o bundler, pois ele precisa percorrer mais caminhos para fazer seu trabalho.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset 

If gem list -q | wc -l relata um valor muito grande (tenho 237 e tudo parece normal para mim), talvez você precise dividir as gems instaladas em um gemset separado por projeto.

Faça mais algumas medições com time comando, procure o real valor, é a soma total.

Primeiro, remova seu bundled_rspec wrapper, não é necessário com o último RVM versões.

Em seguida, meça seu carregamento de rspec com e sem 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`

Se time rspec -v fornece grandes números, mesmo para projetos com Gemfile relativamente pequeno, é um problema do empacotador.

Trilhos


O próximo gargalo geralmente é o próprio Rails. Tente medir um teste que não carrega Rails (ou seja, apenas spec_helper ) e, em seguida, teste com trilhos (ou seja, com rails_helper ).

Assim que você começar a ver uma grande diferença nos números, saberá onde está o problema.

Primavera


Como uma solução rápida para melhorar o desempenho do Rails é o uso de spring jóia . Se você usa Rails 4.1+ o Spring já está habilitado.

Para habilitar o Spring para rspec adicione ao seu Gemfile
gem 'spring-commands-rspec', group: :development

e corra
$ bundle install
$ spring binstub --all

O último comando irá gerar wrappers para todos os binários suportados por mola no bin do seu projeto pasta (dê uma olhada lá e não se esqueça de enviá-los). Depois disso, você deve executar rspec com bin/rspec . A primeira execução ainda será lenta, mas todas as execuções subsequentes devem ser rápidas o suficiente, pois o Rails já estará carregado.