[rubygems/rubygems] (Further) Improve Bundler::Settings#[] performance and memory usage
I previously identified and improved this method over in https://github.com/rubygems/rubygems/pull/6884 but while reviewing another memory_profiler profile, I realized another gain we can eek out. This method keeps comes up in part because `configs` is allocating a new Hash every time. My last change took advantage of that by using `map!` on it. `configs` is called quite often, including in this `[]` method, so there's a benefit to memoizing it. Back in `[]`, logically we are trying to find the first Hash in `configs` that has a value for the given key. Currently, we end up `map` and `compact` to just get that value. Instead, we can use a loop over `configs`, and break when we find the value for the key. https://github.com/rubygems/rubygems/commit/b913cfc87b
This commit is contained in:
parent
27024004fa
commit
6a876a61d7
@ -102,10 +102,13 @@ module Bundler
|
||||
def [](name)
|
||||
key = key_for(name)
|
||||
|
||||
values = configs.values
|
||||
values.map! {|config| config[key] }
|
||||
values.compact!
|
||||
value = values.first
|
||||
value = nil
|
||||
configs.each do |_, config|
|
||||
if config[key]
|
||||
value = config[key]
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
converted_value(value, name)
|
||||
end
|
||||
@ -316,7 +319,7 @@ module Bundler
|
||||
private
|
||||
|
||||
def configs
|
||||
{
|
||||
@configs ||= {
|
||||
:temporary => @temporary,
|
||||
:local => @local_config,
|
||||
:env => @env_config,
|
||||
|
Loading…
x
Reference in New Issue
Block a user