Spec-Zone.ru › Ruby on Rails 8.1

module ActiveSupport::Benchmarkable

Benchmarkable

Публичные методы экземпляра

benchmark (message = "Benchmarking", options = {}) { || ... } Показать исходный код
# File activesupport/lib/active_support/benchmarkable.rb, line 37
def benchmark(message = "Benchmarking", options = {}, &block)
  if logger
    options.assert_valid_keys(:level, :silence)
    options[:level] ||= :info

    result = nil
    ms = ActiveSupport::Benchmark.realtime(:float_millisecond) do
      result = options[:silence] ? logger.silence(&block) : yield
    end
    logger.public_send(options[:level], "%s (%.1fms)" % [ message, ms ])
    result
  else
    yield
  end
end

Позволяет измерить время выполнения блока в шаблоне и записать результат в журнал. Оборачивайте этим блоком ресурсоёмкие операции или потенциальные узкие места, чтобы узнать время выполнения операции. Например, если вам кажется, что ваш метод обработки файлов работает слишком долго, можно обернуть его блоком benchmark.

<% benchmark 'Process data files' do %>
  <%= expensive_files_operation %>
<% end %>

В журнал будет добавлена запись вроде «Process data files (345.2ms)», которую можно использовать для сравнения времени выполнения при оптимизации кода.

В качестве параметра :level можно указать необязательный уровень ведения журнала (:debug, :info, :warn, :error). По умолчанию используется уровень :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.

Spec-Zone.ru

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