π Parent Note
π€ Situation
Let's suppose that you have like this code and you want to compare the performances of instance and session.
def current_role
return @current_role if @current_role
# ommit..
@current_role = session[CURRENT_ROLE].reload
end
π¦ Instant Solution
You can measure by this code.
def instant_performance(&target)
start_time = Time.now
yield
Time.now - start_time
end
π Usage & examples
> instant_performance{ puts 'hello' }
hello
=> 3.9e-05
> instant_performance{ puts 'hello' }.class
hello
=> Float
> instant_performance{ @user }
=> 2.0e-06
> instant_performance{ @current_role }
=> 3.0e-06
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> 41.0
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> Infinity
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> 44.0
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> 42.0
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> 29.0
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> 56.0
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> Infinity
> instant_performance{ user_session[CURRENT_ROLE] } / instant_performance{ @current_role }
=> 50.00000000000001
``
Top comments (2)
This is a good naive way but there are many proper tools developed for this with better accuracy and performance.
github.com/evanphx/benchmark-ips is a great tool and should be used for benchmarks.
Also,
Time.now
is slower and less accurate compared toProcess.clock_gettime(Process::CLOCK_MONOTONIC)
I've found a better way