1
0
Fork 0
mirror of https://github.com/haml/haml.git synced 2022-11-09 12:33:31 -05:00

Backport benchmark.rb updates to stable.

This commit is contained in:
Nathan Weizenbaum 2008-12-28 16:54:37 -08:00
parent a8fa047e71
commit c9a74e21b5
5 changed files with 99 additions and 32 deletions

View file

@ -14,19 +14,11 @@ end
require File.dirname(__FILE__) + '/../lib/haml'
require File.dirname(__FILE__) + '/linked_rails'
%w[sass rubygems erb erubis markaby active_support action_controller
action_view haml/template].each(&method(:require))
begin
require 'benchwarmer'
rescue LoadError
# Since it's not as simple as gem install at the time of writing,
# we need to direct folks to the benchwarmer gem.
raise "The Haml benchmarks require the benchwarmer gem, available from http://github.com/wycats/benchwarmer"
end
action_view action_pack haml/template rbench].each {|dep| require(dep)}
def view
unless ActionView::Base.instance_methods.include? 'finder'
return ActionView::Base.new(File.dirname(__FILE__), vars)
return ActionView::Base.new(File.dirname(__FILE__), {})
end
# Rails >=2.1.0
@ -35,9 +27,15 @@ def view
base
end
Benchmark.warmer(times) do
columns :haml, :erb, :erubis, :mab
titles :haml => "Haml", :erb => "ERB", :erubis => "Erubis", :mab => "Markaby"
def render(view, file)
view.render :file => file
end
RBench.run(times) do
column :haml, :title => "Haml"
column :haml_ugly, :title => "Haml :ugly"
column :erb, :title => "ERB"
column :erubis, :title => "Erubis"
template_name = 'standard'
directory = File.dirname(__FILE__) + '/haml'
@ -45,49 +43,56 @@ Benchmark.warmer(times) do
erb_template = File.read("#{directory}/rhtml/#{template_name}.rhtml")
markaby_template = File.read("#{directory}/markaby/#{template_name}.mab")
report "Uncached" do
haml { Haml::Engine.new(haml_template).render }
erb { ERB.new(erb_template, nil, '-').result }
erubis { Erubis::Eruby.new(erb_template).result }
mab { Markaby::Template.new(markaby_template).render }
end
report "Cached" do
obj = Object.new
Haml::Engine.new(haml_template).def_method(obj, :haml)
Haml::Engine.new(haml_template, :ugly => true).def_method(obj, :haml_ugly)
Erubis::Eruby.new(erb_template).def_method(obj, :erubis)
obj.instance_eval("def erb; #{ERB.new(erb_template, nil, '-').src}; end")
haml { obj.haml }
erb { obj.erb }
erubis { obj.erubis }
haml { obj.haml }
haml_ugly { obj.haml_ugly }
erb { obj.erb }
erubis { obj.erubis }
end
report "ActionView" do
@base = view
@base.unmemoize_all
Haml::Template.options[:ugly] = false
# To cache the template
@base.render 'haml/templates/standard'
@base.render 'haml/rhtml/standard'
render @base, 'haml/templates/standard'
render @base, 'haml/rhtml/standard'
haml { @base.render 'haml/templates/standard' }
erb { @base.render 'haml/rhtml/standard' }
haml { render @base, 'haml/templates/standard' }
erb { render @base, 'haml/rhtml/standard' }
Haml::Template.options[:ugly] = true
render @base, 'haml/templates/standard_ugly'
haml_ugly { render @base, 'haml/templates/standard_ugly' }
end
report "ActionView with deep partials" do
@base = view
@base.unmemoize_all
Haml::Template.options[:ugly] = false
# To cache the template
@base.render 'haml/templates/action_view'
@base.render 'haml/rhtml/action_view'
render @base, 'haml/templates/action_view'
render @base, 'haml/rhtml/action_view'
haml { @base.render 'haml/templates/action_view' }
erb { @base.render 'haml/rhtml/action_view' }
haml { render @base, 'haml/templates/action_view' }
erb { render @base, 'haml/rhtml/action_view' }
Haml::Template.options[:ugly] = true
render @base, 'haml/templates/action_view_ugly'
haml_ugly { render @base, 'haml/templates/action_view_ugly' }
end
end
Benchmark.warmer(times) do
RBench.run(times) do
sass_template = File.read("#{File.dirname(__FILE__)}/sass/templates/complex.sass")
report("Sass") { Sass::Engine.new(sass_template).render }

View file

@ -0,0 +1,9 @@
%h2 This is a pretty complicated partial
.partial
%p It has several nested partials,
%ul
- 5.times do
%li
%strong Partial:
- @nesting = 5
= render :partial => 'haml/templates/av_partial_2_ugly'

View file

@ -0,0 +1,5 @@
- @nesting -= 1
.partial{:level => @nesting}
%h3 This is a crazy deep-nested partial.
%p== Nesting level #{@nesting}
= render :partial => 'haml/templates/av_partial_2_ugly' if @nesting > 0

View file

@ -0,0 +1,47 @@
!!!
%html{html_attrs}
%head
%title Hampton Catlin Is Totally Awesome
%meta{"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8"}
%body
%h1
This is very much like the standard template,
except that it has some ActionView-specific stuff.
It's only used for benchmarking.
.crazy_partials= render :partial => 'haml/templates/av_partial_1_ugly'
/ You're In my house now!
.header
Yes, ladies and gentileman. He is just that egotistical.
Fantastic! This should be multi-line output
The question is if this would translate! Ahah!
= 1 + 9 + 8 + 2 #numbers should work and this should be ignored
#body= " Quotes should be loved! Just like people!"
- 120.times do |number|
- number
Wow.|
%p
= "Holy cow " + |
"multiline " + |
"tags! " + |
"A pipe (|) even!" |
= [1, 2, 3].collect { |n| "PipesIgnored|" }
= [1, 2, 3].collect { |n| |
n.to_s |
}.join("|") |
%div.silent
- foo = String.new
- foo << "this"
- foo << " shouldn't"
- foo << " evaluate"
= foo + " but now it should!"
-# Woah crap a comment!
-# That was a line that shouldn't close everything.
%ul.really.cool
- ('a'..'f').each do |a|
%li= a
#combo.of_divs_with_underscore= @should_eval = "with this text"
= [ 104, 101, 108, 108, 111 ].map do |byte|
- byte.chr
.footer
%strong.shout= "This is a really long ruby quote. It should be loved and wrapped because its more than 50 characters. This value may change in the future and this test may look stupid. \nSo, I'm just making it *really* long. God, I hope this works"

View file

@ -0,0 +1 @@
standard.haml