benchmarks/interactor/pipeline_success.rb in u-service-0.12.0 vs benchmarks/interactor/pipeline_success.rb in u-service-0.13.0

- old
+ new

@@ -3,15 +3,47 @@ gemfile do source 'https://rubygems.org' gem 'benchmark-ips', '~> 2.7', '>= 2.7.2' gem 'interactor', '~> 3.1', '>= 3.1.1' - gem 'u-service', '~> 0.11.0' + gem 'u-service', '~> 0.12.0' end require 'benchmark/ips' +module IT + class ConvertToNumbers + include Interactor + + def call + numbers = context.numbers + + if numbers.all? { |value| String(value) =~ /\d+/ } + context.numbers = numbers.map(&:to_i) + else + context.fail! numbers: 'must contain only numeric types' + end + end + end + + class Add2 + include Interactor + + def call + numbers = context.numbers + + context.numbers = numbers.map { |number| number + 2 } + end + end + + class Add2ToAllNumbers + include Interactor::Organizer + + organize ConvertToNumbers, Add2 + end +end + module MSB class ConvertToNumbers < Micro::Service::Base attribute :numbers def call! @@ -56,79 +88,47 @@ end Add2ToAllNumbers = ConvertToNumbers >> Add2 end -module IT - class ConvertToNumbers - include Interactor - - def call - numbers = context.numbers - - if numbers.all? { |value| String(value) =~ /\d+/ } - context.numbers = numbers.map(&:to_i) - else - context.fail! numbers: 'must contain only numeric types' - end - end - end - - class Add2 - include Interactor - - def call - numbers = context.numbers - - context.numbers = numbers.map { |number| number + 2 } - end - end - - class Add2ToAllNumbers - include Interactor::Organizer - - organize ConvertToNumbers, Add2 - end -end - NUMBERS = {numbers: %w[1 1 2 2 3 4]} Benchmark.ips do |x| x.config(:time => 5, :warmup => 2) x.time = 5 x.warmup = 2 + x.report('Interactor::Organizer') do + IT::Add2ToAllNumbers.call(NUMBERS) + end + x.report('Pipeline of Micro::Service::Base') do MSB::Add2ToAllNumbers.call(NUMBERS) end x.report('Pipeline of Micro::Service::Strict') do MSS::Add2ToAllNumbers.call(NUMBERS) end - x.report('Interactor::Organizer') do - IT::Add2ToAllNumbers.call(NUMBERS) - end - x.compare! end # Warming up -------------------------------------- +# Interactor::Organizer +# 5.047k i/100ms # Pipeline of Micro::Service::Base -# 3.578k i/100ms +# 8.069k i/100ms # Pipeline of Micro::Service::Strict -# 3.177k i/100ms -# Interactor::Organizer -# 4.695k i/100ms +# 6.706k i/100ms # Calculating ------------------------------------- +# Interactor::Organizer +# 50.656k (± 2.4%) i/s - 257.397k in 5.084184s # Pipeline of Micro::Service::Base -# 36.087k (± 6.9%) i/s - 182.478k in 5.084835s +# 83.309k (± 1.5%) i/s - 419.588k in 5.037749s # Pipeline of Micro::Service::Strict -# 31.329k (± 6.7%) i/s - 158.850k in 5.094012s -# Interactor::Organizer -# 46.294k (± 6.6%) i/s - 234.750k in 5.093117s +# 69.195k (± 1.7%) i/s - 348.712k in 5.041089s # Comparison: -# Interactor::Organizer: 46293.6 i/s -# Pipeline of Micro::Service::Base: 36086.5 i/s - 1.28x slower -# Pipeline of Micro::Service::Strict: 31328.5 i/s - 1.48x slower +# Pipeline of Micro::Service::Base: 83309.3 i/s +# Pipeline of Micro::Service::Strict: 69195.1 i/s - 1.20x slower +# Interactor::Organizer: 50656.5 i/s - 1.64x slower