跳到內容 跳到搜尋

Benchmarkable

方法
B

實例公開方法

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

允許您在範本中衡量區塊的執行時間,並將結果記錄到日誌。將此區塊包覆在昂貴的操作或可能的瓶頸中,以取得操作的時間讀數。例如,假設您認為檔案處理方法花費太長的時間;您可以將它包覆在基準區塊中。

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

這會在日誌中加入類似「處理資料檔案 (345.2ms)」的內容,您可以在最佳化程式碼時使用它來比較時間。

您可以將選用的記錄器層級 (: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 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