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.
When retrieving a value from Dry::Configurable::Config#[], the value is only cached to the
_values
array if it is considered "cloneable". Unfortunately, checking for cloneability is a costly exercise (at least when called at the frequency of Dry::View).The code states that this occurs as a means of helping understand when a setting has been mutated; however, I would like to suggest that the increase in performance that can be achieved in Dry::View rendering is more valuable. Saying this, I suggest modifying Dry::View rather than Dry::Configurable::Config because I doubt most uses have the same performance requirements.
In my benchmarks, I'm using a highly contrived template that loads 100 nested templates that do nothing more than print out their name as well a couple of random numbers to ensure values aren't being cached so, while it is designed somewhat to replicate a site with many components, it's far from true to life. Saying this, my tests have found this has given me a roughly 70% performance increase:
It's tricky to solve this elegantly so I'm very open to discussing alternative approaches.