rom-rb / rom-factory

Data generator with support for persistence backends
MIT License
83 stars 42 forks source link

Cache faker constants #66

Closed flash-gordon closed 3 years ago

flash-gordon commented 3 years ago

Naive benchmark

require 'faker'
require 'dry/core/cache'
require 'dry/core/inflector'
require 'benchmark/ips'

class Context
  extend ::Dry::Core::Cache

  def get_faker_constant_cache(type)
    fetch_or_store(:faker, type) do
      ::Faker.const_get(::Dry::Core::Inflector.classify(type.to_s))
    end
  end

  def get_faker_constant(type)
    ::Faker.const_get(::Dry::Core::Inflector.classify(type.to_s))
  end
end

context = Context.new

Benchmark.ips do |x|
  x.report('cached') do
    context.get_faker_constant_cache(:lorem)
  end

  x.report('non-cached') do
    context.get_faker_constant(:lorem)
  end

  x.compare!
end

Results

Warming up --------------------------------------
              cached   189.223k i/100ms
          non-cached     4.880k i/100ms
Calculating -------------------------------------
              cached      1.885M (± 3.0%) i/s -      9.461M in   5.022745s
          non-cached     48.538k (± 3.9%) i/s -    244.000k in   5.035273s

Comparison:
              cached:  1885412.7 i/s
          non-cached:    48538.0 i/s - 38.84x  (± 0.00) slower