为什么REE在执行RSpec时比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并在空规范文件上执行。在包含多个宝石的宝石集上,我看到了更大的差异。

为什么会这样,难道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时,你才会得到有用的结果;如果你的机器开始交换,那么结果将不会有用。

相关内容

  • 没有找到相关文章

最新更新