Spec-Zone.ru › Ruby on Rails 5.0

модуль ActiveSupport::Benchmarkable

Общедоступные методы экземпляров

benchmark(message = "Benchmarking", options = {}) { || ... } Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API