Spec-Zone.ru › Ruby on Rails 6.1

модуль ActiveSupport::Benchmarkable

Методы экземпляра общего доступа

benchmark(message = "Benchmarking", options = {}) { || ... } Показать исходный код
# File activesupport/lib/active_support/benchmarkable.rb, line 37
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.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–2020 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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