Skip to content

LSP perf optimizations - #64877

Merged
Andrew Branch (andrewbranch) merged 11 commits into
microsoft:mainfrom
andrewbranch:lsp-perf
Nov 5, 2026
Merged

Andrew Branch (andrewbranch) merged 11 commits into
microsoft:mainfrom
andrewbranch:lsp-perf

Conversation

@andrewbranch

@andrewbranch Andrew Branch (andrewbranch) commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

I let Copilot spin for a while on LSP performance, profiling the vscode repo. Several of these changes affect batch compilation too.

Baseline (vscode)

Bench time/op B/op allocs/op
InitialLoad 1.2–2.5 s 3.04 GB (2595 MB retained) –
EditOpenFile 13–22 ms 14 MB –
EditImports 115–146 ms 277 MB 3.26 M
WatchChange 6–8 ms – –
CreateDeleteFile 335–375 ms 291 MB 3.46 M
TsconfigChange ~339 ms – –

Heap of initial load: ~95% of retained memory is ASTs/symbols in the parse cache (core compiler).
Project-package retained structures are small; the project package's leverage is mostly transient
allocation and per-change latency.

Cumulative result (merge-base 3789ddb vs HEAD, vscode, interleaved runs, n=6)

Bench time B/op allocs/op retained
InitialLoad ~ (1.29 → 1.15 s, noisy) −3.7% −15.6% −2 MB (of 2.4 GB)
EditOpenFile (fast clone) ~ −4.9% −23.3% −24% (14.0 → 10.7 MB)
WatchChange (fast clone from disk) ~ (3–4 ms, noisy) −16.0% −90.4% –
EditImports (program rebuild) ~/−19%* −37.6% −41.8% −17%
CreateDeleteFile (file-name reload + rebuild) −43% −38.6% −41.2% −12%
TsconfigChange (ParsedCommandLine + rebuild) −40% −38.9% −41.4% −12%
AutoImportInitial ~ −3.1% −0.5% −15.6% (19.8 → 16.7 MB)
AutoImportEdit ~ −4.8% −44.1% –

* EditImports: 165 → 97 ms in a direct A/B of the final fix; ~ in the noisy cumulative run.
Timings were taken with load average 10–20 from other processes; B/op and allocs/op are exact.

Experiments

1. dirty.SyncMap.LoadClean fast path in snapshotFSBuilder — COMMITTED (0a35842; benchmarks in dd354e654af)

dirty.SyncMap.Load allocates a SyncMapEntry wrapper on every hit in the immutable base map.
snapshotFSBuilder's GetFileByPath/FileExists/GetAccessibleEntries only need read access, so
added LoadClean returning the base value without allocation when the key is not dirty.

  • EditImports allocs −4.7%; CreateDeleteFile allocs −4.6%, time −4.6%; B/op −1.9%.

2. parseTask hot/cold split (compiler/filesparser.go) — COMMITTED (cea07f4)

Program rebuild profile showed parseTask allocations prominent. Removed two dead fields and moved
load-result fields to a lazily allocated *parseTaskResult (only tasks that actually load need
them; failed-lookup/duplicate tasks don't). parseTask 368 B → 184 B.

  • EditImports / CreateDeleteFile B/op −7.4%, allocs +0.3%. Timing within noise.

3. Concurrent directory prefetch in vfsmatch — COMMITTED (39911ff)

CPU profile of CreateDeleteFile/TsconfigChange: ~80% of updateProgram CPU is
ReloadFileNamesOfParsedCommandLine → vfsmatch.matchFileNames → sequential os.ReadDir
over the whole include tree (snapshot cachedvfs is fresh per snapshot, so it hits disk every time).
Added a prefetch phase that reads the same directories concurrently, then the original
serial walk runs unchanged using the prefetched entries (falling back to the host for anything
missing). Results/ordering/symlink-cycle semantics are unchanged.

  • CreateDeleteFile 374 → 218 ms, TsconfigChange 354 → 178 ms (p=0.002, wide variance).
  • B/op +1%, allocs +0.5% (prefetch bookkeeping).
  • Also benefits initial load and tsc CLI config parsing.

4. sourceFS seen-file tracking + overlayFS no-clone — COMMITTED (039e5dd)

sourceFS.FileExists computed a PathKey for tracking and again for the lookup, and stored into
seenFiles unconditionally. Compute the key once, Load before Store; overlayFS stopped cloning
its overlay map on read paths.

  • Rebuild benches allocs −2–3%, B/op −2%.

5. packagejson.InfoCache cheap Clone — COMMITTED (14e9882; RWMutex variant squashed away)

ReuseProgram (every edit / watch change) clones the package.json info cache; cloning a
sync.Map entry-by-entry allocated per entry (~6.6k allocs per WatchChange).

  • First version (RWMutex + plain map): WatchChange −30% time, −90% allocs; EditOpenFile −14% time.
    But EditImports regressed +38% time (119 → 165 ms): RWMutex reader-count contention during
    parallel module resolution. Found only via a cumulative merge-base A/B + bisect — lesson: every
    concurrency-touching change needs a rebuild-heavy timing check.
  • Final version: immutable base map read lock-free + collections.SyncMap overlay for new entries;
    Clone = maps.Clone(base) + overlay merge. Keeps clone wins; EditImports 165 → 97 ms
    (faster than the original 119 ms), −2% allocs. -race clean.

6. autoimport Export 248 → 192 B — COMMITTED (b975755)

Registry retained memory is dominated by Export (~52k exports on vscode). ModuleID stores one
string + kind instead of two strings; ExportSyntax, lsutil.ScriptElementKind narrowed to uint8;
fields reordered to remove padding.

  • AutoImportInitial retained −15.7% (19.8 → 16.7 MB). Time/allocs unchanged.

7. tsoptions extension-priority sibling keys — COMMITTED (c09c9b0)

getFileNamesFromConfigSpecs built ChangeExtension + canonical key for each higher/lower-priority
sibling of every wildcard file and appended a flattened group slice per file (~57% of file-name
expansion allocs). Now derives sibling keys from one canonical key (stemKey + ext, falling back to
the old path for unknown extensions / dynamic names), iterating groups in place.
Verified with a temporary 20k-case randomized differential test against the old implementation.

  • TsconfigChange / CreateDeleteFile B/op −2.1%, allocs −1.8%.

8. Module resolution: resolve candidate once — COMMITTED (de88374)

resolutionCandidateFromEncodedPaths resolved the same relative specifier twice (ResolveFile and
ResolveDirectory) whenever the file and directory inputs were identical (always, outside dynamic
files); both produce identical strings. Resolve once.

  • TsconfigChange B/op −12.8%, allocs −13.2%, time −10%; InitialLoad allocs −5%, time −11%.

9. tspath leading ./ / ../ fast path — COMMITTED (9496c1e)

ResolveFile/ResolveDirectory for ./x, ../../x concatenated then normalized (2 allocs). Now
walks the directory up for leading dot segments and concatenates once; falls back for any other dot
segments or ascending past root. 200k-case randomized differential test (disk, drive, URL, UNC,
dynamic roots) against the old path.

  • TsconfigChange B/op −12.1%, allocs −12.9%, time −8%; InitialLoad allocs −4.8%, time −9%.

10. parseTask references resolution PackageId — COMMITTED (02e334f)

parseTask/resolvedRef carried a 64 B inline PackageId (empty for nearly all files). Now a
pointer into the already-heap-allocated resolution (nil when empty). parseTask 184 → 136 B
(192 → 144 size class), no new allocations.

  • TsconfigChange B/op −3.8%.

11. Co-allocated referenced-file include reasons — COMMITTED (570e356)

Each import allocated FileIncludeReason (56 B) + referencedFileData (32 B) separately; both are
retained by the program. fileIncludeKind → uint8 (48 B) and one constructor co-allocates both
(80 B, 1 alloc). Net −13 lines.

  • TsconfigChange allocs −4.8%, B/op −1%; InitialLoad retained −2 MB.

@andrewbranch

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) perf test this

@typescript-automation

typescript-automation Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test this ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown
Contributor

Andrew Branch (@andrewbranch)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=12
Symbols 115,276 115,276 ~ ~ ~ p=1.000 n=12
Types 79,613 79,613 ~ ~ ~ p=1.000 n=12
Memory Used 113,591k (± 0.05%) 113,606k (± 0.06%) ~ 113,452k 113,759k p=0.660 n=12
Memory Allocs 2,212,531 (± 0.01%) 2,212,213 (± 0.01%) -318 (- 0.01%) 2,211,984 2,212,601 p=0.001 n=12
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Parse Time 0.049s (± 3.78%) 0.049s (± 2.36%) ~ 0.045s 0.051s p=0.920 n=12
Bind Time 0.018s (± 8.26%) 0.017s (± 8.52%) ~ 0.014s 0.022s p=0.135 n=12
Check Time 0.562s (± 1.04%) 0.559s (± 0.99%) ~ 0.550s 0.579s p=0.096 n=12
Emit Time 0.328s (± 2.17%) 0.322s (± 2.24%) ~ 0.309s 0.342s p=0.213 n=12
Total Time 0.965s (± 0.80%) 0.955s (± 0.74%) ~ 0.937s 0.973s p=0.057 n=12
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=12
Symbols 846,983 (± 0.06%) 846,942 (± 0.04%) ~ 846,110 848,011 p=0.977 n=12
Types 247,031 (± 0.00%) 247,031 (± 0.00%) ~ 247,030 247,033 p=0.982 n=12
Memory Used 596,501k (± 0.04%) 596,189k (± 0.03%) -313k (- 0.05%) 595,847k 596,751k p=0.028 n=12
Memory Allocs 13,141,800 (± 0.04%) 13,078,059 (± 0.07%) -63,742 (- 0.49%) 13,066,562 13,111,453 p=0.000 n=12
Config Time 0.020s 0.015s 🟩-0.005s (-25.00%) ~ ~ p=0.000 n=12
Parse Time 0.282s (± 1.83%) 0.290s (± 2.15%) +0.008s (+ 2.75%) 0.272s 0.310s p=0.046 n=12
Bind Time 0.102s (±10.03%) 0.081s (± 6.83%) 🟩-0.021s (-20.79%) 0.071s 0.097s p=0.002 n=12
Check Time 0s 0s ~ ~ ~ p=1.000 n=12
Emit Time 1.860s (± 1.54%) 1.879s (± 1.65%) ~ 1.784s 1.923s p=0.164 n=12
Total Time 2.288s (± 1.34%) 2.282s (± 1.47%) ~ 2.183s 2.343s p=0.843 n=12
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=12
Symbols 4,331,983 4,331,983 ~ ~ ~ p=1.000 n=12
Types 1,370,520 1,370,520 ~ ~ ~ p=1.000 n=12
Memory Used 2,625,492k (± 0.06%) 2,624,302k (± 0.07%) ~ 2,620,262k 2,628,363k p=0.443 n=12
Memory Allocs 27,694,010 (± 0.07%) 27,439,831 (± 0.07%) -254,179 (- 0.92%) 27,385,334 27,502,889 p=0.000 n=12
Config Time 0.020s (± 0.90%) 0.015s 🟩-0.005s (-25.31%) ~ ~ p=0.000 n=12
Parse Time 0.580s (± 3.00%) 0.558s (± 3.05%) ~ 0.511s 0.593s p=0.060 n=12
Bind Time 0.003s (±24.75%) 0.003s (±24.75%) ~ 0.002s 0.006s p=1.000 n=12
Check Time 8.658s (± 0.28%) 8.565s (± 0.34%) -0.093s (- 1.07%) 8.518s 8.689s p=0.000 n=12
Emit Time 0.706s (±10.82%) 0.595s (±13.32%) 🟩-0.111s (-15.69%) 0.498s 0.801s p=0.027 n=12
Total Time 10.901s (± 0.52%) 10.620s (± 1.03%) -0.281s (- 2.58%) 10.416s 10.856s p=0.000 n=12
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 1,388,680 1,388,680 ~ ~ ~ p=1.000 n=12
Types 441,862 441,862 ~ ~ ~ p=1.000 n=12
Memory Used 1,312,862k (± 0.64%) 1,316,123k (± 0.70%) ~ 1,296,678k 1,336,647k p=0.443 n=12
Memory Allocs 78,130,520 (± 0.14%) 77,907,481 (± 0.09%) -223,039 (- 0.29%) 77,603,392 78,084,042 p=0.004 n=12
Config Time 0.005s (±11.96%) 0.007s (± 9.00%) 🔻+0.002s (+44.64%) 0.005s 0.008s p=0.000 n=12
Parse Time 0.311s (± 2.04%) 0.302s (± 2.21%) ~ 0.286s 0.320s p=0.081 n=12
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Check Time 2.005s (± 0.48%) 2.010s (± 0.42%) ~ 1.991s 2.036s p=0.325 n=12
Emit Time 0.359s (± 4.50%) 0.345s (± 4.33%) ~ 0.302s 0.389s p=0.311 n=12
Total Time 23.910s (± 0.68%) 23.690s (± 0.66%) -0.220s (- 0.92%) 23.156s 23.976s p=0.045 n=12
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 334,953 334,953 ~ ~ ~ p=1.000 n=12
Types 197,616 197,616 ~ ~ ~ p=1.000 n=12
Memory Used 247,540k (± 0.03%) 247,488k (± 0.03%) ~ 247,245k 247,669k p=0.111 n=12
Memory Allocs 4,329,822 (± 0.01%) 4,326,464 (± 0.01%) -3,358 (- 0.08%) 4,325,511 4,327,582 p=0.000 n=12
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=12
Parse Time 0.112s (± 4.75%) 0.116s (± 4.45%) ~ 0.100s 0.124s p=0.172 n=12
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Check Time 0.954s (± 0.45%) 0.957s (± 0.56%) ~ 0.945s 0.973s p=0.503 n=12
Emit Time 0.156s (± 3.77%) 0.148s (± 5.88%) ~ 0.129s 0.173s p=0.164 n=12
Total Time 1.278s (± 0.58%) 1.277s (± 0.93%) ~ 1.246s 1.304s p=0.943 n=12
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=12
Symbols 303,834 303,834 ~ ~ ~ p=1.000 n=12
Types 181,663 181,663 ~ ~ ~ p=1.000 n=12
Memory Used 215,260k (± 0.02%) 215,234k (± 0.01%) ~ 215,162k 215,324k p=0.291 n=12
Memory Allocs 1,401,676 (± 0.02%) 1,401,236 (± 0.01%) -439 (- 0.03%) 1,400,774 1,401,743 p=0.006 n=12
Config Time 0.000s 0.000s (±217.90%) ~ 0.000s 0.001s p=1.000 n=12
Parse Time 0.097s (± 3.53%) 0.096s (± 5.19%) ~ 0.088s 0.111s p=0.450 n=12
Bind Time 0.040s (±11.70%) 0.040s (± 9.88%) ~ 0.030s 0.048s p=0.701 n=12
Check Time 0.745s (± 0.94%) 0.743s (± 1.02%) ~ 0.726s 0.762s p=0.681 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 0.897s (± 0.76%) 0.895s (± 0.96%) ~ 0.877s 0.926s p=0.766 n=12
vscode - native
Errors 396 396 ~ ~ ~ p=1.000 n=12
Symbols 12,483,880 12,483,880 ~ ~ ~ p=1.000 n=12
Types 4,085,331 4,085,331 ~ ~ ~ p=1.000 n=12
Memory Used 5,845,353k (± 0.03%) 5,843,014k (± 0.01%) -2,339k (- 0.04%) 5,840,755k 5,844,615k p=0.006 n=12
Memory Allocs 59,433,051 (± 0.02%) 58,315,740 (± 0.01%) -1,117,310 (- 1.88%) 58,306,315 58,334,956 p=0.000 n=12
Config Time 0.076s (± 0.41%) 0.049s (± 0.66%) 🟩-0.027s (-35.15%) 0.049s 0.050s p=0.000 n=12
Parse Time 1.816s (± 1.93%) 1.825s (± 2.42%) ~ 1.691s 1.944s p=0.799 n=12
Bind Time 0.717s (±14.97%) 0.594s (±14.70%) 🟩-0.123s (-17.19%) 0.503s 0.954s p=0.024 n=12
Check Time 15.749s (± 1.09%) 15.911s (± 0.98%) ~ 15.443s 16.158s p=0.236 n=12
Emit Time 5.809s (± 6.98%) 5.454s (± 4.56%) ~ 4.875s 6.361s p=0.128 n=12
Total Time 24.259s (± 1.25%) 23.917s (± 0.67%) -0.342s (- 1.41%) 23.585s 24.600s p=0.039 n=12
webpack - native
Errors 598 598 ~ ~ ~ p=1.000 n=12
Symbols 1,343,495 1,343,495 ~ ~ ~ p=1.000 n=12
Types 651,492 651,492 ~ ~ ~ p=1.000 n=12
Memory Used 855,319k (± 0.01%) 855,121k (± 0.02%) -198k (- 0.02%) 854,687k 855,444k p=0.039 n=12
Memory Allocs 6,770,093 (± 0.01%) 6,724,154 (± 0.02%) -45,939 (- 0.68%) 6,720,654 6,730,113 p=0.000 n=12
Config Time 0.008s (± 4.38%) 0.006s (± 2.98%) 🟩-0.001s (-18.89%) 0.006s 0.007s p=0.000 n=12
Parse Time 0.239s (± 3.29%) 0.236s (± 4.35%) ~ 0.212s 0.270s p=0.541 n=12
Bind Time 0.062s (±12.73%) 0.077s (±18.28%) ~ 0.054s 0.109s p=0.070 n=12
Check Time 2.324s (± 0.50%) 2.269s (± 0.70%) -0.054s (- 2.35%) 2.228s 2.299s p=0.000 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 2.664s (± 0.33%) 2.619s (± 0.44%) -0.045s (- 1.68%) 2.583s 2.639s p=0.000 n=12
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 1,060,810 1,060,810 ~ ~ ~ p=1.000 n=12
Types 389,671 389,671 ~ ~ ~ p=1.000 n=12
Memory Used 471,799k (± 0.02%) 471,755k (± 0.03%) ~ 471,531k 472,243k p=0.377 n=12
Memory Allocs 4,216,884 (± 0.11%) 4,191,660 (± 0.16%) -25,224 (- 0.60%) 4,175,456 4,218,103 p=0.000 n=12
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=12
Parse Time 0.109s (± 2.96%) 0.107s (± 2.74%) ~ 0.103s 0.118s p=0.464 n=12
Bind Time 0.035s (±17.20%) 0.035s (±18.46%) ~ 0.026s 0.056s p=0.719 n=12
Check Time 0.907s (± 1.25%) 0.906s (± 1.01%) ~ 0.887s 0.933s p=0.876 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 1.059s (± 1.17%) 1.057s (± 0.89%) ~ 1.026s 1.081s p=0.899 n=12
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • strada-build-src - native
  • strada-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 12
Baseline baseline 12

lsp

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-UnionsLSP - native
Req 1 - updateOpen 11ms (±20.59%) 12ms (±12.45%) ~ 9ms 15ms p=0.056 n=12
Req 2 - geterr 541ms (± 0.36%) 535ms (± 0.28%) -6ms (- 1.06%) 532ms 539ms p=0.000 n=12
Req 3 - references 44ms (± 4.33%) 47ms (± 4.01%) 🔻+2ms (+ 5.08%) 43ms 51ms p=0.028 n=12
Req 4 - navto 16ms (± 1.90%) 17ms (± 5.69%) ~ 16ms 21ms p=0.369 n=12
Req 5 - completionInfo count 1,363 1,363 ~ ~ ~ p=1.000 n=12
Req 5 - completionInfo 16ms (± 7.93%) 16ms (± 8.87%) ~ 14ms 21ms p=0.304 n=12
CompilerLSP - native
Req 1 - updateOpen 13ms (±13.31%) 11ms (±13.99%) ~ 10ms 17ms p=0.440 n=12
Req 2 - geterr 284ms (± 0.67%) 285ms (± 0.48%) ~ 281ms 288ms p=0.940 n=12
Req 3 - references 49ms (± 1.17%) 49ms (± 1.44%) ~ 48ms 51ms p=0.760 n=12
Req 4 - navto 19ms (± 8.20%) 18ms (± 6.17%) ~ 17ms 22ms p=0.139 n=12
Req 5 - completionInfo count 1,525 1,525 ~ ~ ~ p=1.000 n=12
Req 5 - completionInfo 20ms (±11.45%) 20ms (±11.60%) ~ 15ms 24ms p=0.725 n=12
System info unknown
Hosts
  • native
Scenarios
  • CompilerLSP - native
  • Compiler-UnionsLSP - native
  • xstate-main-1-LSP - native
Benchmark Name Iterations
Current pr 12
Baseline baseline 12

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
lsp-startup - native
Execution time 4.66ms (±365.09%) 4.67ms (±365.09%) +0.01ms (+ 0.25%) 0.00ms 472.63ms p=0.000 n=1200
tsgo-startup - native
Execution time 5.67ms (±365.09%) 5.68ms (±365.09%) +0.01ms (+ 0.20%) 0.00ms 572.39ms p=0.000 n=1200
System info unknown
Hosts
  • native
Scenarios
  • lsp-startup - native
  • tsgo-startup - native
Benchmark Name Iterations
Current pr 12
Baseline baseline 12

Developer Information:

Download Benchmarks

This comment was marked as resolved.

This comment was marked as resolved.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Concurrent filesystem traversal and compiler-wide representation changes warrant human review, particularly without executed validation.

No open issues 🎉

1 resolved since last review

Review effort: Balanced

@andrewbranch

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) perf test

@typescript-automation

typescript-automation Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown
Contributor

Andrew Branch (@andrewbranch)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=12
Symbols 115,276 115,276 ~ ~ ~ p=1.000 n=12
Types 79,613 79,613 ~ ~ ~ p=1.000 n=12
Memory Used 113,527k (± 0.07%) 113,538k (± 0.07%) ~ 113,376k 113,791k p=0.887 n=12
Memory Allocs 2,212,615 (± 0.01%) 2,212,232 (± 0.01%) -383 (- 0.02%) 2,211,899 2,212,916 p=0.001 n=12
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Parse Time 0.049s (± 3.28%) 0.048s (± 3.43%) ~ 0.045s 0.055s p=0.659 n=12
Bind Time 0.017s (±10.21%) 0.017s (± 8.41%) ~ 0.013s 0.020s p=0.639 n=12
Check Time 0.561s (± 0.56%) 0.558s (± 0.71%) ~ 0.550s 0.568s p=0.172 n=12
Emit Time 0.328s (± 2.74%) 0.324s (± 1.98%) ~ 0.303s 0.338s p=0.680 n=12
Total Time 0.963s (± 1.03%) 0.955s (± 0.95%) ~ 0.931s 0.977s p=0.486 n=12
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=12
Symbols 846,989 (± 0.06%) 846,907 (± 0.08%) ~ 845,756 848,830 p=0.630 n=12
Types 247,031 (± 0.00%) 247,032 (± 0.00%) ~ 247,030 247,044 p=0.536 n=12
Memory Used 596,350k (± 0.02%) 596,208k (± 0.03%) ~ 595,800k 596,572k p=0.178 n=12
Memory Allocs 13,138,240 (± 0.01%) 13,074,668 (± 0.05%) -63,571 (- 0.48%) 13,065,745 13,095,793 p=0.000 n=12
Config Time 0.020s (± 1.21%) 0.015s (± 1.20%) 🟩-0.005s (-25.21%) 0.015s 0.016s p=0.000 n=12
Parse Time 0.279s (± 1.87%) 0.287s (± 2.65%) ~ 0.274s 0.314s p=0.109 n=12
Bind Time 0.102s (±15.67%) 0.077s (± 4.75%) 🟩-0.024s (-23.96%) 0.068s 0.089s p=0.008 n=12
Check Time 0s 0s ~ ~ ~ p=1.000 n=12
Emit Time 1.878s (± 1.59%) 1.874s (± 1.69%) ~ 1.803s 1.950s p=0.855 n=12
Total Time 2.298s (± 1.18%) 2.269s (± 1.40%) ~ 2.202s 2.352s p=0.291 n=12
arktype - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 1,757,463 1,757,463 ~ ~ ~ p=1.000 n=12
Types 943,966 943,966 ~ ~ ~ p=1.000 n=12
Memory Used 703,690k (± 0.01%) 703,618k (± 0.01%) ~ 703,517k 703,856k p=0.091 n=12
Memory Allocs 13,293,129 (± 0.02%) 13,275,828 (± 0.01%) -17,301 (- 0.13%) 13,273,723 13,278,395 p=0.000 n=12
Config Time 0.003s 0.002s (±12.64%) 🟩-0.001s (-25.00%) 0.002s 0.003s p=0.000 n=12
Parse Time 0.091s (± 3.94%) 0.086s (± 3.19%) 🟩-0.005s (- 5.65%) 0.080s 0.095s p=0.023 n=12
Bind Time 0.027s (±13.06%) 0.027s (±10.60%) ~ 0.024s 0.036s p=1.000 n=12
Check Time 2.450s (± 0.30%) 2.439s (± 0.39%) ~ 2.411s 2.463s p=0.071 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 2.623s (± 0.41%) 2.607s (± 0.36%) -0.016s (- 0.63%) 2.577s 2.630s p=0.045 n=12
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=12
Symbols 4,331,983 4,331,983 ~ ~ ~ p=1.000 n=12
Types 1,370,520 1,370,520 ~ ~ ~ p=1.000 n=12
Memory Used 2,625,122k (± 0.05%) 2,624,401k (± 0.07%) ~ 2,620,409k 2,628,701k p=0.551 n=12
Memory Allocs 27,702,105 (± 0.06%) 27,433,011 (± 0.05%) -269,094 (- 0.97%) 27,401,450 27,465,329 p=0.000 n=12
Config Time 0.020s (± 1.52%) 0.015s (± 1.61%) 🟩-0.005s (-25.41%) 0.015s 0.016s p=0.000 n=12
Parse Time 0.590s (± 3.07%) 0.550s (± 3.42%) 🟩-0.040s (- 6.82%) 0.511s 0.597s p=0.005 n=12
Bind Time 0.002s (±13.40%) 0.003s (±12.54%) ~ 0.002s 0.003s p=0.684 n=12
Check Time 8.637s (± 0.13%) 8.526s (± 0.56%) -0.110s (- 1.28%) 8.384s 8.717s p=0.000 n=12
Emit Time 0.725s (±10.10%) 0.661s (±13.47%) ~ 0.499s 0.800s p=1.000 n=12
Total Time 10.886s (± 0.74%) 10.652s (± 0.98%) -0.235s (- 2.15%) 10.432s 10.825s p=0.000 n=12
sentry - native
Errors 2 2 ~ ~ ~ p=1.000 n=12
Symbols 7,459,653 7,459,653 ~ ~ ~ p=1.000 n=12
Types 2,647,172 2,647,172 ~ ~ ~ p=1.000 n=12
Memory Used 3,803,448k (± 0.03%) 3,801,312k (± 0.03%) -2,136k (- 0.06%) 3,799,112k 3,804,847k p=0.006 n=12
Memory Allocs 77,165,486 (± 0.08%) 76,682,925 (± 0.06%) -482,561 (- 0.63%) 76,569,505 76,806,352 p=0.000 n=12
Config Time 0.060s (± 0.51%) 0.041s (± 0.69%) 🟩-0.019s (-31.63%) 0.041s 0.042s p=0.000 n=12
Parse Time 1.033s (± 3.80%) 0.994s (± 2.01%) ~ 0.931s 1.034s p=0.091 n=12
Bind Time 0.308s (±12.10%) 0.286s (±11.98%) ~ 0.255s 0.418s p=0.171 n=12
Check Time 14.777s (± 0.51%) 14.582s (± 0.19%) -0.196s (- 1.32%) 14.509s 14.635s p=0.000 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 16.251s (± 0.45%) 15.970s (± 0.17%) -0.281s (- 1.73%) 15.883s 16.024s p=0.000 n=12
social-app - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 2,568,629 2,568,629 ~ ~ ~ p=1.000 n=12
Types 1,163,035 1,163,035 ~ ~ ~ p=1.000 n=12
Memory Used 1,212,943k (± 0.01%) 1,212,506k (± 0.01%) -437k (- 0.04%) 1,211,908k 1,212,922k p=0.000 n=12
Memory Allocs 13,987,652 (± 0.17%) 13,885,118 (± 0.42%) -102,534 (- 0.73%) 13,819,844 14,156,480 p=0.000 n=12
Config Time 0.017s (± 1.65%) 0.013s (± 2.45%) 🟩-0.005s (-26.57%) 0.012s 0.013s p=0.000 n=12
Parse Time 0.357s (± 1.24%) 0.341s (± 2.23%) 🟩-0.015s (- 4.28%) 0.328s 0.371s p=0.001 n=12
Bind Time 0.079s (±10.12%) 0.086s (±15.80%) ~ 0.068s 0.129s p=0.382 n=12
Check Time 3.647s (± 0.26%) 3.615s (± 0.33%) -0.033s (- 0.90%) 3.578s 3.639s p=0.000 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 4.122s (± 0.40%) 4.078s (± 0.46%) -0.044s (- 1.07%) 4.030s 4.127s p=0.001 n=12
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 1,388,680 1,388,680 ~ ~ ~ p=1.000 n=12
Types 441,862 441,862 ~ ~ ~ p=1.000 n=12
Memory Used 1,312,483k (± 0.57%) 1,315,779k (± 0.35%) ~ 1,305,802k 1,331,129k p=0.319 n=12
Memory Allocs 78,202,041 (± 0.13%) 77,890,688 (± 0.11%) -311,353 (- 0.40%) 77,574,236 78,104,482 p=0.000 n=12
Config Time 0.005s (± 8.27%) 0.005s (±13.27%) ~ 0.004s 0.007s p=0.152 n=12
Parse Time 0.308s (± 1.73%) 0.303s (± 2.34%) ~ 0.287s 0.321s p=0.311 n=12
Bind Time 0.000s (±217.90%) 0.000s ~ ~ ~ p=1.000 n=12
Check Time 2.012s (± 0.62%) 2.000s (± 0.41%) ~ 1.981s 2.020s p=0.091 n=12
Emit Time 0.348s (± 4.09%) 0.341s (± 4.09%) ~ 0.314s 0.387s p=0.418 n=12
Total Time 23.880s (± 0.50%) 23.596s (± 0.69%) -0.284s (- 1.19%) 23.230s 23.973s p=0.010 n=12
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 334,953 334,953 ~ ~ ~ p=1.000 n=12
Types 197,616 197,616 ~ ~ ~ p=1.000 n=12
Memory Used 247,490k (± 0.03%) 247,433k (± 0.02%) ~ 247,298k 247,526k p=0.068 n=12
Memory Allocs 4,329,511 (± 0.01%) 4,325,973 (± 0.01%) -3,538 (- 0.08%) 4,324,662 4,326,755 p=0.000 n=12
Config Time 0.001s (±37.93%) 0.000s (±77.74%) ~ 0.000s 0.001s p=0.214 n=12
Parse Time 0.090s (± 4.63%) 0.095s (± 4.22%) ~ 0.084s 0.107s p=0.057 n=12
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Check Time 0.798s (± 0.76%) 0.793s (± 0.70%) ~ 0.784s 0.815s p=0.202 n=12
Emit Time 0.124s (± 4.53%) 0.128s (± 3.42%) ~ 0.116s 0.139s p=0.323 n=12
Total Time 1.056s (± 0.51%) 1.063s (± 0.64%) ~ 1.039s 1.080s p=0.070 n=12
t3code-server - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 11,588,087 11,588,087 ~ ~ ~ p=1.000 n=12
Types 3,062,556 3,062,556 ~ ~ ~ p=1.000 n=12
Memory Used 3,946,543k (± 0.01%) 3,944,580k (± 0.01%) -1,964k (- 0.05%) 3,943,226k 3,946,342k p=0.000 n=12
Memory Allocs 41,547,231 (± 0.06%) 41,381,098 (± 0.04%) -166,133 (- 0.40%) 41,345,948 41,423,159 p=0.000 n=12
Config Time 0.006s 0.005s (± 3.57%) 🟩-0.001s (-15.28%) 0.005s 0.006s p=0.000 n=12
Parse Time 0.570s (± 2.52%) 0.549s (± 1.99%) ~ 0.529s 0.597s p=0.071 n=12
Bind Time 0.181s (±16.62%) 0.196s (±10.08%) ~ 0.153s 0.244s p=0.074 n=12
Check Time 18.663s (± 0.39%) 18.592s (± 0.46%) -0.071s (- 0.38%) 18.447s 18.923s p=0.045 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 19.435s (± 0.38%) 19.364s (± 0.43%) ~ 19.241s 19.713s p=0.066 n=12
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=12
Symbols 303,834 303,834 ~ ~ ~ p=1.000 n=12
Types 181,663 181,663 ~ ~ ~ p=1.000 n=12
Memory Used 215,235k (± 0.02%) 215,252k (± 0.01%) ~ 215,171k 215,313k p=0.504 n=12
Memory Allocs 1,401,665 (± 0.02%) 1,401,192 (± 0.02%) -472 (- 0.03%) 1,400,416 1,401,892 p=0.014 n=12
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Parse Time 0.079s (± 3.93%) 0.079s (± 5.04%) ~ 0.069s 0.088s p=0.921 n=12
Bind Time 0.033s (±10.26%) 0.033s (± 8.87%) ~ 0.024s 0.040s p=0.921 n=12
Check Time 0.618s (± 1.19%) 0.613s (± 0.99%) ~ 0.603s 0.631s p=0.433 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 0.743s (± 0.93%) 0.738s (± 0.83%) ~ 0.719s 0.751s p=0.504 n=12
vscode - native
Errors 396 396 ~ ~ ~ p=1.000 n=12
Symbols 12,489,159 12,489,159 ~ ~ ~ p=1.000 n=12
Types 4,083,411 4,083,411 ~ ~ ~ p=1.000 n=12
Memory Used 5,851,727k (± 0.03%) 5,849,628k (± 0.01%) -2,099k (- 0.04%) 5,846,813k 5,851,034k p=0.020 n=12
Memory Allocs 59,515,692 (± 0.04%) 58,399,500 (± 0.01%) -1,116,191 (- 1.88%) 58,386,594 58,418,313 p=0.000 n=12
Config Time 0.062s (± 0.50%) 0.040s (± 1.81%) 🟩-0.022s (-35.03%) 0.040s 0.044s p=0.000 n=12
Parse Time 1.448s (± 2.72%) 1.456s (± 2.21%) ~ 1.384s 1.528s p=0.630 n=12
Bind Time 0.631s (±11.98%) 0.479s (± 9.59%) 🟩-0.152s (-24.04%) 0.409s 0.625s p=0.003 n=12
Check Time 13.637s (± 1.13%) 13.652s (± 1.10%) ~ 13.352s 13.947s p=0.590 n=12
Emit Time 4.662s (± 5.30%) 4.824s (± 6.76%) ~ 4.207s 5.533s p=0.551 n=12
Total Time 20.522s (± 0.81%) 20.526s (± 0.97%) ~ 20.167s 21.028s p=0.755 n=12
webpack - native
Errors 598 598 ~ ~ ~ p=1.000 n=12
Symbols 1,343,495 1,343,495 ~ ~ ~ p=1.000 n=12
Types 651,492 651,492 ~ ~ ~ p=1.000 n=12
Memory Used 855,379k (± 0.01%) 855,138k (± 0.02%) -241k (- 0.03%) 854,686k 855,431k p=0.006 n=12
Memory Allocs 6,768,818 (± 0.01%) 6,730,140 (± 0.16%) -38,678 (- 0.57%) 6,720,048 6,772,058 p=0.000 n=12
Config Time 0.009s 0.008s 🟩-0.001s (-11.11%) ~ ~ p=0.000 n=12
Parse Time 0.319s (± 2.46%) 0.298s (± 3.43%) 🟩-0.021s (- 6.54%) 0.267s 0.329s p=0.004 n=12
Bind Time 0.075s (± 8.20%) 0.094s (±17.94%) ~ 0.069s 0.141s p=0.065 n=12
Check Time 2.773s (± 0.48%) 2.714s (± 0.79%) -0.059s (- 2.14%) 2.670s 2.767s p=0.000 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 3.212s (± 0.43%) 3.150s (± 0.47%) -0.063s (- 1.95%) 3.110s 3.191s p=0.000 n=12
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 1,060,810 1,060,810 ~ ~ ~ p=1.000 n=12
Types 389,671 389,671 ~ ~ ~ p=1.000 n=12
Memory Used 471,862k (± 0.02%) 471,798k (± 0.04%) ~ 471,451k 472,393k p=0.266 n=12
Memory Allocs 4,223,145 (± 0.08%) 4,188,389 (± 0.11%) -34,756 (- 0.82%) 4,174,846 4,204,036 p=0.000 n=12
Config Time 0.003s 0.002s 🟩-0.001s (-33.33%) ~ ~ p=0.000 n=12
Parse Time 0.134s (± 3.69%) 0.135s (± 3.15%) ~ 0.125s 0.149s p=0.504 n=12
Bind Time 0.051s (±13.15%) 0.048s (±14.59%) ~ 0.035s 0.069s p=0.522 n=12
Check Time 1.089s (± 0.76%) 1.087s (± 1.01%) ~ 1.065s 1.123s p=0.258 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 1.285s (± 0.69%) 1.279s (± 0.89%) ~ 1.248s 1.305s p=0.451 n=12
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • arktype - native
  • mui-docs - native
  • sentry - native
  • social-app - native
  • strada-build-src - native
  • strada-compiler - native
  • t3code-server - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 12
Baseline baseline 12

lsp

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-UnionsLSP - native
Req 1 - updateOpen 10ms (±13.94%) 12ms (±15.38%) ~ 9ms 17ms p=0.218 n=12
Req 2 - geterr 540ms (± 0.33%) 535ms (± 0.36%) -6ms (- 1.09%) 529ms 539ms p=0.000 n=12
Req 3 - references 45ms (± 4.26%) 47ms (± 5.29%) ~ 39ms 50ms p=0.202 n=12
Req 4 - navto 16ms (± 1.90%) 17ms (± 1.99%) ~ 16ms 17ms p=0.680 n=12
Req 5 - completionInfo count 1,363 1,363 ~ ~ ~ p=1.000 n=12
Req 5 - completionInfo 15ms (± 5.26%) 16ms (± 6.17%) ~ 14ms 19ms p=0.522 n=12
CompilerLSP - native
Req 1 - updateOpen 12ms (±16.30%) 10ms (± 1.80%) ~ 10ms 11ms p=0.223 n=12
Req 2 - geterr 283ms (± 0.32%) 284ms (± 0.66%) ~ 280ms 288ms p=0.280 n=12
Req 3 - references 48ms (± 2.25%) 48ms (± 1.35%) ~ 45ms 49ms p=0.417 n=12
Req 4 - navto 17ms (± 1.43%) 18ms (± 6.75%) ~ 17ms 22ms p=0.112 n=12
Req 5 - completionInfo count 1,525 1,525 ~ ~ ~ p=1.000 n=12
Req 5 - completionInfo 22ms (± 5.76%) 20ms (±11.11%) ~ 15ms 23ms p=0.106 n=12
System info unknown
Hosts
  • native
Scenarios
  • CompilerLSP - native
  • Compiler-UnionsLSP - native
  • xstate-main-1-LSP - native
Benchmark Name Iterations
Current pr 12
Baseline baseline 12

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
lsp-startup - native
Execution time 4.64ms (±365.09%) 4.66ms (±365.08%) +0.02ms (+ 0.38%) 0.00ms 468.21ms p=0.000 n=1200
tsgo-startup - native
Execution time 5.69ms (±365.09%) 5.72ms (±365.10%) +0.03ms (+ 0.50%) 0.00ms 580.57ms p=0.020 n=1200
System info unknown
Hosts
  • native
Scenarios
  • lsp-startup - native
  • tsgo-startup - native
Benchmark Name Iterations
Current pr 12
Baseline baseline 12

Developer Information:

Download Benchmarks

@jakebailey Jake Bailey (jakebailey) added the Domain: Performance Performance related label Oct 27, 2026
dirty.SyncMap.Load allocates an entry wrapper on every hit in the base map.
snapshotFSBuilder reads only need the value, so add LoadClean, which returns
base values without allocating when the key is not dirty.

Perf (vscode, unpinned; indicative): EditImports -4.7% allocs; CreateDeleteFile -4.6% allocs,
-1.9% B/op.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
parseTask is allocated for every file reference edge, but most edges point
at files that are already loaded. Moving load results into a side record and
removing two unused fields shrinks parseTask from 368B to 184B.

Perf (vscode, unpinned; indicative): EditImports and CreateDeleteFile -7.4% B/op, +0.3% allocs;
time within noise.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
Config file-name expansion read the include tree with sequential ReadDir
calls. A core.WorkGroup limited to GOMAXPROCS now reads the same
directories first (honoring excludes and depth), then the unchanged
ordered walk runs over the prefetched entries, so results and ordering
are identical. Directories under overlapping base paths are read once.

Symlinked directories are left to the ordered walk, which owns realpath
deduplication; each directory spelling is read at most once by the
prefetch. A host panic stops further reads and is re-raised on the
caller. With --singleThreaded, config expansion reads directories
serially.

Perf (ReadDirectory over vscode@9c4bcec0bb91/src with osvfs, machine
under load; indicative): 193 -> 52 ms (-73%); transient +25% B/op,
+22% allocs/op for queued closures and goroutines.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
…files

Also return host directory entries directly from overlayFS when no overlay
directory affects them.

Perf (vscode, unpinned; indicative): program-rebuild benchmarks -2-3% allocs, -2% B/op.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
ReuseProgram clones the package.json info cache on every edit; copying a
sync.Map entry-by-entry allocated per entry. Reads now hit an immutable
base map without locking, new entries go to a sync.Map overlay (first
writer wins), and Clone flattens both into a new base.

Perf (vscode, unpinned; indicative): WatchChange -90% allocs; EditImports
and EditOpenFile time not regressed (an RWMutex variant regressed
EditImports +38% from read-lock contention).

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
Store ModuleID's path/specifier in a single string (only one is ever set),
narrow ExportSyntax and ScriptElementKind to uint8, and reorder small fields
to avoid padding.

Perf (vscode, unpinned; indicative): AutoImportInitial retained memory -15.7% (19.8 -> 16.7 MB);
time and allocs unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
Perf (vscode, unpinned; indicative): TsconfigChange and CreateDeleteFile -2.1% B/op, -1.8% allocs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
Perf (vscode, unpinned; indicative): TsconfigChange -12.8% B/op, -13.2% allocs;
InitialLoad -5% allocs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
…tring

Perf (vscode, unpinned; indicative): TsconfigChange -12.1% B/op, -12.9% allocs;
InitialLoad -4.8% allocs.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
…tes)

Perf (vscode, unpinned; indicative): TsconfigChange -3.8% B/op; allocs unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
… 80B/1)

Perf (vscode, unpinned; indicative): TsconfigChange -4.8% allocs, -1% B/op; InitialLoad retained
memory -2 MB.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: afcfca01-a049-4749-ad08-1c00c586f6a1
@andrewbranch

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) perf test

@typescript-automation

typescript-automation Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test ✅ Started 👀 Results

@typescript-automation

Copy link
Copy Markdown
Contributor

Andrew Branch (@andrewbranch)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=20
Symbols 88,466 88,466 ~ ~ ~ p=1.000 n=20
Types 79,607 79,607 ~ ~ ~ p=1.000 n=20
Memory Used 106,381k (± 0.03%) 106,422k (± 0.03%) ~ 106,322k 106,553k p=0.090 n=20
Memory Allocs 1,262,003 (± 0.01%) 1,262,018 (± 0.01%) ~ 1,261,672 1,262,547 p=0.952 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.023s (± 2.22%) 0.023s (± 2.12%) ~ 0.021s 0.025s p=0.581 n=20
Bind Time 0.008s (± 4.45%) 0.008s (± 5.21%) ~ 0.007s 0.011s p=0.464 n=20
Check Time 0.210s (± 2.35%) 0.208s (± 0.92%) ~ 0.201s 0.218s p=0.825 n=20
Emit Time 0.137s (± 2.13%) 0.135s (± 1.90%) ~ 0.129s 0.155s p=0.101 n=20
Total Time 0.381s (± 1.97%) 0.378s (± 1.20%) ~ 0.368s 0.412s p=0.515 n=20
angular-1 - native
Errors 63 63 ~ ~ ~ p=1.000 n=20
Symbols 756,637 756,637 ~ ~ ~ p=1.000 n=20
Types 549,451 549,451 ~ ~ ~ p=1.000 n=20
Memory Used 644,077k (± 0.01%) 643,875k (± 0.02%) -202k (- 0.03%) 643,544k 644,412k p=0.013 n=20
Memory Allocs 9,539,758 (± 0.06%) 9,496,053 (± 0.07%) -43,705 (- 0.46%) 9,487,433 9,538,718 p=0.000 n=20
Config Time 0.008s (± 1.30%) 0.006s (± 3.66%) 🟩-0.002s (-20.50%) 0.006s 0.007s p=0.000 n=20
Parse Time 0.119s (± 4.66%) 0.119s (± 5.05%) ~ 0.106s 0.162s p=0.963 n=20
Bind Time 0.041s (± 9.98%) 0.042s (±10.64%) ~ 0.035s 0.064s p=0.686 n=20
Check Time 0.616s (± 1.21%) 0.618s (± 1.18%) ~ 0.594s 0.653s p=0.867 n=20
Emit Time 0.393s (± 0.85%) 0.390s (± 0.69%) -0.004s (- 0.90%) 0.385s 0.410s p=0.042 n=20
Total Time 1.192s (± 0.67%) 1.187s (± 0.78%) ~ 1.161s 1.239s p=0.337 n=20
arktype - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 686,116 686,116 ~ ~ ~ p=1.000 n=20
Types 939,797 939,797 ~ ~ ~ p=1.000 n=20
Memory Used 476,003k (± 0.01%) 475,972k (± 0.01%) ~ 475,804k 476,204k p=0.365 n=20
Memory Allocs 12,058,818 (± 0.02%) 12,051,242 (± 0.02%) -7,576 (- 0.06%) 12,046,819 12,062,076 p=0.000 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.040s (± 4.39%) 0.041s (± 3.81%) ~ 0.035s 0.050s p=0.430 n=20
Bind Time 0.014s (±10.14%) 0.013s (± 9.05%) ~ 0.011s 0.018s p=0.271 n=20
Check Time 0.839s (± 1.31%) 0.839s (± 1.17%) ~ 0.817s 0.889s p=0.888 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.921s (± 1.20%) 0.920s (± 1.05%) ~ 0.899s 0.971s p=0.815 n=20
class-transformer - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 45,376 45,376 ~ ~ ~ p=1.000 n=20
Types 7,573 7,573 ~ ~ ~ p=1.000 n=20
Memory Used 27,757k (± 0.03%) 27,741k (± 0.03%) -16k (- 0.06%) 27,717k 27,776k p=0.002 n=20
Memory Allocs 248,339 (± 0.05%) 247,678 (± 0.05%) -660 (- 0.27%) 247,292 248,222 p=0.000 n=20
Config Time 0.000s 0.001s 🔻+0.001s (+ ∞%) ~ ~ p=0.000 n=20
Parse Time 0.011s (± 4.01%) 0.011s (± 3.26%) ~ 0.009s 0.012s p=0.178 n=20
Bind Time 0.003s (±13.04%) 0.003s (± 9.93%) ~ 0.002s 0.005s p=1.000 n=20
Check Time 0.008s (± 6.02%) 0.008s (± 6.99%) ~ 0.006s 0.010s p=0.320 n=20
Emit Time 0.008s (± 4.96%) 0.007s (± 5.92%) ~ 0.006s 0.009s p=0.285 n=20
Total Time 0.030s (± 2.46%) 0.031s (± 1.44%) ~ 0.028s 0.032s p=0.301 n=20
effect - native
Errors 12 12 ~ ~ ~ p=1.000 n=20
Symbols 1,235,134 1,235,134 ~ ~ ~ p=1.000 n=20
Types 893,436 893,436 ~ ~ ~ p=1.000 n=20
Memory Used 941,791k (± 0.03%) 941,182k (± 0.02%) -609k (- 0.06%) 940,599k 942,017k p=0.001 n=20
Memory Allocs 12,625,088 (± 0.03%) 12,589,950 (± 0.03%) -35,138 (- 0.28%) 12,577,021 12,610,070 p=0.000 n=20
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=20
Parse Time 0.153s (± 1.33%) 0.153s (± 1.73%) ~ 0.143s 0.168s p=0.541 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.925s (± 1.13%) 0.934s (± 1.18%) ~ 0.883s 0.995s p=0.199 n=20
Emit Time 0.515s (± 1.80%) 0.515s (± 1.25%) ~ 0.483s 0.550s p=0.551 n=20
Total Time 1.694s (± 0.71%) 1.706s (± 0.61%) ~ 1.672s 1.751s p=0.199 n=20
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=20
Symbols 3,782,394 3,782,394 ~ ~ ~ p=1.000 n=20
Types 1,355,778 1,355,778 ~ ~ ~ p=1.000 n=20
Memory Used 1,680,492k (± 0.08%) 1,678,300k (± 0.07%) -2,192k (- 0.13%) 1,674,184k 1,683,042k p=0.006 n=20
Memory Allocs 25,756,831 (± 0.19%) 25,534,928 (± 0.09%) -221,903 (- 0.86%) 25,488,784 25,714,183 p=0.000 n=20
Config Time 0.008s (± 1.77%) 0.006s (± 3.32%) 🟩-0.002s (-22.84%) 0.006s 0.007s p=0.000 n=20
Parse Time 0.293s (± 5.48%) 0.267s (± 2.02%) 🟩-0.026s (- 9.02%) 0.241s 0.290s p=0.000 n=20
Bind Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Check Time 2.881s (± 0.76%) 2.894s (± 0.74%) ~ 2.783s 2.964s p=0.304 n=20
Emit Time 0.246s (± 1.42%) 0.245s (± 1.25%) ~ 0.234s 0.266s p=0.909 n=20
Total Time 3.917s (± 0.79%) 3.889s (± 0.58%) ~ 3.753s 3.971s p=0.314 n=20
sentry - native
Errors 2 2 ~ ~ ~ p=1.000 n=20
Symbols 4,793,266 4,793,266 ~ ~ ~ p=1.000 n=20
Types 2,607,066 2,607,066 ~ ~ ~ p=1.000 n=20
Memory Used 2,798,816k (± 0.03%) 2,797,850k (± 0.04%) ~ 2,795,010k 2,803,875k p=0.127 n=20
Memory Allocs 74,985,112 (± 0.21%) 74,627,059 (± 0.08%) -358,053 (- 0.48%) 74,347,647 74,917,795 p=0.000 n=20
Config Time 0.025s (± 0.58%) 0.018s (± 1.36%) 🟩-0.007s (-29.52%) 0.017s 0.018s p=0.000 n=20
Parse Time 0.468s (± 4.72%) 0.457s (± 2.47%) ~ 0.418s 0.505s p=0.635 n=20
Bind Time 0.146s (± 9.22%) 0.146s (± 9.43%) ~ 0.124s 0.220s p=0.493 n=20
Check Time 6.522s (± 0.39%) 6.509s (± 0.52%) ~ 6.357s 6.683s p=0.402 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 7.212s (± 0.43%) 7.178s (± 0.41%) ~ 7.063s 7.330s p=0.107 n=20
social-app - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,883,060 1,883,060 ~ ~ ~ p=1.000 n=20
Types 1,158,093 1,158,093 ~ ~ ~ p=1.000 n=20
Memory Used 952,750k (± 0.02%) 952,135k (± 0.02%) -616k (- 0.06%) 951,381k 952,876k p=0.000 n=20
Memory Allocs 13,496,203 (± 0.23%) 13,399,267 (± 0.10%) -96,936 (- 0.72%) 13,363,088 13,472,027 p=0.000 n=20
Config Time 0.007s (± 3.20%) 0.006s (± 6.00%) 🟩-0.002s (-23.49%) 0.005s 0.008s p=0.000 n=20
Parse Time 0.153s (± 2.39%) 0.154s (± 4.87%) ~ 0.134s 0.201s p=0.401 n=20
Bind Time 0.042s (±10.45%) 0.046s (±11.29%) ~ 0.035s 0.070s p=0.205 n=20
Check Time 1.399s (± 0.83%) 1.391s (± 0.87%) ~ 1.340s 1.441s p=0.358 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.619s (± 0.71%) 1.617s (± 0.87%) ~ 1.567s 1.700s p=0.616 n=20
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 1,184,972 1,184,972 ~ ~ ~ p=1.000 n=20
Types 438,823 438,823 ~ ~ ~ p=1.000 n=20
Memory Used 1,158,202k (± 0.32%) 1,157,364k (± 0.30%) ~ 1,146,542k 1,177,655k p=0.758 n=20
Memory Allocs 47,578,700 (± 0.09%) 47,419,923 (± 0.11%) -158,777 (- 0.33%) 47,186,295 47,545,181 p=0.000 n=20
Config Time 0.002s (±52.68%) 0.002s (±14.23%) ~ 0.001s 0.004s p=0.188 n=20
Parse Time 0.146s (± 8.12%) 0.141s (± 4.69%) ~ 0.130s 0.199s p=0.109 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.801s (± 0.89%) 0.803s (± 0.90%) ~ 0.778s 0.831s p=0.836 n=20
Emit Time 0.140s (± 1.60%) 0.141s (± 1.81%) ~ 0.132s 0.158s p=0.835 n=20
Total Time 9.396s (± 1.00%) 9.434s (± 1.38%) ~ 9.043s 10.333s p=0.779 n=20
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 263,481 263,481 ~ ~ ~ p=1.000 n=20
Types 196,103 196,103 ~ ~ ~ p=1.000 n=20
Memory Used 221,491k (± 0.01%) 221,552k (± 0.02%) +61k (+ 0.03%) 221,355k 221,695k p=0.028 n=20
Memory Allocs 2,388,637 (± 0.02%) 2,387,368 (± 0.01%) -1,269 (- 0.05%) 2,386,248 2,388,441 p=0.000 n=20
Config Time 0.000s (±208.60%) 0.000s (±95.71%) ~ 0.000s 0.001s p=0.342 n=20
Parse Time 0.049s (± 3.52%) 0.050s (± 3.97%) ~ 0.044s 0.060s p=0.720 n=20
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Check Time 0.388s (± 2.29%) 0.389s (± 2.35%) ~ 0.375s 0.445s p=0.899 n=20
Emit Time 0.053s (± 9.99%) 0.049s (± 5.29%) ~ 0.043s 0.061s p=0.329 n=20
Total Time 0.519s (± 1.72%) 0.517s (± 1.80%) ~ 0.494s 0.576s p=0.606 n=20
t3code-server - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 4,349,937 4,349,937 ~ ~ ~ p=1.000 n=20
Types 3,042,465 3,042,465 ~ ~ ~ p=1.000 n=20
Memory Used 2,395,154k (± 0.02%) 2,394,385k (± 0.03%) -769k (- 0.03%) 2,392,706k 2,398,334k p=0.011 n=20
Memory Allocs 37,128,398 (± 0.08%) 36,999,988 (± 0.03%) -128,411 (- 0.35%) 36,957,236 37,050,044 p=0.000 n=20
Config Time 0.003s (± 3.54%) 0.002s (± 9.53%) 🟩-0.001s (-22.03%) 0.002s 0.003s p=0.000 n=20
Parse Time 0.247s (± 2.13%) 0.244s (± 3.46%) ~ 0.222s 0.292s p=0.159 n=20
Bind Time 0.086s (±10.00%) 0.093s (±11.55%) ~ 0.075s 0.143s p=0.139 n=20
Check Time 5.869s (± 0.56%) 5.861s (± 0.69%) ~ 5.706s 6.107s p=0.525 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 6.217s (± 0.57%) 6.214s (± 0.64%) ~ 6.066s 6.432s p=0.606 n=20
tanstack-router - native
Errors 1 1 ~ ~ ~ p=1.000 n=20
Symbols 570,149 570,149 ~ ~ ~ p=1.000 n=20
Types 396,551 396,551 ~ ~ ~ p=1.000 n=20
Memory Used 315,315k (± 0.02%) 315,255k (± 0.02%) ~ 315,010k 315,540k p=0.144 n=20
Memory Allocs 4,333,086 (± 0.16%) 4,315,574 (± 0.06%) -17,512 (- 0.40%) 4,308,847 4,329,034 p=0.000 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.044s (± 2.94%) 0.045s (± 2.99%) ~ 0.040s 0.049s p=0.110 n=20
Bind Time 0.016s (±13.77%) 0.014s (± 9.73%) ~ 0.012s 0.023s p=0.500 n=20
Check Time 0.526s (± 0.71%) 0.524s (± 0.67%) ~ 0.512s 0.541s p=0.343 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.604s (± 0.84%) 0.605s (± 0.89%) ~ 0.586s 0.628s p=0.995 n=20
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=20
Symbols 231,607 231,607 ~ ~ ~ p=1.000 n=20
Types 181,163 181,163 ~ ~ ~ p=1.000 n=20
Memory Used 190,851k (± 0.01%) 190,837k (± 0.02%) ~ 190,682k 190,929k p=0.673 n=20
Memory Allocs 1,310,078 (± 0.02%) 1,310,194 (± 0.02%) ~ 1,309,397 1,311,237 p=0.478 n=20
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Parse Time 0.040s (± 2.75%) 0.041s (± 2.84%) ~ 0.037s 0.045s p=0.106 n=20
Bind Time 0.021s (± 4.78%) 0.021s (± 4.56%) ~ 0.018s 0.026s p=0.843 n=20
Check Time 0.302s (± 0.93%) 0.302s (± 1.46%) ~ 0.293s 0.330s p=0.349 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.370s (± 0.67%) 0.371s (± 1.19%) ~ 0.363s 0.398s p=0.732 n=20
vscode - native
Errors 11 11 ~ ~ ~ p=1.000 n=20
Symbols 7,887,624 7,887,624 ~ ~ ~ p=1.000 n=20
Types 4,623,231 4,623,231 ~ ~ ~ p=1.000 n=20
Memory Used 5,298,619k (± 0.02%) 5,296,126k (± 0.02%) -2,493k (- 0.05%) 5,293,211k 5,303,295k p=0.001 n=20
Memory Allocs 59,426,882 (± 0.02%) 58,390,075 (± 0.01%) -1,036,807 (- 1.74%) 58,373,065 58,436,926 p=0.000 n=20
Config Time 0.034s (± 0.88%) 0.025s (±20.34%) 🟩-0.009s (-25.19%) 0.022s 0.072s p=0.000 n=20
Parse Time 0.921s (± 1.05%) 0.907s (± 4.34%) -0.014s (- 1.56%) 0.828s 1.230s p=0.008 n=20
Bind Time 0.296s (± 0.70%) 0.320s (± 6.33%) ~ 0.289s 0.437s p=0.329 n=20
Check Time 7.084s (± 0.72%) 7.079s (± 1.10%) ~ 6.838s 7.552s p=0.542 n=20
Emit Time 2.042s (± 4.03%) 2.194s (± 8.21%) ~ 1.941s 2.943s p=0.337 n=20
Total Time 10.435s (± 0.67%) 10.589s (± 1.53%) ~ 10.236s 11.263s p=0.551 n=20
webpack - native
Errors 615 615 ~ ~ ~ p=1.000 n=20
Symbols 883,161 883,161 ~ ~ ~ p=1.000 n=20
Types 621,386 621,386 ~ ~ ~ p=1.000 n=20
Memory Used 645,731k (± 0.02%) 645,556k (± 0.02%) -175k (- 0.03%) 645,206k 646,043k p=0.034 n=20
Memory Allocs 6,049,186 (± 0.05%) 6,019,993 (± 0.11%) -29,192 (- 0.48%) 6,004,628 6,045,232 p=0.000 n=20
Config Time 0.004s 0.003s (± 6.90%) 🟩-0.001s (-15.00%) 0.003s 0.004s p=0.000 n=20
Parse Time 0.133s (± 2.09%) 0.131s (± 2.19%) ~ 0.122s 0.147s p=0.239 n=20
Bind Time 0.044s (± 8.86%) 0.045s (± 9.40%) ~ 0.037s 0.070s p=0.752 n=20
Check Time 1.084s (± 0.74%) 1.084s (± 0.82%) ~ 1.044s 1.117s p=0.794 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 1.290s (± 0.71%) 1.289s (± 0.74%) ~ 1.255s 1.327s p=0.597 n=20
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=20
Symbols 644,330 644,330 ~ ~ ~ p=1.000 n=20
Types 392,175 392,175 ~ ~ ~ p=1.000 n=20
Memory Used 346,914k (± 0.02%) 346,959k (± 0.03%) ~ 346,587k 347,543k p=0.678 n=20
Memory Allocs 3,998,883 (± 0.07%) 4,009,701 (± 0.21%) +10,818 (+ 0.27%) 3,985,379 4,046,737 p=0.044 n=20
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=20
Parse Time 0.060s (± 2.24%) 0.064s (± 3.58%) 🔻+0.004s (+ 6.76%) 0.055s 0.077s p=0.003 n=20
Bind Time 0.022s (±10.31%) 0.018s (± 5.16%) 🟩-0.004s (-18.78%) 0.016s 0.024s p=0.001 n=20
Check Time 0.439s (± 1.46%) 0.433s (± 1.89%) -0.006s (- 1.33%) 0.414s 0.498s p=0.023 n=20
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=20
Total Time 0.527s (± 1.15%) 0.522s (± 1.82%) -0.006s (- 1.05%) 0.500s 0.599s p=0.027 n=20
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • arktype - native
  • class-transformer - native
  • effect - native
  • mui-docs - native
  • sentry - native
  • social-app - native
  • strada-build-src - native
  • strada-compiler - native
  • t3code-server - native
  • tanstack-router - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 20
Baseline baseline 20

lsp

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
CompilerLSP - native
Req 1 - updateOpen 5ms (± 8.42%) 5ms (± 8.11%) ~ 4ms 8ms p=0.883 n=20
Req 2 - geterr 137ms (± 1.11%) 136ms (± 2.53%) -1ms (- 0.47%) 131ms 166ms p=0.047 n=20
Req 3 - references 29ms (± 6.30%) 29ms (± 3.00%) ~ 26ms 34ms p=0.705 n=20
Req 4 - navto 14ms (± 2.64%) 15ms (± 8.66%) ~ 13ms 24ms p=0.558 n=20
Req 5 - completionInfo count 1,525 1,525 ~ ~ ~ p=1.000 n=20
Req 5 - completionInfo 9ms (± 8.76%) 8ms (± 5.52%) ~ 8ms 12ms p=0.964 n=20
Compiler-UnionsLSP - native
Req 1 - updateOpen 5ms (± 7.48%) 5ms (± 9.41%) ~ 5ms 8ms p=0.477 n=20
Req 2 - geterr 268ms (± 1.42%) 268ms (± 1.23%) ~ 255ms 277ms p=0.984 n=20
Req 3 - references 28ms (± 2.47%) 28ms (± 2.15%) ~ 27ms 32ms p=0.130 n=20
Req 4 - navto 16ms (± 3.85%) 16ms (± 4.63%) ~ 15ms 20ms p=0.720 n=20
Req 5 - completionInfo count 1,363 1,363 ~ ~ ~ p=1.000 n=20
Req 5 - completionInfo 10ms (±10.48%) 11ms (±10.97%) ~ 8ms 15ms p=0.125 n=20
xstate-main-1-LSP - native
⚠️ Failed failed failed
System info unknown
Hosts
  • native
Scenarios
  • CompilerLSP - native
  • Compiler-UnionsLSP - native
  • xstate-main-1-LSP - native
Benchmark Name Iterations
Current pr 20
Baseline baseline 20

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
lsp-startup - native
⚠️ Failed failed failed
tsgo-startup - native
⚠️ Failed failed failed
System info unknown
Hosts
  • native
Scenarios
  • lsp-startup - native
  • tsgo-startup - native
Benchmark Name Iterations
Current pr 20
Baseline baseline 20

Developer Information:

Download Benchmarks

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The prefetch implementation limits active reads but not goroutine creation, allowing wide directories to spawn thousands of waiting goroutines and incur excessive memory and scheduling overhead.

1 open issue

Review effort: Balanced

}

func (p *directoryPrefetcher) queue(item prefetchItem) {
p.wg.Queue(func() { p.run(item) })

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested this, and it was 11% slower. This is the pattern parsing and binding use too.

@andrewbranch
Andrew Branch (andrewbranch) added this pull request to the merge queue Nov 5, 2026
Merged via the queue into microsoft:main with commit 7502ae1 Nov 5, 2026
34 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Author: Team Domain: Performance Performance related For Uncommitted Bug PR for untriaged, rejected, closed or missing bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants