Проблема производительности Spring против Zeus: Spring не запускает тесты намного быстрее после первого запуска?
Поэтому я пытаюсь улучшить время выполнения теста и следую некоторым из замечательных советов (особенно Railscasts 412).
Зевс, кажется, работает нормально (кроме странности, которая требует от вас печатать zeus test test
для того, чтобы запустить Minitest Suite.)
Вот временный вывод от Зевса:
Базовая линия (тест рейка):
$ time rake test
Run options: --seed 62848
# Running tests:
........
Finished tests in 0.117071s, 68.3346 tests/s, 68.3346 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
real 0m5.771s
user 0m4.477s
sys 0m0.872s
И с Зевсом:
$ time zeus test test
Run options: --seed 10325
# Running tests:
........
Finished tests in 0.126365s, 63.3087 tests/s, 63.3087 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
real 0m0.765s
user 0m0.209s
sys 0m0.030s
Хорошо. 5,7 с до 0,7 с.
Теперь, с весны, я просто не вижу улучшения после первого запуска. Я использую Spring gem 1.1.0beta4, устанавливаю как описано (добавляю в Gemfile, затем запускаю bundle exec spring binstub --all
).
И вот что у меня есть:
Базовая линия, 1-е исполнение (тест граблей):
time bin/rake test
Run options: --seed 49915
# Running tests:
........
Finished tests in 0.108359s, 73.8287 tests/s, 73.8287 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
real 0m6.265s
user 0m0.072s
sys 0m0.020s
Убедитесь, что весна работает:
$ spring status
Spring is running:
2990 spring server | gdc4 | started 43 secs ago
2991 spring app | gdc4 | started 43 secs ago | test mode
И снова запустите тесты...
$ time bin/rake test
Run options: --seed 27416
# Running tests:
........
Finished tests in 0.132677s, 60.2968 tests/s, 60.2968 assertions/s.
8 tests, 8 assertions, 0 failures, 0 errors, 0 skips
real 0m3.885s
user 0m0.069s
sys 0m0.014s
Так что немного ускорения, но все еще почти 4 секунды, чтобы выполнить. Между тем, консоль рельсов загружается на тонну быстрее с пружиной....< 1 секунда.
Итак, мой вопрос: почему Зевс может получить ускорение на порядок на тестах (5,7 с -> 0,7 с), а Spring - нет?
Запуск Rails 4.0.2, Ruby 2.0.0, кстати.
4 ответа
Ты не можешь бежать
грабли тест
тебе нужно бежать
испытание на весенние грабли
Пример:
время грабли -T
10.737s
время грабли -T
10.811s # без улучшений, как вы заметили
время весенних граблей -T
18.468s
время весенних граблей -T
1.140s # огромное улучшение
Я только немного поиграл с весной и не сравнивал время с Зевсом (что я предпочитаю), но я думаю, что вы все еще видите медленное время запуска [ruby] самой весны. У Зевса ничего такого нет, так как написано на Go.
Я вижу такую же разницу здесь. Например, запуск сервера rails: с zeus < 1 с, с пружиной ~ 4 с
Наверное потому что zeus test
не работает db:reset
,
В одном из моих приложений Spring запускает тесты за 5-6 с, тогда как Zeus запускает их примерно за 0,5 с, и это определенно связано с перезагрузкой базы данных Spring каждый раз.