2010-12-03 16 views
14

Estoy tratando de averiguar cuál es la mejor forma de crear un perfil de una aplicación Sinatra. Me gustaría una solución que me brinde un perfil de tiempo de todos los métodos dentro de una ruta, incluida la representación del haml.¿Cuál es la mejor manera de perfilar una aplicación Sinatra?

¿Alguien ha descrito una aplicación Sinatra? ¿Alguna sugerencia?

+0

Me suelen realizar la instrumentación manual de todos los métodos dentro de una ruta. Esta no es una gran respuesta, así que lo dejaré como un comentario. Me pregunto si la biblioteca incorporada de 'perfil' tiene un mecanismo para informar la instantánea anticipadamente. – Phrogz

Respuesta

8

Aquí hay una técnica que funciona, no estoy seguro de si es la mejor.

require 'sinatra' 
require 'profiler' 

get '/' do 
    Profiler__.start_profile 
    do_it_fast 
    do_it_slow 
    do_it_fast 
    Profiler__.stop_profile 
    Profiler__.print_profile(STDOUT) 
    "done" 
end 

def do_it_fast 
    1.upto(100){ Math.sqrt(rand) } 
end 

def do_it_slow 
    1.upto(100_000){ (Math.sqrt(rand)).ceil } 
end 

#=> In the console: 
#=> % cumulative self    self  total 
#=> time seconds seconds calls ms/call ms/call name 
#=> 68.45  2.82  2.82  3 940.00 1373.33 Integer#upto 
#=> 11.41  3.29  0.47 100200  0.00  0.00 Kernel.rand 
#=> 10.92  3.74  0.45 100000  0.00  0.00 Float#ceil 
#=> 9.22  4.12  0.38 100200  0.00  0.00 Math.sqrt 
#=> 0.00  4.12  0.00  2  0.00  5.00 Object#do_it_fast 
#=> 0.00  4.12  0.00  1  0.00 4110.00 Object#do_it_slow 
#=> 0.00  4.12  0.00  1  0.00 4120.00 #toplevel 
5

IMO, en este caso, la mejor herramienta es perftools.rb, que se basa en Google Perftools. Incluso se puede producir tales gráficos (¡increíble!): http://perftools-rb.rubyforge.org/examples/sinatra.gif

Como un usuario habitual de perftools.rb, puedo decir que en gran medida ayuda a encontrar los cuellos de botella en su aplicación y comparar las diferentes estrategias.

Búsqueda de "perftools.rb" en github.com

+1

Enlace para los interesados: https://github.com/tmm1/perftools.rb –

Cuestiones relacionadas