Slow test suite with Ruby 1.9.2 and Rspec 2.5

Hi, I’ve started a Rails 3 project using Ruby 1.9.2 and Rspec 2 and my
test suite is now growing and I’m not happy with the amount of time it
is tooking to run. I did a benchmark of it with Ruby Enterprise
Edition 1.8.7 2011.03 and it ran much more faster(5x) than Ruby 1.9.2.

Is it expected or there is something I’m missing? To see the results,
Gemfile and spec_helper.rb please check the gist

Any help or tips are very appreciated.

Thanks,
Alisson S.

On Apr 24, 2011, at 3:24 PM, Alisson S. wrote:

Thanks,
Alisson S.

rspec runs its own specs faster on 1.9.2 than on 1.8.7:

Which version of rails are you using, and what other gems are in your
Gemfile?

On Sun, Apr 24, 2011 at 5:44 PM, David C. [email protected]
wrote:

Any help or tips are very appreciated.

Thanks,
Alisson S.

rspec runs its own specs faster on 1.9.2 than on 1.8.7:
1.8.7.sh · GitHub

Cool.

Which version of rails are you using, and what other gems are in your Gemfile?

Rails 3.0.5, the complete Gemfile is on the gist

I think the other gems that may be affecting the speed are
factory_girl_rails and shoulda-matchers but in the ruby 1.8.7 the
result is so good that I’m wondering if the problem is a specific gem.

Are you perhaps seeing http://is.gd/6aINHC ? We’ve moved several Rails
projects to 1.9.2 over the last few months and we’ve found our builds
running slower on all (we use RSpec too).

Cheers,
Sidu.
http://c42.in

On Sun, Apr 24, 2011 at 6:23 PM, Sidu P. [email protected]
wrote:

Are you perhaps seeing http://is.gd/6aINHC ? We’ve moved several Rails
projects to 1.9.2 over the last few months and we’ve found our builds
running slower on all (we use RSpec too).

I’m not sure if the problem is the startup time. Does the startup time
affects results of rspec --profile?

See the results of $ rspec spec/models/user_spec.rb -p here

Oh, and it should be sorted in 1.9.3:
http://redmine.ruby-lang.org/issues/show/3924

Note that this only impacts startup times - your app should still run
faster on 1.9.2.

Best,
Sidu.
http://c42.in

Unfortunately I don’t have a Rails project handy that builds on both
1.8 and 1.9, but here are the results for a pure Ruby project:

As you can see, the build times are nearly identical across 1.8.7,
REE, 1.9.2 and 1.9.3-dev (I’m using RSpec 2.6.0.rc2).

Are you seeing the build slow down in direct correlation to the number
of tests you’re running? What I’ve seen is that the delay is constant
and a function of the number of files being required and not the
number of tests, so the more tests you have, the closer the build
times should be on 1.8.7 and 1.9.2.

Of course, this can make running a single spec on 1.9.2 irritatingly
slow - one of the projects at my workplace that has a largish codebase
had to start using spork after upgrading to 1.9.2 because what used to
be an acceptable delay to run a single spec on 1.8.7 became excessive
on 1.9.2.

Cheers,
Sidu.
http://c42.in

Em 24-04-2011 19:22, Alisson S. escreveu:

On Sun, Apr 24, 2011 at 6:23 PM, Sidu P.[email protected] wrote:

Are you perhaps seeing http://is.gd/6aINHC ? We’ve moved several Rails
projects to 1.9.2 over the last few months and we’ve found our builds
running slower on all (we use RSpec too).
I’m not sure if the problem is the startup time. Does the startup time
affects results of rspec --profile?

See the results of $ rspec spec/models/user_spec.rb -p here
Test suite benchmark · GitHub

Yes, I agree with you. It probably is some issue related to some gem
that behaves differently in Ruby 1.8 and 1.9…

That is why I miss a real good profiler tool, like that of Google Chrome
for profiling Javascript. We discussed about this recently and David
suggested trying out ruby-prof or Rubinius:

http://www.ruby-forum.com/topic/1511936

You could try the Graphic profile of ruby-prof and it might help you
identifying which part is slower on each implementation so that you
could identify what is the culprit gem, if that is the case.

For speeding up your startup time you can try spork. It helped a lot for
me.

Good luck,

Rodrigo.

Great work! Thanks for following up.

Cheers,
David

I’ve found the problem. The gem meta_where
(GitHub - activerecord-hackery/meta_where: ActiveRecord 3 query syntax on steroids. Not currently maintained.) is doing something wrong in ruby
1.9.2, just removing it from my Gemfile and my suite is running fast
again(6 seconds).

Thank you guys, I’ll open a issue on the meta_where project.

On Sun, Apr 24, 2011 at 8:37 PM, Rodrigo Rosenfeld R.

On Apr 25, 9:19am, Alisson S. [email protected] wrote:

I’ve found the problem. The gem meta_where
(GitHub - activerecord-hackery/meta_where: ActiveRecord 3 query syntax on steroids. Not currently maintained.) is doing something wrong in ruby
1.9.2, just removing it from my Gemfile and my suite is running fast
again(6 seconds).

Thank you guys, I’ll open a issue on the meta_where project.

I’d very much appreciate any pointers as to what I might be “doing
wrong” that only affects RSpec under 1.9.2. I’m at a loss, offhand,
especially since regular application performance doesn’t seem to be
adversely affected.

Squeel is also affected, apparently, and it uses RSpec for testing
internally, running 672 examples in under 4 seconds. Maybe it’s
something that only occurs when being tested inside a Rails app
directly?

If anyone has any information, or a sample app/tests that clearly
demonstrate the issue, it’d be much appreciated.