为什么REE在执行RSpec时比1.9.3更快?

时间:2011-12-18 00:12:54

标签: ruby rspec ruby-enterprise-edition ruby-1.9.3

我一直认为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

对于一个空的gemset,只有rspec并且在空的spec文件上执行,这是两倍。我看到包含多个宝石的宝石的差异更大。

为什么会发生这种情况,1.9.3应该是目前最快的版本?

我在OS X Lion上运行通过RVM安装的最新版本。

2 个答案:

答案 0 :(得分:5)

这取决于你真正的替补。如果你做的事情那么简单,那么在我看来它根本不算数。所以,这是我的Backup宝石的一个例子,它可以执行大量文件“需要”并运行一系列真实世界的规范。

Ruby Enterprise Edition

time bundle exec rspec spec

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

502 examples, 0 failures

Ruby 1.9.3p0

bundle exec rspec spec

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

502 examples, 0 failures

启动时间通常更快,1.9.3p0,因为某个补丁程序改变了文件需要函数的算法,我自己相信它减少了平均大小的应用程序的平均加载时间Ruby on Rails应用程序约占30%。但是,如果最初几乎没有任何文件加载,并且该过程不会运行很长时间,那么它可能会更慢。

答案 1 :(得分:1)

我猜你会看到GC性能调优的结果,这些结果确实仍然受到REE的青睐(基于我们在REE和1.9.3下使用大型Rails应用程序进行的实际基准测试)。 / p>

为了消除基准测试中的GC开销,所以你真的要比较苹果和苹果,在这个过程中尽早禁用它。你可以这样做:

GC.disable

当然,如果你有足够的内存来运行所有测试而不调用GC,你将只获得有用的结果;如果您的机器开始交换,那么结果将无用。