Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize Backend::Simple#available_locales #406

Merged
merged 1 commit into from Feb 9, 2018

Commits on Feb 6, 2018

  1. Optimize Backend::Simple#available_locales

    Previously available_locales was a little bit slow. For each locale in
    translations it would:
    * build a new array of all the top-level keys in that locale
    * build a second array of those keys except :i18n
    * add that locale to the list if the second array was not empty
    
    For locales with many translations this can build somewhat sizeable
    arrays.
    
    Instead we can perform the same operation, rejecting locales with either
    no keys or only :i18n without allocating any new objects. We reject
    based on the condition:
    
        data.size <= 1 && (data.empty? || data.has_key?(:i18n))
    
    This ends up being about 4x faster (though this of course depends on
    the exact locales being used):
    
        Benchmark.ips do |x|
          x.report("I18n.available_locales") do
            I18n.available_locales
          end
        end
    
    Before:
    
        11.447k (± 2.9%) i/s -     57.869k in   5.059738s
    
    After:
    
        47.810k (± 2.8%) i/s -    242.060k in   5.067332s
    jhawthorn committed Feb 6, 2018
    Copy the full SHA
    7eb3576 View commit details
    Browse the repository at this point in the history