跳至內容 跳至搜尋

Benchmarkable

方法
B

實例公開方法

benchmark(message = "Benchmarking", options = {}, &block)

允許您在範本中量度區塊的執行時間,並將結果記錄至記錄檔。將這個區塊包裝在昂貴的操作或可能的瓶頸周圍,以取得操作的時間讀數。例如,想像您認為檔案處理方法花了太長時間,您可以將它包裝在基準區塊中。

<% 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 %>
# 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