Fix document registry creating duplicate buckets for projects with different pathsBasePath#63229
Open
ekazakov14 wants to merge 1 commit intomicrosoft:mainfrom
Conversation
|
@ekazakov14 please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes SourceFile cache reuse between projects.
I couldn't find an existing issue related to this. I don't expect this to be merged given the current state of the repo, but I'm publishing the change for visibility since I'll be applying it as a local patch in our projects.
Problem
Summary
When multiple projects in a monorepo share the same compiler options but reside in different directories, the document registry creates separate buckets for each project due to
pathsBasePathbeing included in the bucket key. This causes duplicateSourceFileinstances for shared files, increasing memory consumption.The
pathsBasePathproperty is derived from thepathscompiler option, which itself is not marked asaffectsSourceFile. ThereforepathsBasePathshould not participate in the document registry bucket key either.Changes
Move
pathsBasePathfrom the sharedgetKeyForCompilerOptionsintogetRedirectsCacheKey, so it only affects the module resolution cache where it is actually needed.Impact
In large monorepos with many projects sharing the same compiler options, this reduces memory usage by allowing the document registry to reuse
SourceFileinstances across projects instead of creating duplicates perpathsBasePath. It also slightly speeds up initialization of new projects (processRootFiles) since cachedSourceFileinstances are reused instead of being re-parsed.