Почему REE быстрее, чем 1.9.3 при выполнении RSpec? - PullRequest
1 голос
/ 18 декабря 2011

Я всегда думал, что 1.9.x должен был быть быстрее, чем REE, но занимать больше памяти.Но, как мне недавно сказали, REE на самом деле быстрее, чем выполнение спецификаций RSpec, и с огромным отрывом.

$ rvm use ree
$ rvm gemset create sandbox
$ rvm gemset use sandbox
$ gem install rspec

$ time rspec foo_spec.rb 
No examples found.

Finished in 0.07346 seconds
0 examples, 0 failures

real    0m0.104s
user    0m0.059s
sys 0m0.015s

и после того же действия с 1.9.3 я получаю

$ time rspec foo_spec.rb 
No examples found.

Finished in 0.13922 seconds
0 examples, 0 failures

real    0m0.208s
user    0m0.122s
sys 0m0.022s

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

Почему это происходит, разве 1.9.3 не должна быть самой быстрой версией, доступной в настоящее время?

Я используюпоследние версии установлены через RVM на OS X Lion.

Ответы [ 2 ]

5 голосов
/ 18 декабря 2011

Это зависит от того, с чем вы действительно боретесь. Если вы делаете что-то столь же простое, то, на мой взгляд, это даже не считается. Итак, вот пример моего Backup gem, который выполняет много файлов "требует" и запускает кучу реальных спецификаций.

Ruby Enterprise Edition

time bundle exec rspec spec

real    0m5.579s
user    0m3.427s
sys 0m0.465s

502 examples, 0 failures

Рубин 1.9.3p0

bundle exec rspec spec

real    0m3.863s
user    0m3.552s
sys 0m0.299s

502 examples, 0 failures

Время запуска, как правило, быстрее с 1.9.3p0, так как определенный патч сделал это в том, что он изменяет алгоритм функции require для файла, что само по себе, я считаю, уменьшило среднее время загрузки приложений, похожих по размеру в среднем Ruby on Rails приложений примерно на 30%. Но если изначально загружены только какие-то файлы и процесс не выполняется долго, то это может быть медленнее.

1 голос
/ 04 июля 2012

Я полагаю, что вы видите результаты настройки производительности GC, которые действительно все еще в пользу REE (на основе реального бенчмаркинга, который мы сделали с большим приложением Rails под REE и 1.9.3). 1001 *

Чтобы исключить накладные расходы GC из своего бенчмаркинга, чтобы вы действительно сравнивали яблоки с яблоками, отключите его как можно раньше в процессе. Вы можете сделать это следующим образом:

GC.disable

Конечно, вы получите полезные результаты, только если у вас будет достаточно памяти для запуска всех тестов без вызова GC; если ваша машина начнет замену, результаты не будут полезны.

...