From 20ad16a4f4f389aae70913cc0ee5abea0228e1db Mon Sep 17 00:00:00 2001 From: Paarth Madan Date: Wed, 2 Feb 2022 20:16:34 -0500 Subject: [PATCH] Benchmark Test: Compare LazyLoadable vs Simple backend --- .../benchmark/benchmark_lazy_loadable_test.rb | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 test/benchmark/benchmark_lazy_loadable_test.rb diff --git a/test/benchmark/benchmark_lazy_loadable_test.rb b/test/benchmark/benchmark_lazy_loadable_test.rb new file mode 100644 index 00000000..ac1777fc --- /dev/null +++ b/test/benchmark/benchmark_lazy_loadable_test.rb @@ -0,0 +1,65 @@ +require 'test_helper' +require 'benchmark' +require 'securerandom' + +class BenchmarkLazyLoadableTest < I18n::TestCase + test "lazy load performance" do + benchmark(backend: I18n::Backend::LazyLoadable.new(lazy_load: true)) + end + + test "simple performance" do + benchmark(backend: I18n::Backend::Simple.new) + end + + def benchmark(backend:) + @backend = I18n.backend = backend + @backend.reload! + + num_files = 100 + num_keys = 100 + + en_files = create_temp_translation_files(locale: "en", num_files: num_files, num_keys: num_keys) + fr_files = create_temp_translation_files(locale: "fr", num_files: num_files, num_keys: num_keys) + de_files = create_temp_translation_files(locale: "de", num_files: num_files, num_keys: num_keys) + + Benchmark.bm do |x| + puts "\n" + x.report(@backend.class) do + I18n.with_locale(:en) { I18n.t("1.1") } + assert_equal num_keys * num_files, translations[:en].size + 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