модуль ActiveSupport::Benchmarkable
Benchmarkable
Открытые методы экземпляров
# File activesupport/lib/active_support/benchmarkable.rb, line 38
def benchmark(message = "Benchmarking", options = {}, &block)
if logger
options.assert_valid_keys(:level, :silence)
options[:level] ||= :info
result = nil
ms = Benchmark.ms { result = options[:silence] ? logger.silence(&block) : yield }
logger.public_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–2021 David Heinemeier Hansson
Licensed under the MIT License.