ruby-on-rails - que - ruby on rails vs php
Medir el tiempo en Ruby (6)
Usa el informe de Benchmark
require ''benchmark'' # Might be necessary.
def foo
Benchmark.bm(20) do |bm| # The 20 is the width of the first column in the output.
bm.report("Access Database:") {
# code to access database.
}
bm.report("Access Redis:") {
# code to access redis.
}
end
end
Esto generará algo como lo siguiente:
user system total real
Access Database: 0.020000 0.000000 0.020000 ( 0.475375)
Access Redis: 0.000000 0.000000 0.000000 ( 0.000037)
<------ 20 -------> # This is where the 20 comes in. NOTE: Not shown in output.
Más información se puede encontrar here .
¿Cómo puedo medir el tiempo que toma un método y las declaraciones individuales en ese método en Ruby? Si ve el siguiente método, quiero medir el tiempo total empleado por el método y el tiempo necesario para acceder a la base de datos y redis acceder. No quiero escribir Benchmark.measure antes de cada declaración. ¿El intérprete de rubí nos da ganchos para hacer esto?
def foo
# code to access database
# code to access redis.
end
En el espíritu de share de share , pero un poco más simple, también podrías hacerlo como a continuación:
start = Time.now
# code to time
Time.now - start
La forma más simple:
require ''benchmark''
def foo
time = Benchmark.measure {
code to test
}
puts time.real #or save it to logs
end
Muestra de salida:
2.2.3 :001 > foo
5.230000 0.020000 5.250000 ( 5.274806)
Los valores son: tiempo de CPU, tiempo del sistema, tiempo transcurrido total y real.
Fuente: ruby docs .
Mire en el paquete ruby-prof
, debería tener lo que necesita. Creará enormes cantidades de llamadas con tiempos.
http://ruby-prof.rubyforge.org/
Puede ser demasiado granular, en cuyo caso simplemente enrollar secciones más grandes en Benchmark.measure
podría ser un buen camino a seguir.
Podría usar el objeto Time
. ( Time Docs )
Por ejemplo,
start = Time.now
# code to time
finish = Time.now
diff = finish - start
diff
sería en segundos, como un número de punto flotante.
EDITAR: el end
está reservado.
Un segundo pensamiento, definir la función de medida () con el argumento de bloque de código de Ruby puede ayudar a simplificar el código de medida de tiempo:
def measure(&block)
start = Time.now
block.call
Time.now - start
end
# t1 and t2 is the executing time for the code blocks.
t1 = measure { sleep(1) }
t2 = measure do
sleep(2)
end