Fix duplicate view template loading #51712
Open
+15
−4
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.
Motivation / Background
Currently, when rendering an
ActionView::Template
, the template source is loaded from the disk twice.During one rendering process,
Template#source
is called at least twice (once inencode!
and once instrict_locals!
), each of these calls runs@source.to_s
. As@source
is usually aTemplate::Sources::File
,#to_s
hits the disk to load the template.It is unnecessary to load the file from disk more than once just to check whether the
# locals:
comment is present.Detail
This Pull Request changes the
Template#source
so that it memoizes the loaded source.Additional information
This pull request introduces a small behavior change: The
# locals: (...)
comment is now removed from the source before passing the source to the handler. It looks like this was the intended behavior all along. Previously the linehad no effect, because the source was reloaded from disk afterwards and the magic comment was present again.
Checklist
Before submitting the PR make sure the following are checked:
[Fix #issue-number]