Module: Ramaze::Helper::Bench

Defined in:
lib/ramaze/helper/bench.rb

Overview

The Benchmark helper is a simple helper that can be used to benchmark certain blocks of code by wrapping them in a block. This can be useful if you want to see how long a certain query takes or how long it takes to create a new user.

Instance Method Summary collapse

Instance Method Details

#bench(iterations = 1) ⇒ Mixed

Will first run an empty loop to determine the overhead it imposes, then goes on to yield your block iterations times.

The last yielded return value will be returned upon completion of the benchmark and the result of the benchmark itself will be sent to Log.info

Example:

class MainController < Ramaze::Controller
  def index
    @users = bench{ User.all }
    @tags = bench{ Article.tags }
  end
end

This will show something like following in your log:

[..] INFO   Bench ./start.rb:3:in `index': 0.121163845062256
[..] INFO   Bench ./start.rb:4:in `index': 2.234987235098341

So now we know that the Article.tags call takes the most time and should be improved.

Parameters:

  • iterations (Fixnum) (defaults to: 1)

    The amount of iterations to run.

Returns:

  • (Mixed)


40
41
42
43
44
45
46
47
48
# File 'lib/ramaze/helper/bench.rb', line 40

def bench(iterations = 1)
  result = nil
  from   = caller[0]
  delta  = Benchmark.realtime{ iterations.times{ nil }}
  taken  = Benchmark.realtime{ iterations.times{ result = yield }}

  Log.info "Bench #{from}: #{taken - delta}"
  return result
end