Какой лучший способ профилировать приложение Sinatra?

Я пытаюсь выяснить, какой лучший способ профилировать приложение Sinatra. Я хотел бы получить решение, которое даст мне профиль времени для всех методов в пути, включая рендеринг haml.

Кто-нибудь профилировал приложение Sinatra? Любые указатели?

Ответы

Ответ 1

Вот техника, которая работает, не уверена, что она лучшая.

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

Ответ 2

IMO, в этом случае лучшим инструментом является perftools.rb, который основан на Google Perftools. Он может даже создавать такие графики (удивительный!): http://perftools-rb.rubyforge.org/examples/sinatra.gif

Как обычный пользователь perftools.rb, я могу сказать, что он очень помогает находить узкие места в вашем приложении и сравнивать различные стратегии.

Найдите "perftools.rb" в github.com