Я недавно подобрал эту технику и нашел ее очень удобной.
Когда оно будет на месте, вы можете добавить ?profile=true
к любому URL, который попадает на контроллер. Ваше действие будет выполняться в обычном режиме, но вместо того, чтобы доставлять визуализированную страницу в браузер, она отправит подробную, хорошо отформатированную страницу ruby-prof, которая покажет, где ваше действие потратило время.
Сначала добавьте ruby-prof в свой Gemfile, возможно, в группе разработчиков:
group :development do
gem "ruby-prof"
end
Затем добавьте вокруг фильтра в свой ApplicationController:
around_filter :profile if Rails.env == 'development'
def profile
if params[:profile] && result = RubyProf.profile { yield }
out = StringIO.new
RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
self.response_body = out.string
else
yield
end
end
Чтение выходных данных ruby-prof - это немного искусство, но я оставлю это как упражнение.
Дополнительная записка Скотта Джи:
Если вы хотите изменить тип измерения, поместите это:
RubyProf.measure_mode = RubyProf::GC_TIME #example
До if
в профиле метода контроллера приложения. Вы можете найти список доступных измерений на странице ruby-prof . На момент написания этой статьи потоки данных memory
и allocations
были повреждены ( см. Дефект ).