I was reading on twitter experience of scaling rails and use of dtrace. Unfortunately for GNU/Linux users “dtrace” is just a unreality. But if you just concentrate on the results, then you will find that, a major source of bottleneck was use of:
foo = @someobj.amazing rescue "not_amazing"
Above code is in vogue, because it takes care of a lot of things like:
- if @someobj is nil, then foo defaults to “not_amazing”.
- if @someobj doesn’t support “amazing” method, foo defaults to “not_amazing”.
- And of course the obvious case.
But that code succinctness comes at a cost and you may end up with deep stacktraces. This was a major bottleneck for twitter team.
Above snippet can be written as:
foo = @someobject.blank? ? "not_amazing" : (@someobject.respont_do?(:amazing) ? @someobject.amazing : "amazing")
Not so succinct, but does its job.
Read the details http://blogs.sun.com/ahl/entry/dtrace_for_ruby_at_oscon .