Closed
Description
π Search Terms
UpdateProjectIfDirty language server slow
π Version & Regression Information
- tested the version that ships with VS Code
β― Playground Link
No response
π» Code
Steps to reproduce:
- clone VS Code (https://github.com/microsoft/vscode.git)
- npm install
- open VS Code on the vscode repository
- open file task.constribution.ts
- open the TS server log
- add a new line to
_ignoreEventForUpdateRunningTasksCount
Observe: updateGraphWorker
takes roughly 300ms on my machine
I took a performance trace and a lot of time is spent in GC and getNormalizedAbsolutePath
. I added a simply unbound cache to the method like
const pathCache = new Map();
function getNormalizedAbsolutePath(fileName, currentDirectory) {
let cache = pathCache.get(currentDirectory);
if (cache === undefined) {
cache = new Map();
pathCache.set(currentDirectory, cache);
}
let normalized = cache.get(fileName);
if (normalized === undefined) {
normalized = getPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory));
cache.set(fileName, normalized);
}
return normalized;
}
which cuts the time for updateGraphWorker
in half. However there are still some GCs going on and a lot of time is now spent in verifyCompilerOptions
/ getNormalizedPathComponents
.
π Actual behavior
Takes 300ms to update on key stroke
π Expected behavior
Adding a new line should be even in large project only cost a couple of ms :-)
Additional information about the issue
No response