модуль ActiveSupport::Benchmarkable
Общедоступные методы экземпляров
# File activesupport/lib/active_support/benchmarkable.rb, line 35
def benchmark(message = "Benchmarking", options = {})
if logger
options.assert_valid_keys(:level, :silence)
options[:level] ||= :info
result = nil
ms = Benchmark.ms { result = options[:silence] ? logger.silence { yield } : yield }
logger.send(options[:level], '%s (%.1fms)' % [ message, ms ])
result
else
yield
end
end Позволяет измерять время выполнения блока кода в шаблоне и записывать результат в журнал. Оберните этот блок вокруг ресурсоёмких операций или возможных узких мест, чтобы получить временные данные для данной операции. Например, предположим, что вы считаете, что ваш метод обработки файлов занимает слишком много времени; вы можете обернуть его в блок benchmark.
<% benchmark 'Process data files' do %> <%= expensive_files_operation %> <% end %>
Это добавит в журнал что-то вроде «Обработка файлов данных (345,2 мс)», которое вы можете использовать для сравнения времени выполнения при оптимизации кода.
Вы можете указать необязательный уровень ведения журнала (:debug, :info, :warn, :error) в качестве параметра :level. Значение по умолчанию для уровня ведения журнала — :info.
<% benchmark 'Low-level files', level: :debug do %> <%= lowlevel_files_operation %> <% end %>
Наконец, вы можете передать значение true в качестве третьего аргумента, чтобы отключить всю активность ведения журнала (кроме информации о времени) внутри блока. Это отлично подходит для выделения шумного блока до единственного оператора, который генерирует одну строку журнала:
<% benchmark 'Process data files', level: :info, silence: true do %> <%= expensive_and_chatty_files_operation %> <% end %>
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.