Почему «rspec spec» работает быстрее и использует меньше ресурсов, чем «bundle exec spec» - PullRequest
2 голосов
/ 03 июня 2011

Ниже приведены 3 случайных прогона с использованием time rspec spec против time bundle exec spec в довольно простом приложении rails 3.Отказ от использования bundler происходит быстрее и требует гораздо меньше ресурсов, 6% против 17% CPU.

Я уверен, что это как-то связано с обработчиком зависимостей, но я хотел бы понять эту проблемулучше.Я стараюсь практиковать TDD, поэтому, конечно, я запускаю свои тесты много раз в течение дня.Если использование bundle exec будет «стоить» мне с точки зрения скорости и ресурсов, то я испытываю желание найти способ избежать использования bundle exec.

Я использую рельсы 3.0.3,ruby 1.9.2, rspec 2.3, упаковщик 1.0.10

rspec spec  0.47s user 0.13s system 6% cpu 8.758 total
rspec spec  0.47s user 0.12s system 6% cpu 8.521 total
rspec spec  0.46s user 0.12s system 6% cpu 8.528 total

bundle exec rspec spec  1.35s user 0.30s system 17% cpu 9.293 total
bundle exec rspec spec  1.39s user 0.31s system 17% cpu 9.749 total
bundle exec rspec spec  1.37s user 0.30s system 17% cpu 9.490 total

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Это не совсем ответ прямо на ваш вопрос, почему вы медленнее. Но я хотел бы, по крайней мере, сказать для тех, кто обнаружит это позже, что это, как правило, совпадение, что запуск исполняемых файлов без использования bundle exec работает. Чтобы процитировать документацию Bundler:

В некоторых случаях запуск исполняемых файлов без bundle exec может работать, если исполняемый файл установлен в ваша система и не тянет в любой драгоценные камни, которые конфликтуют с вашим комплектом.

Однако это ненадежно и является источник значительной боли. Даже если похоже, это работает, может и не работать в будущем или по другому машина.

1 голос
/ 03 июня 2011

Я предполагаю, что упаковщик должен динамически анализировать все гемы в вашем гемфайле перед началом команды.

Попробуйте

bundle exec gem list | wc -l

против

gem list | wc -l

на проекте простой рельсы 3 на этой машине я получаю 25 и 92 драгоценных камня соответственно.

Аналогичным образом попробуйте то же самое с простой командой "ls", и вы все равно увидите разницу в скорости.

...