1

我一直认为 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 不应该是目前可用的最快版本吗?

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

4

2 回答 2

5

这取决于你真正反对什么。如果你做这么简单的事情,那么在我看来它甚至都不算数。所以,这是我的备份gem 的一个例子,它做了很多文件“需要”并运行了一堆现实世界的规范。

Ruby 企业版

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%。但是,如果最初加载的文件几乎没有,并且该过程没有运行很长时间,那么它可能会更慢。

于 2011-12-18T15:35:16.580 回答
1

我猜你会看到 GC 性能调整的结果,这些结果仍然对 REE 有利(基于我们在 REE 和 1.9.3 下使用大型 Rails 应用程序完成的实际基准测试)。

要从基准测试中消除 GC 开销,以便您真正将苹果与苹果进行比较,请在此过程中尽早禁用它。你可以这样做:

GC.disable

当然,只有在不调用 GC 的情况下有足够的内存来运行所有测试时,才会得到有用的结果;如果您的机器开始交换,那么结果将无用。

于 2012-07-04T06:18:24.633 回答