[11.x] Memoize requiring of view files to improve loop performance #51139
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.
Spent some time on this as a result of Taylor's tweet: https://twitter.com/taylorotwell/status/1781039378376146970
This reduces the main overhead of
require
calls when looping over 1000 components by storing the code, and running it througheval
.This seems to be something that Twig does as well when I was researching how evil calling eval in this case is https://github.com/twigphp/Twig/blob/12625c0c050db5a71d94ab8d599bf711673a41c3/src/Environment.php#L384 though I'm not that familiar with Twig.
This lowers the rendering in a testcase for me from 25ms to 11ms, though I'm not sure we'd want to use
eval
Thanks to @mpociot mentioning it, it also skips an extra
file_exists
check.