Optimize Backend::Flatten#flatten_keys
allocations
#716
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Refactors
Flatten#flatten_keys
logic so it allocates less objects in memory, and is slightly faster.Reduction in memory depends on the size of the locale file; the bigger the file, the fewer the allocations when storing translations. Some examples (smaller to bigger locales):
Memory profiling
Script
Make sure to download the Redmine file, and add
memory_profiler
to Gemfile. Place the script in repo root and run withruby profile.rb
.Profile report before
Profile report after
Summary:
Notice that fewer allocations are due to no Array instances after the optimization, and also fewer Strings.
Benchmark
I used the already provided
benchmark/run.rb
onexample.yml
from the repo.Report (5 runs in total)
Best case scenario, performance is slightly improved. Worst case, it's the same as before. On other locale files, I get similar benchmark results.