From 5454e9bf4afd9f9d5ba439471cc33be92f6d1152 Mon Sep 17 00:00:00 2001 From: Paarth Madan Date: Wed, 19 Jan 2022 11:41:52 -0500 Subject: [PATCH] Benchmark: Compare LazyLoad vs Simple backend --- test/benchmark/benchmark_lazyload_test.rb | 64 +++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/benchmark/benchmark_lazyload_test.rb diff --git a/test/benchmark/benchmark_lazyload_test.rb b/test/benchmark/benchmark_lazyload_test.rb new file mode 100644 index 00000000..6a505601 --- /dev/null +++ b/test/benchmark/benchmark_lazyload_test.rb @@ -0,0 +1,64 @@ +require 'test_helper' +require 'benchmark' +require 'securerandom' +require "byebug" + +class BenchmarkLazyLoadTest < I18n::TestCase + test "lazy load performance" do + benchmark(backend: I18n::Backend::LazyLoad.new) + end + + test "simple performance" do + benchmark(backend: I18n::Backend::Simple.new) + end + + def benchmark(backend:) + @backend = I18n.backend = backend + @backend.reload! + + en_files = create_temp_translation_files(locale: "en", num_files: 100, num_keys: 1000) + fr_files = create_temp_translation_files(locale: "fr", num_files: 100, num_keys: 1000) + de_files = create_temp_translation_files(locale: "de", num_files: 100, num_keys: 1000) + + Benchmark.bm do |x| + puts "\n" + x.report(@backend.class) do + I18n.with_locale(:en) do + @backend.eager_load! + end + end + end + + remove_tempfiles(en_files) + remove_tempfiles(fr_files) + remove_tempfiles(de_files) + end + + def create_temp_translation_files(locale:, num_files:, num_keys:) + paths = [] + num_files.times do |file_num| + path = File.join(Dir.tmpdir, "#{locale}-#{SecureRandom.uuid}.yml") + File.write(path, generate_random_file_content(locale, num_keys, file_num)) + + paths << path + I18n.load_path << path + end + paths + end + + def generate_random_file_content(locale, num_keys, file_num) + content = {} + num_keys.times do |key_num| + content["#{file_num}-#{key_num}"] = SecureRandom.alphanumeric + end + + { locale => content }.to_yaml + end + + def remove_tempfiles(paths) + paths.each do |path| + I18n.load_path.delete(path) + File.delete(path) if File.exist?(path) + end + end +end