我一直认为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安装的最新版本。
答案 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,你将只获得有用的结果;如果您的机器开始交换,那么结果将无用。