我一直认为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
并在空规范文件上执行。在包含多个宝石的宝石集上,我看到了更大的差异。
为什么会这样,难道1.9.3不是目前最快的版本吗?
我正在运行OS X Lion上通过RVM安装的最新版本。
这取决于你真正的板凳。如果你做了这么简单的事情,那在我看来根本不算。所以,这里有一个我的备份gem的例子,它做了很多文件"要求",并运行了一堆现实世界的规范。
Ruby企业版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%。但是,如果最初加载的文件很少,并且进程运行时间不长,那么它可能会变慢。
我猜你看到的是GC性能调优的结果,它仍然对REE有利(基于我们在REE和1.9.3下对一个大型Rails应用程序进行的实际基准测试)。
为了从基准测试中消除GC开销,因此您实际上是在比较苹果和苹果,请在过程中尽早禁用它。你可以这样做:
GC.disable
当然,只有当你有足够的内存来运行所有测试而不调用GC时,你才会得到有用的结果;如果你的机器开始交换,那么结果将不会有用。