Cleanup code
This commit is contained in:
parent
5940fce015
commit
72089c5d4b
74
README.md
74
README.md
|
@ -37,55 +37,55 @@ bundle install
|
||||||
## Compilation (small template) - 1.000 runs ##
|
## Compilation (small template) - 1.000 runs ##
|
||||||
############################################################
|
############################################################
|
||||||
user system total real
|
user system total real
|
||||||
string 0.020000 0.020000 0.040000 ( 0.043484)
|
string 0.030000 0.020000 0.050000 ( 0.044899)
|
||||||
erubis 0.060000 0.020000 0.080000 ( 0.079481)
|
erubis 0.060000 0.030000 0.090000 ( 0.086133)
|
||||||
erb 0.250000 0.020000 0.270000 ( 0.266557)
|
erb 0.260000 0.020000 0.280000 ( 0.278659)
|
||||||
haml 0.850000 0.030000 0.880000 ( 0.879533)
|
haml 0.840000 0.030000 0.870000 ( 0.869582)
|
||||||
slim 1.970000 0.030000 2.000000 ( 2.004234)
|
slim 1.950000 0.030000 1.980000 ( 1.993040)
|
||||||
mustache 0.030000 0.020000 0.050000 ( 0.047097)
|
mustache 0.020000 0.020000 0.040000 ( 0.035736)
|
||||||
liquid 0.060000 0.010000 0.070000 ( 0.072771)
|
liquid 0.060000 0.020000 0.080000 ( 0.076226)
|
||||||
markaby 0.020000 0.020000 0.040000 ( 0.037510)
|
markaby 0.030000 0.010000 0.040000 ( 0.041241)
|
||||||
builder 0.020000 0.020000 0.040000 ( 0.039034)
|
builder 0.020000 0.020000 0.040000 ( 0.041957)
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
## Render (small template) - 10.000 runs ##
|
## Render (small template) - 10.000 runs ##
|
||||||
############################################################
|
############################################################
|
||||||
user system total real
|
user system total real
|
||||||
string 0.080000 0.000000 0.080000 ( 0.085994)
|
string 0.080000 0.010000 0.090000 ( 0.086388)
|
||||||
erubis 0.090000 0.000000 0.090000 ( 0.094257)
|
erubis 0.130000 0.010000 0.140000 ( 0.148000)
|
||||||
erb 0.140000 0.010000 0.150000 ( 0.139963)
|
erb 0.120000 0.010000 0.130000 ( 0.117680)
|
||||||
haml 0.220000 0.000000 0.220000 ( 0.221741)
|
haml 0.220000 0.000000 0.220000 ( 0.223524)
|
||||||
slim 0.220000 0.000000 0.220000 ( 0.218883)
|
slim 0.270000 0.000000 0.270000 ( 0.268160)
|
||||||
mustache 2.480000 0.030000 2.510000 ( 2.515265)
|
mustache 2.380000 0.060000 2.440000 ( 2.448563)
|
||||||
liquid 0.410000 0.010000 0.420000 ( 0.414001)
|
liquid 0.380000 0.000000 0.380000 ( 0.392713)
|
||||||
markaby 2.390000 0.010000 2.400000 ( 2.401374)
|
markaby 2.410000 0.040000 2.450000 ( 2.441700)
|
||||||
builder 1.900000 0.010000 1.910000 ( 1.904287)
|
builder 1.840000 0.010000 1.850000 ( 1.848402)
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
## Compilation (big template) - 1.000 runs ##
|
## Compilation (big template) - 1.000 runs ##
|
||||||
############################################################
|
############################################################
|
||||||
user system total real
|
user system total real
|
||||||
string 0.030000 0.010000 0.040000 ( 0.043037)
|
string 0.030000 0.010000 0.040000 ( 0.044474)
|
||||||
erubis 0.130000 0.020000 0.150000 ( 0.156926)
|
erubis 0.160000 0.030000 0.190000 ( 0.183202)
|
||||||
erb 0.320000 0.020000 0.340000 ( 0.339588)
|
erb 0.300000 0.020000 0.320000 ( 0.321878)
|
||||||
haml 1.210000 0.030000 1.240000 ( 1.231755)
|
haml 1.160000 0.030000 1.190000 ( 1.193374)
|
||||||
slim 2.460000 0.030000 2.490000 ( 2.491272)
|
slim 2.380000 0.040000 2.420000 ( 2.423795)
|
||||||
mustache 0.030000 0.010000 0.040000 ( 0.047284)
|
mustache 0.020000 0.020000 0.040000 ( 0.029639)
|
||||||
liquid 0.110000 0.020000 0.130000 ( 0.124385)
|
liquid 0.110000 0.020000 0.130000 ( 0.132466)
|
||||||
markaby 0.020000 0.020000 0.040000 ( 0.037225)
|
markaby 0.020000 0.010000 0.030000 ( 0.039952)
|
||||||
builder 0.020000 0.010000 0.030000 ( 0.038738)
|
builder 0.030000 0.020000 0.050000 ( 0.043474)
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
## Render (big template, 150KB data) - 30 runs ##
|
## Render (big template, 150KB data) - 50 runs ##
|
||||||
############################################################
|
############################################################
|
||||||
user system total real
|
user system total real
|
||||||
string 0.150000 0.010000 0.160000 ( 0.155014)
|
string 0.200000 0.030000 0.230000 ( 0.220962)
|
||||||
erubis 0.130000 0.010000 0.140000 ( 0.135254)
|
erubis 0.210000 0.010000 0.220000 ( 0.225647)
|
||||||
erb 0.200000 0.000000 0.200000 ( 0.205322)
|
erb 0.310000 0.010000 0.320000 ( 0.321146)
|
||||||
haml 0.300000 0.010000 0.310000 ( 0.310301)
|
haml 0.460000 0.010000 0.470000 ( 0.474801)
|
||||||
slim 0.420000 0.000000 0.420000 ( 0.423397)
|
slim 0.710000 0.010000 0.720000 ( 0.717359)
|
||||||
mustache 1.140000 0.000000 1.140000 ( 1.137800)
|
mustache 1.900000 0.010000 1.910000 ( 1.909129)
|
||||||
liquid 3.210000 0.010000 3.220000 ( 3.221065)
|
liquid 5.230000 0.030000 5.260000 ( 5.265334)
|
||||||
markaby 3.550000 0.020000 3.570000 ( 3.560586)
|
markaby 5.760000 0.010000 5.770000 ( 5.766475)
|
||||||
builder 5.620000 0.010000 5.630000 ( 5.637401)
|
builder 9.150000 0.020000 9.170000 ( 9.168262)
|
||||||
```
|
```
|
||||||
|
|
94
benchmark.rb
94
benchmark.rb
|
@ -1,74 +1,14 @@
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
|
require File.expand_path('../lib/workbench', __FILE__)
|
||||||
|
|
||||||
require 'rubygems'
|
|
||||||
require 'bundler/setup'
|
|
||||||
require 'benchmark'
|
|
||||||
require 'yaml'
|
|
||||||
require 'ostruct'
|
|
||||||
|
|
||||||
require 'erubis'
|
|
||||||
require 'haml'
|
|
||||||
require 'slim'
|
|
||||||
require 'liquid'
|
|
||||||
require 'mustache'
|
|
||||||
require 'tilt/erb'
|
|
||||||
require 'tilt/erubis'
|
|
||||||
require 'tilt/haml'
|
|
||||||
require 'tilt/liquid'
|
|
||||||
|
|
||||||
# Terminal settings
|
|
||||||
TERMINAL_WIDTH = 60
|
|
||||||
BM_WIDTH = 46
|
|
||||||
|
|
||||||
# Benchmark settings
|
|
||||||
COMPILE_LOOPS = 1000
|
|
||||||
RENDER_LOOPS = 1000
|
|
||||||
|
|
||||||
templates = {}
|
|
||||||
big_data_file = File.expand_path('../data/big.yml', __FILE__)
|
big_data_file = File.expand_path('../data/big.yml', __FILE__)
|
||||||
|
|
||||||
unless File.exist?(big_data_file)
|
raise <<-AGRR unless File.exist?(big_data_file)
|
||||||
raise 'Big data file not found. Please generate it with "./fakedata.rb 10000 > data/big.yml"'
|
Big data file not found. Please generate it by running this:
|
||||||
end
|
$ ./fakedata.rb 10000 > data/big.yml
|
||||||
|
AGRR
|
||||||
|
|
||||||
small_data = {window_title: 'Greetings!', username: '%username%'}
|
Workbench::Benchmark.describe_engines(
|
||||||
big_data = YAML.load_file(big_data_file)
|
|
||||||
|
|
||||||
def banner title
|
|
||||||
puts '#' * TERMINAL_WIDTH
|
|
||||||
puts '##' + title.center(TERMINAL_WIDTH - 4) + '##'
|
|
||||||
puts '#' * TERMINAL_WIDTH
|
|
||||||
end
|
|
||||||
|
|
||||||
def benchmark params
|
|
||||||
raise 'No block given' unless block_given?
|
|
||||||
|
|
||||||
Benchmark.bm(TERMINAL_WIDTH - BM_WIDTH) do |x|
|
|
||||||
ENGINES.each do |name, attrs|
|
|
||||||
x.report(name) do
|
|
||||||
params[:loops].times{ yield(name, attrs) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module Wrappers
|
|
||||||
class Base
|
|
||||||
attr_reader :tpl
|
|
||||||
|
|
||||||
def initialize path
|
|
||||||
@tpl = File.read(path)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Mustache < Base
|
|
||||||
def render context, args = {}
|
|
||||||
::Mustache.render(tpl, args)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
ENGINES = {
|
|
||||||
string: {
|
string: {
|
||||||
class: Tilt::StringTemplate,
|
class: Tilt::StringTemplate,
|
||||||
extension: 'str'
|
extension: 'str'
|
||||||
|
@ -105,17 +45,18 @@ ENGINES = {
|
||||||
class: Tilt::BuilderTemplate,
|
class: Tilt::BuilderTemplate,
|
||||||
extension: 'builder'
|
extension: 'builder'
|
||||||
},
|
},
|
||||||
}
|
)
|
||||||
|
|
||||||
banner 'Compilation (small template) - 1.000 runs'
|
templates = {}
|
||||||
benchmark(loops: 1000) do |name, attrs|
|
small_data = {window_title: 'Greetings!', username: '%username%'}
|
||||||
|
big_data = YAML.load_file(big_data_file)
|
||||||
|
|
||||||
|
Workbench::Benchmark.new(loops: 1000, title: 'Compilation (small template) - 1.000 runs') do |name, attrs|
|
||||||
template_path = File.expand_path('../templates/%s/small.%s', __FILE__) % [name, attrs[:extension]]
|
template_path = File.expand_path('../templates/%s/small.%s', __FILE__) % [name, attrs[:extension]]
|
||||||
templates[name] = attrs[:class].new(template_path)
|
templates[name] = attrs[:class].new(template_path)
|
||||||
end
|
end
|
||||||
puts
|
|
||||||
|
|
||||||
banner 'Render (small template) - 10.000 runs'
|
Workbench::Benchmark.new(loops: 10000, title: 'Render (small template) - 10.000 runs') do |name, attrs|
|
||||||
benchmark(loops: 10_000) do |name, attrs|
|
|
||||||
case name
|
case name
|
||||||
when :slim
|
when :slim
|
||||||
templates[name].render(OpenStruct.new(small_data))
|
templates[name].render(OpenStruct.new(small_data))
|
||||||
|
@ -123,17 +64,13 @@ benchmark(loops: 10_000) do |name, attrs|
|
||||||
templates[name].render(Object, small_data)
|
templates[name].render(Object, small_data)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
puts
|
|
||||||
|
|
||||||
banner 'Compilation (big template) - 1.000 runs'
|
Workbench::Benchmark.new(loops: 1000, title: 'Compilation (big template) - 1.000 runs') do |name, attrs|
|
||||||
benchmark(loops: 1000) do |name, attrs|
|
|
||||||
template_path = File.expand_path('../templates/%s/big.%s', __FILE__) % [name, attrs[:extension]]
|
template_path = File.expand_path('../templates/%s/big.%s', __FILE__) % [name, attrs[:extension]]
|
||||||
templates[name] = attrs[:class].new(template_path)
|
templates[name] = attrs[:class].new(template_path)
|
||||||
end
|
end
|
||||||
puts
|
|
||||||
|
|
||||||
banner 'Render (big template, 1.5MB data) - 30 runs'
|
Workbench::Benchmark.new(loops: 50, title: 'Render (big template, 150KB data) - 50 runs') do |name, attrs|
|
||||||
benchmark(loops: 30) do |name, attrs|
|
|
||||||
case name
|
case name
|
||||||
when :slim
|
when :slim
|
||||||
templates[name].render(OpenStruct.new(customers: big_data))
|
templates[name].render(OpenStruct.new(customers: big_data))
|
||||||
|
@ -141,4 +78,3 @@ benchmark(loops: 30) do |name, attrs|
|
||||||
templates[name].render(Object, {customers: big_data})
|
templates[name].render(Object, {customers: big_data})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
puts
|
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
$:.unshift File.dirname(__FILE__)
|
||||||
|
|
||||||
|
require 'rubygems'
|
||||||
|
require 'bundler/setup'
|
||||||
|
require 'benchmark'
|
||||||
|
require 'yaml'
|
||||||
|
require 'ostruct'
|
||||||
|
|
||||||
|
require 'erubis'
|
||||||
|
require 'haml'
|
||||||
|
require 'slim'
|
||||||
|
require 'liquid'
|
||||||
|
require 'mustache'
|
||||||
|
require 'tilt/erb'
|
||||||
|
require 'tilt/erubis'
|
||||||
|
require 'tilt/haml'
|
||||||
|
require 'tilt/liquid'
|
||||||
|
|
||||||
|
require 'workbench/benchmark'
|
||||||
|
require 'workbench/wrappers/base'
|
||||||
|
require 'workbench/wrappers/mustache'
|
|
@ -0,0 +1,28 @@
|
||||||
|
module Workbench
|
||||||
|
class Benchmark
|
||||||
|
class << self
|
||||||
|
def describe_engines engines
|
||||||
|
@@engines = engines
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
TERMINAL_WIDTH = 60
|
||||||
|
BM_WIDTH = 46
|
||||||
|
|
||||||
|
def initialize args, &block
|
||||||
|
puts '#' * TERMINAL_WIDTH
|
||||||
|
puts '##' + args[:title].center(TERMINAL_WIDTH - 4) + '##'
|
||||||
|
puts '#' * TERMINAL_WIDTH
|
||||||
|
|
||||||
|
::Benchmark.bm(TERMINAL_WIDTH - BM_WIDTH) do |benchmark|
|
||||||
|
@@engines.each do |name, attrs|
|
||||||
|
benchmark.report(name) do
|
||||||
|
args[:loops].times{ yield(name, attrs) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
puts
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,9 @@
|
||||||
|
module Wrappers
|
||||||
|
class Base
|
||||||
|
attr_reader :tpl
|
||||||
|
|
||||||
|
def initialize path
|
||||||
|
@tpl = File.read(path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
module Wrappers
|
||||||
|
class Mustache < Base
|
||||||
|
def render context, args = {}
|
||||||
|
::Mustache.render(tpl, args)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue