Benchmarkable
方法
实例公共方法
benchmark(message = "Benchmarking", options = {}, &block) 链接
允许您在模板中测量代码块的执行时间,并将结果记录到日志中。将此代码块包装在昂贵的操作或潜在的瓶颈周围,以获取操作的计时信息。例如,假设您认为您的文件处理方法花费的时间过长;您可以将其包装在 benchmark 代码块中。
<% benchmark 'Process data files' do %>
<%= expensive_files_operation %>
<% end %>
这将在日志中添加类似“Process data files (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