mknichel/dedupe strings in module layers #18340
Open
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.
What kind of change does this PR introduce?
This pull request adds a layer of caching for strings that could be duplicated in modules across multiple layers. This change was motivated by an observation that there were many strings in the heap duplicated in a Next.js application that uses App Router, which uses layers in the implementation. After this pull request, these strings were deduplicated saving the memory for any file that appears in multiple layers.
The cache here is associated with the compilation in a weak map so it can be garbage collected after the compilation finishes.
There should be no visible behavior difference after this pull request.
Did you add tests for your changes?
New tests were not added since the behavior should be covered by existing integration tests that use layers.
Does this PR introduce a breaking change?
No, this PR is not a breaking change. No user visible behavior is affected.
What needs to be documented once your changes are merged?
No changes would need to be documented after this pull request. This pull request only affects internal implementation details.