mirror of
https://github.com/haml/haml.git
synced 2022-11-09 12:33:31 -05:00
140 lines
5.4 KiB
Ruby
140 lines
5.4 KiB
Ruby
#!/usr/bin/env ruby
|
|
|
|
=begin
|
|
The MIT License
|
|
|
|
Copyright (c) 2010 - 2015 Slim Team
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
=end
|
|
|
|
#
|
|
# Original: https://github.com/slim-template/slim/blob/v3.0.6/benchmarks/run-benchmarks.rb
|
|
#
|
|
# SlimBenchmarks with following modifications:
|
|
# 1. Skipping slow engines, tilt and parsing benches.
|
|
# 2. All Ruby script and attributes are escaped for fairness.
|
|
# 3. Faml and Hamlit are added.
|
|
#
|
|
|
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'), File.dirname(__FILE__))
|
|
|
|
require 'slim'
|
|
require 'context'
|
|
|
|
require 'benchmark/ips'
|
|
require 'tilt'
|
|
require 'erubis'
|
|
require 'erb'
|
|
require 'haml'
|
|
require 'faml'
|
|
require 'hamlit'
|
|
|
|
class SlimBenchmarks
|
|
def initialize(slow)
|
|
@benches = []
|
|
|
|
@erb_code = File.read(File.dirname(__FILE__) + '/view.erb')
|
|
@haml_code = File.read(File.dirname(__FILE__) + '/view.haml')
|
|
@slim_code = File.read(File.dirname(__FILE__) + '/view.slim')
|
|
|
|
init_compiled_benches
|
|
# init_tilt_benches
|
|
# init_parsing_benches if slow
|
|
end
|
|
|
|
def init_compiled_benches
|
|
haml_pretty = Haml::Engine.new(@haml_code, format: :html5, escape_html: true)
|
|
haml_ugly = Haml::Engine.new(@haml_code, format: :html5, ugly: true, escape_html: true)
|
|
|
|
context = Context.new
|
|
|
|
haml_pretty.def_method(context, :run_haml_pretty)
|
|
haml_ugly.def_method(context, :run_haml_ugly)
|
|
context.instance_eval %{
|
|
def run_erubis; #{Erubis::Eruby.new(@erb_code).src}; end
|
|
def run_temple_erb; #{Temple::ERB::Engine.new.call @erb_code}; end
|
|
def run_fast_erubis; #{Erubis::FastEruby.new(@erb_code).src}; end
|
|
def run_slim_pretty; #{Slim::Engine.new(pretty: true).call @slim_code}; end
|
|
def run_slim_ugly; #{Slim::Engine.new.call @slim_code}; end
|
|
def run_faml; #{Faml::Engine.new.call @haml_code}; end
|
|
def run_hamlit; #{Hamlit::Engine.new.call @haml_code}; end
|
|
}
|
|
|
|
# bench('(1) erb') { context.run_erb }
|
|
bench("erubis v#{Erubis::VERSION}") { context.run_erubis }
|
|
# bench('(1) fast erubis') { context.run_fast_erubis }
|
|
# bench('(1) temple erb') { context.run_temple_erb }
|
|
# bench('(1) slim pretty') { context.run_slim_pretty }
|
|
bench("slim v#{Slim::VERSION}") { context.run_slim_ugly }
|
|
# bench('(1) haml pretty') { context.run_haml_pretty }
|
|
bench("haml v#{Haml::VERSION}") { context.run_haml_ugly }
|
|
bench("faml v#{Faml::VERSION}") { context.run_faml }
|
|
bench("hamlit v#{Hamlit::VERSION}") { context.run_hamlit }
|
|
end
|
|
|
|
def init_tilt_benches
|
|
tilt_erb = Tilt::ERBTemplate.new { @erb_code }
|
|
tilt_erubis = Tilt::ErubisTemplate.new { @erb_code }
|
|
tilt_temple_erb = Temple::ERB::Template.new { @erb_code }
|
|
tilt_haml_pretty = Tilt::HamlTemplate.new(format: :html5) { @haml_code }
|
|
tilt_haml_ugly = Tilt::HamlTemplate.new(format: :html5, ugly: true) { @haml_code }
|
|
tilt_slim_pretty = Slim::Template.new(pretty: true) { @slim_code }
|
|
tilt_slim_ugly = Slim::Template.new { @slim_code }
|
|
|
|
context = Context.new
|
|
|
|
bench('(2) erb') { tilt_erb.render(context) }
|
|
bench('(2) erubis') { tilt_erubis.render(context) }
|
|
bench('(2) temple erb') { tilt_temple_erb.render(context) }
|
|
bench('(2) slim pretty') { tilt_slim_pretty.render(context) }
|
|
bench('(2) slim ugly') { tilt_slim_ugly.render(context) }
|
|
bench('(2) haml pretty') { tilt_haml_pretty.render(context) }
|
|
bench('(2) haml ugly') { tilt_haml_ugly.render(context) }
|
|
end
|
|
|
|
def init_parsing_benches
|
|
context = Context.new
|
|
context_binding = context.instance_eval { binding }
|
|
|
|
bench('(3) erb') { ERB.new(@erb_code).result(context_binding) }
|
|
bench('(3) erubis') { Erubis::Eruby.new(@erb_code).result(context_binding) }
|
|
bench('(3) fast erubis') { Erubis::FastEruby.new(@erb_code).result(context_binding) }
|
|
bench('(3) temple erb') { Temple::ERB::Template.new { @erb_code }.render(context) }
|
|
bench('(3) slim pretty') { Slim::Template.new(pretty: true) { @slim_code }.render(context) }
|
|
bench('(3) slim ugly') { Slim::Template.new { @slim_code }.render(context) }
|
|
bench('(3) haml pretty') { Haml::Engine.new(@haml_code, format: :html5).render(context) }
|
|
bench('(3) haml ugly') { Haml::Engine.new(@haml_code, format: :html5, ugly: true).render(context) }
|
|
end
|
|
|
|
def run
|
|
Benchmark.ips do |x|
|
|
@benches.each do |name, block|
|
|
x.report(name.to_s, &block)
|
|
end
|
|
x.compare!
|
|
end
|
|
end
|
|
|
|
def bench(name, &block)
|
|
@benches.push([name, block])
|
|
end
|
|
end
|
|
|
|
SlimBenchmarks.new(ENV['slow']).run
|