tutorial rails que ejemplos descargar curso ruby-on-rails ruby time interpreter

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