Add Config subclass with immutable Equalizer #156
+5
−1
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 extending Dry::Configurable, the default is to initialize a Dry::Equalizer without immutability on the hash method.
When Dry::View fetches or stores a template, Dry::Core::Cache uses a hash of the arguments. Since this hashing will occur for every nested template, it can be quite computationally demanding. In the case of fetching or storing templates, the values being hashed shouldn't change and so the result can be memoized.
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 75% performance increase:
It's tricky to solve this elegantly so I'm very open to discussing alternative approaches.
One thing I considered was if there is support for adjusting these values at runtime. I couldn't think of any legitimate reason to do that but, if such a reason exists, I'm sure we could find a solution