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

rspecこれは、空のスペックファイルのみを含み、空のスペックファイルで実行される空のgemsetの場合の2倍です。複数のジェムを含むジェムセットでは、さらに大きな違いが見られます。

なぜこれが起こっているのですか、1.9.3が現在利用可能な最速のバージョンであるとは考えられていませんか?

OSXLionにRVM経由でインストールされた最新バージョンを実行しています。

4

2 に答える 2

5

それは、あなたが実際に何に対してベンチするかによって異なります。あなたがそのような単純なことをするなら、それは私の意見では数えられません. というわけで、これは私のBackup gem の例で、多くのファイルが「require」され、多くの実際の仕様が実行されます。

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

ファイルrequire関数のアルゴリズムを変更する特定のパッチが作成されたため、起動時間は一般的に1.9.3p0の方が高速です。これにより、平均的なRuby on Railsと同様のサイズのアプリの平均ロード時間が短縮されたと思いますアプリケーションは約 30% 減少します。ただし、最初に読み込まれたファイルがほとんどなく、プロセスが長時間実行されない場合は、処理が遅くなる可能性があります。

于 2011-12-18T15:35:16.580 に答える
1

まだREEに有利なGCパフォーマンスチューニングの結果が表示されていると思います(REEと1.9.3の両方で大規模なRailsアプリを使用して行った実際のベンチマークに基づいています)。

ベンチマークからGCオーバーヘッドを排除して、実際にリンゴとリンゴを比較している場合は、プロセスのできるだけ早い段階でそれを無効にします。あなたは次のようにそれを行うことができます:

GC.disable

もちろん、GCを呼び出さずにすべてのテストを実行するのに十分なメモリがある場合にのみ、有用な結果が得られます。マシンがスワッピングを開始した場合、結果は役に立ちません。

于 2012-07-04T06:18:24.633 に答える