Я пытаюсь выяснить, какой лучший способ профилировать приложение Sinatra. Я хотел бы получить решение, которое даст мне профиль времени для всех методов в пути, включая рендеринг haml.
Кто-нибудь профилировал приложение Sinatra? Любые указатели?
Я пытаюсь выяснить, какой лучший способ профилировать приложение Sinatra. Я хотел бы получить решение, которое даст мне профиль времени для всех методов в пути, включая рендеринг haml.
Кто-нибудь профилировал приложение Sinatra? Любые указатели?
Вот техника, которая работает, не уверена, что она лучшая.
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
IMO, в этом случае лучшим инструментом является perftools.rb, который основан на Google Perftools. Он может даже создавать такие графики (удивительный!): http://perftools-rb.rubyforge.org/examples/sinatra.gif
Как обычный пользователь perftools.rb, я могу сказать, что он очень помогает находить узкие места в вашем приложении и сравнивать различные стратегии.
Найдите "perftools.rb" в github.com