2005-04-27 04:17:25 -04:00
|
|
|
require 'benchmark'
|
|
|
|
|
|
|
|
module ActionView
|
|
|
|
module Helpers
|
2007-06-23 13:49:18 -04:00
|
|
|
# This helper offers a method to measure the execution time of a block
|
|
|
|
# in a template.
|
2005-04-27 04:17:25 -04:00
|
|
|
module BenchmarkHelper
|
2007-06-23 13:49:18 -04:00
|
|
|
# Allows you to measure the execution time of a block
|
|
|
|
# in a template and records the result to the log. Wrap this block around
|
|
|
|
# expensive operations or possible bottlenecks to get a time reading
|
|
|
|
# for the operation. For example, let's say you thought your file
|
|
|
|
# processing method was taking too long; you could wrap it in a benchmark block.
|
2005-04-27 04:17:25 -04:00
|
|
|
#
|
2007-06-23 13:49:18 -04:00
|
|
|
# <% benchmark "Process data files" do %>
|
|
|
|
# <%= expensive_files_operation %>
|
2005-04-27 04:17:25 -04:00
|
|
|
# <% end %>
|
|
|
|
#
|
2008-09-05 08:58:34 -04:00
|
|
|
# That would add something like "Process data files (345.2ms)" to the log,
|
2007-06-23 13:49:18 -04:00
|
|
|
# which you can then use to compare timings when optimizing your code.
|
2005-07-05 15:33:25 -04:00
|
|
|
#
|
|
|
|
# You may give an optional logger level as the second argument
|
2007-06-23 13:49:18 -04:00
|
|
|
# (:debug, :info, :warn, :error); the default value is :info.
|
2005-07-05 15:33:25 -04:00
|
|
|
def benchmark(message = "Benchmarking", level = :info)
|
2008-04-27 23:46:19 -04:00
|
|
|
if controller.logger
|
2008-12-09 14:17:11 -05:00
|
|
|
ms = Benchmark.ms { yield }
|
|
|
|
controller.logger.send(level, '%s (%.1fms)' % [message, ms])
|
2008-04-27 23:46:19 -04:00
|
|
|
else
|
|
|
|
yield
|
2005-04-27 04:17:25 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2008-12-09 14:17:11 -05:00
|
|
|
end
|