Benchmarkable
方法
實例公開方法
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 %>
來源:顯示 | 在 GitHub 上
# 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