microsoft / microsoft/TypeScript

TypeScript slow project load times for large projects on MacOS

Offen
#60,832 7 Kommentare 13 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Needs Investigation
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Does this issue occur when all extensions are disabled?: Yes

  • VS Code Version: v1.96.2
  • OS Version: MacOS
  • TypeScript: v5.7.2 (workspace version)
  • Node.JS: v20.18.0

Steps to Reproduce:

  1. Add the following to .vscode/settings.json
  "typescript.tsserver.log": "verbose",
  "files.watcherExclude": {
    "**/node_modules": true
  },

This causes:

2024-12-20 13:49:42.785 [info] <syntax> Falling back to legacy node.js based file watching because of user settings.
  1. Open a TS source file belonging to a large TS project with many project references in VSCode running on MacOS. For example, our project references a total of 25k+ files (transitively through project references):
Info 57414[13:12:03.001] Project '.../web/src/pages/editor/tsconfig.json' (Configured)
Info 57414[13:12:03.001] 	Files (26167)
  1. Notice that the tsserver logs are littered with the following log lines:
Info 57094[13:34:37.437] DirectoryWatcher:: Triggered with .../web/src/pages/editor :: WatchInfo: .../web/src/pages/editor 1 {"watchFile":2,"watchDirectory":2,"excludeDirectories":["/Users/mjames/work/canva/web/**/node_modules",".../web/**/target",".../web/**/bazel-bin",".../web/**/bazel-out",".../web/**/bazel-canva"]} Config: /Users/mjames/work/<redacted>/tsconfig.json WatchType: Wild card directory
Info 57095[13:34:37.437] Invoking sourceFileChange on .../web/src/pages/editor/editor_bootstrap_proto.ts:: 1
Info 57096[13:34:37.438] Scheduled: .../web/src/pages/editor/tsconfig.json
Info 57097[13:34:37.438] Scheduled: *ensureProjectForOpenFiles*
Info 57098[13:34:37.438] Invoking sourceFileChange on .../web/src/pages/<redacted>:: 1
Info 57099[13:34:37.438] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57100[13:34:37.438] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57101[13:34:37.438] Invoking sourceFileChange on .../web/src/pages/editor/<redacted>:: 1
Info 57102[13:34:37.438] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57103[13:34:37.438] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57104[13:34:37.438] Invoking sourceFileChange on .../web/src/pages/editor/<redacted>:: 1
Info 57105[13:34:37.438] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57106[13:34:37.442] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57107[13:34:37.442] Invoking sourceFileChange on .../web/src/pages/editor/<redacted>:: 1
Info 57108[13:34:37.442] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57109[13:34:37.442] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57110[13:34:37.442] Invoking sourceFileChange on .../web/src/pages/editor/<redacted>:: 1
Info 57111[13:34:37.443] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57112[13:34:37.443] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57113[13:34:37.443] Invoking sourceFileChange on .../web/src/pages/editor/editing/<redacted>:: 1
Info 57114[13:34:37.443] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57115[13:34:37.443] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57116[13:34:37.443] Invoking sourceFileChange on .../web/src/pages/editor/<redacted>:: 1
Info 57117[13:34:37.443] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57118[13:34:37.443] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57119[13:34:37.443] Invoking sourceFileChange on .../web/src/pages/editor/<redacted>:: 1
Info 57120[13:34:37.443] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier one
Info 57121[13:34:37.443] Scheduled: *ensureProjectForOpenFiles*, Cancelled earlier one
Info 57122[13:34:37.443] Invoking sourceFileChange on .../web/src/pages/editor/<redacted>:: 1
Info 57123[13:34:37.443] Scheduled: .../web/src/pages/editor/tsconfig.json, Cancelled earlier
...

The strange thing is that this is NOT a problem with .vscode-server running on Linux.

None of the 20k+ Invoking sourceFileChange on... log lines appear in the tsserver logs when running in our Linux based remote dev envs and the load time for this project is ~52s vs 3m45s!

Interestingly the problem also does NOT occur on MacOS when tsserver reuses VSCode's file watcher (i.e. the node_modules excludes aren't in the files.watcherExclude hash)

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, das Legacy-Dateiüberwachungsverhalten unter macOS mit dem wiederverwendeten VS Code-Watcher und den Linux-Remote-Logs zu vergleichen, und verwende dabei die Reproduktionseinstellungen und die tsserver-Ausgabe im Bericht. Verfolge den referenzierten VS Code-Konfigurationseinstiegspunkt zurück und miss das Laden des 25k-Dateien-Projekts; abgeschlossen ist die Aufgabe, wenn die wiederholte sourceFileChange-Aktivität beseitigt und die Ladezeit unter macOS deutlich reduziert wurde.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
macos, node.js, typescript, vscode
Bereich
developer-experience, performance
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.