Какой лучший способ профилировать приложение Sinatra? - PullRequest
14 голосов
/ 03 декабря 2010

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

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

Ответы [ 2 ]

8 голосов
/ 05 декабря 2010

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

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
6 голосов
/ 06 декабря 2010

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

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

Поиск "perftools.rb" на github.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...