haml--haml/test/benchmark.rb

55 lines
1.6 KiB
Ruby
Raw Normal View History

require File.dirname(__FILE__) + '/../lib/haml'
require 'haml/template'
require 'sass/engine'
require 'rubygems'
require 'active_support'
require 'action_view'
require 'benchmark'
require 'stringio'
module Haml
class Benchmarker
# Creates a new benchmarker that looks for templates in the base
# directory.
def initialize(base = File.dirname(__FILE__))
ActionView::Base.register_template_handler("haml", Haml::Template)
unless base.class == ActionView::Base
@base = ActionView::Base.new(base)
else
@base = base
end
end
# Benchmarks HAML against ERb, and Sass on its own.
#
# Returns the results of the benchmarking as a string.
#
def benchmark(runs = 100)
template_name = 'standard'
haml_template = "haml/templates/#{template_name}"
rhtml_template = "haml/rhtml/#{template_name}"
sass_template = File.dirname(__FILE__) + "/sass/templates/complex.sass"
old_stdout = $stdout
$stdout = StringIO.new
times = Benchmark.bmbm do |b|
b.report("haml:") { runs.times { @base.render haml_template } }
b.report("erb:") { runs.times { @base.render rhtml_template } }
b.report("sass:") { runs.times { Sass::Engine.new(File.read(sass_template)).render } }
end
#puts times[0].inspect, times[1].inspect
ratio = sprintf("%g", times[0].to_a[5] / times[1].to_a[5])
puts "Haml/ERB: " + ratio
$stdout.pos = 0
to_return = $stdout.read
$stdout = old_stdout
to_return
end
end
end