Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(language-service): use tsLSHost to do module resolution #32483

Closed
wants to merge 1 commit into from

Conversation

kyliau
Copy link
Contributor

@kyliau kyliau commented Sep 4, 2019

This is a patch PR for #32479

This PR fixes a critical performance issue where the language
service makes a MASSIVE number of filesystem calls when performing
module resolution.
This is because there is no caching. To make matters worse, module
resolution is performed for every program change (which means every
few keystrokes trigger a massive number of fs calls).

There are two solutions here:

Provide a cache to ts.resolveModuleName()
Use ts.LanguageServiceHost.resolveModuleNames()
Since every Project (and by extension ConfiguredProject) implements
ts.LanguageServiceHost interface, (2) is the preferred solution here.
i.e. the TypeScript LanguageServiceHost always has the
resolveModuleNames() defined even though it's optional in the interface.

PR Checklist

Please check if your PR fulfills the following requirements:

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • angular.io application / infrastructure changes
  • Other... Please describe:

What is the current behavior?

Issue Number: N/A

What is the new behavior?

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

@kyliau kyliau added area: language-service Issues related to Angular's VS Code language service PR target: patch-only labels Sep 4, 2019
@kyliau kyliau requested a review from a team as a code owner September 4, 2019 22:41
@ngbot ngbot bot modified the milestone: needsTriage Sep 4, 2019
@kyliau kyliau added action: merge The PR is ready for merge by the caretaker action: discuss and removed action: merge The PR is ready for merge by the caretaker labels Sep 4, 2019
This is a patch PR for angular#32479

This PR fixes a critical performance issue where the language
service makes a MASSIVE number of filesystem calls when performing
module resolution.
This is because there is no caching. To make matters worse, module
resolution is performed for every program change (which means every
few keystrokes trigger a massive number of fs calls).
@kyliau kyliau added action: merge The PR is ready for merge by the caretaker and removed action: discuss labels Sep 12, 2019
matsko pushed a commit that referenced this pull request Sep 12, 2019
This is a patch PR for #32479

This PR fixes a critical performance issue where the language
service makes a MASSIVE number of filesystem calls when performing
module resolution.
This is because there is no caching. To make matters worse, module
resolution is performed for every program change (which means every
few keystrokes trigger a massive number of fs calls).

PR Close #32483
@matsko
Copy link
Contributor

matsko commented Sep 12, 2019

landed as 1c5b157

@matsko matsko closed this Sep 12, 2019
@simeyla
Copy link

simeyla commented Sep 25, 2019

So what does this actually speed up for the average user?

Does this apply to ng serve, building, server side rendering?
Would be helpful to know if it's worth updating just for this. Thx

@ayazhafiz
Copy link
Member

@simeyla this applies to the Angular language service, not to any direct Angular compilations. If you would like a faster development experience in an editor that uses the language service (e.g. VSCode with the Angular language service extension), it may be worth updating the language service package.

@kyliau kyliau deleted the 8.2.x branch September 30, 2019 18:32
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Oct 31, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
action: merge The PR is ready for merge by the caretaker area: language-service Issues related to Angular's VS Code language service cla: yes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants