mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-16 01:10:41 -07:00
Add + tailor fluid benchmark
This commit is contained in:
+12
-8
@@ -1,8 +1,6 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
|
||||
|
||||
unless ENV.key?("BUNDLE_BIN_PATH")
|
||||
exec("bundle", "exec", "ruby", __FILE__, *ARGV)
|
||||
end
|
||||
@@ -156,6 +154,7 @@ def print_columns(cols)
|
||||
end
|
||||
end
|
||||
|
||||
ITERS = 1
|
||||
Benchmarks = Class.new do
|
||||
def define(_name, benchmark)
|
||||
@benchmark = benchmark
|
||||
@@ -167,27 +166,32 @@ Benchmarks = Class.new do
|
||||
parsed = Process.clock_gettime(Process::CLOCK_MONOTONIC, :microsecond)
|
||||
|
||||
# warmup
|
||||
1000.times { @benchmark.render}
|
||||
ITERS.times { @benchmark.render}
|
||||
warm = Process.clock_gettime(Process::CLOCK_MONOTONIC, :microsecond)
|
||||
|
||||
res = nil
|
||||
1000.times { res = @benchmark.render }
|
||||
ITERS.times { res = @benchmark.render }
|
||||
ran = Process.clock_gettime(Process::CLOCK_MONOTONIC, :microsecond)
|
||||
|
||||
puts res if res.is_a?(String)
|
||||
if res.is_a?(String)
|
||||
puts res
|
||||
puts "Output digest: #{Digest::SHA2.hexdigest(res)}"
|
||||
end
|
||||
|
||||
if ENV['SHOW_RUBY'] == '1'
|
||||
STDERR.puts "note: SHOW_RUBY prevents gathering parse metrics"
|
||||
STDERR.puts "render: #{(ran - warm) / 1000}µs"
|
||||
STDERR.puts "render: #{(ran - warm) / ITERS}µs"
|
||||
else
|
||||
STDERR.puts "parse: #{parsed - start}µs"
|
||||
STDERR.puts "render: #{(ran - warm) / 1000}µs"
|
||||
STDERR.puts "total: #{(ran - warm) / 1000 + (parsed - start)}µs"
|
||||
STDERR.puts "render: #{(ran - warm) / ITERS}µs"
|
||||
STDERR.puts "total: #{(ran - warm) / ITERS + (parsed - start)}µs"
|
||||
end
|
||||
end
|
||||
end.new
|
||||
|
||||
def execute
|
||||
require 'digest'
|
||||
|
||||
if ARGV.count != 2
|
||||
STDERR.puts "Usage: benchmark.rb record [output_path]"
|
||||
exit(1)
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
Benchmarks.define('simple_loop', Class.new do
|
||||
TEMPLATE = "{% for i in (1..1000) %}{{ i }}{% endfor %}"
|
||||
Benchmarks.define('fizzbuzz_10000', Class.new do
|
||||
TEMPLATE = <<~LIQUID
|
||||
{% for i in (1..#{ENV['COUNT'].to_i}) %}
|
||||
{% liquid
|
||||
assign rem_3 = i | modulo: 3
|
||||
assign rem_5 = i | modulo: 5
|
||||
if rem_3 == 0 and rem_5 == 0
|
||||
echo "Fizzbuzz"
|
||||
elsif rem_3 == 0
|
||||
echo "Fizz"
|
||||
elsif rem_5 == 0
|
||||
echo "Buzz"
|
||||
else
|
||||
echo i
|
||||
endif
|
||||
%}{% endfor %}
|
||||
LIQUID
|
||||
|
||||
def compile
|
||||
@parsed = Liquid::Template.parse(TEMPLATE)
|
||||
|
||||
Reference in New Issue
Block a user