Groupeur
Cela ressemble à un problème de chargement de bundler pour moi. Je recommanderais de faire quelques mesures supplémentaires. Utilisez-vous 1 gemset par projet ou stockez-vous tout dans 1 gemset (c'est vrai si vous n'en utilisez pas) ? Si vous avez beaucoup de gemmes dans 1 répertoire (c'est-à-dire 1 gemset pour tous), cela ralentira considérablement le bundler, car il doit parcourir plus de chemins pour faire son travail.
ensemblebundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Si gem list -q | wc -l
rapporte une valeur assez importante (j'ai 237
et tout semble normal pour moi), peut-être que vous devez diviser les gemmes installées en un gemset séparé par projet.
Effectuez d'autres mesures avec time
commande, recherchez le real
valeur, c'est la somme totale.
Tout d'abord, supprimez votre bundled_rspec
wrapper, ce n'est pas nécessaire avec dernier RVM
versions.
Ensuite, mesurez votre chargement rspec avec et sans 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`
Si time rspec -v
vous donne de gros chiffres même pour un projet avec un fichier Gemfile relativement petit, c'est un problème de bundler.
Rails
Le prochain goulot d'étranglement est généralement Rails lui-même. Essayez de mesurer un test qui ne charge pas Rails (c'est-à-dire juste spec_helper
) puis testez avec rails (c'est-à-dire avec rails_helper
).
Dès que vous commencerez à voir une grande différence dans les chiffres, vous saurez où vous avez un problème.
Printemps
En tant que solution rapide pour améliorer les performances des rails, utilisez spring
bijou
. Si vous utilisez Rails 4.1+, Spring est déjà activé.
Pour activer Spring pour rspec
ajouter à votre Gemfile
gem 'spring-commands-rspec', group: :development
et exécutez
$ bundle install
$ spring binstub --all
La dernière commande générera des wrappers pour tous les binaires pris en charge par Spring dans le bin
de votre projet dossier (jetez-y un œil et n'oubliez pas de les valider). Après cela, vous devez exécuter rspec
avec bin/rspec
. La première exécution sera toujours lente, mais toutes les exécutions suivantes devraient être suffisamment rapides puisque les rails seront déjà chargés.