Skip to content

Store value symbol links inline on checker-created symbols - #4703

Open
mds-ant wants to merge 4 commits into
microsoft:mainfrom
mds-ant:claude/tsgo-checker-perf-2e234b
Open

Store value symbol links inline on checker-created symbols#4703
mds-ant wants to merge 4 commits into
microsoft:mainfrom
mds-ant:claude/tsgo-checker-perf-2e234b

Conversation

@mds-ant

@mds-ant mds-ant commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Context

Since #4329, value symbol links live in a paged store indexed by symbol ID, which already removed the hash map probes they used to cost. What remains is the machinery around each access: loading or assigning the symbol's ID, walking the page table, and, on first touch, allocating the links struct in a separate arena. On a full --noEmit check of VS Code's src project, the paged store handles 47.5M accesses and 7.1M links allocations, and 11.4M of those accesses plus 5.5M of those allocations belong to symbols the checker created itself.

Those symbols are only ever seen by the checker that created them, so this PR stores their links directly on the symbol: the checker's arena now hands out a transientSymbol, an ast.Symbol plus an inline checkerSymbolData block reached through the new ast.Symbol.CheckerData field. An access becomes a single pointer chase with no ID, no page walk, and no separate allocation. Binder symbols are shared across checkers and stay on the per-checker paged store with CheckerData nil. TypeScript does the same thing: TransientSymbol carries its SymbolLinks inline.

The work is split into four commits:

  1. Collapse paired Has + Get/TryGet lookups into a single TryGet at the few sites that used them.
  2. Add the inline storage and the getValueSymbolLinks/tryGetValueSymbolLinks accessors.
  3. Mechanically switch every call site over to the accessors.
  4. Rename the remaining store to binderValueSymbolLinks.

Performance

Measured on VS Code's src project with --noEmit against main including #4329:

Configuration main this PR median time
1 checker 19.4 s 19.3 s within noise
4 checkers 6.23 s 5.99 s −3.8%
8 checkers 4.33 s 4.02 s −7.1%

Memory

  • Every ast.Symbol grows by 16 bytes for the new CheckerData field, including binder symbols that never use it.
  • Checker-created symbols no longer need a separately allocated links struct or a slot in the paged store, and since IDs interleave across checkers, one skipped slot on a hot page saves more than 8 bytes once several checkers are running.
  • The balance depends on the checker count: a small increase at the default, a clear win at higher parallelism.
Configuration main this PR
1 checker 4286 MB 4402 MB
4 checkers 5208 MB 5232 MB
8 checkers 6028 MB 5843 MB

This PR was assisted by Claude Code.

Copilot AI review requested due to automatic review settings July 22, 2026 09:54

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.

Pull request overview

Moves value-symbol links inline for checker-created symbols, reducing map traffic while retaining per-checker storage for binder symbols.

Changes:

  • Adds inline checker data to transient symbols.
  • Introduces unified value-link accessors.
  • Migrates checker call sites to the new storage abstraction.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated no comments.

Show a summary per file
File Description
internal/ast/symbol.go Adds checker-owned side data.
internal/checker/symbollinks.go Implements inline link storage and accessors.
internal/checker/checker.go Allocates transient symbols and migrates link access.
internal/checker/services.go Uses the new accessors.
internal/checker/nodebuilderimpl.go Migrates node-builder link access.
internal/checker/jsx.go Migrates JSX symbol links.
internal/checker/inference.go Migrates inference symbol links.
internal/checker/exports.go Updates exported name-type lookup.

@jakebailey

Copy link
Copy Markdown
Member

@typescript-bot perf test this

@typescript-automation

typescript-automation Bot commented Jul 22, 2026

Copy link
Copy Markdown

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

@jakebailey
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 4 4 ~ ~ ~ p=1.000 n=6
Symbols 81,795 (± 0.03%) 81,808 (± 0.02%) ~ 81,772 81,827 p=0.199 n=6
Types 98,819 98,819 ~ ~ ~ p=1.000 n=6
Memory Used 180,410k (± 0.23%) 181,071k (± 0.40%) ~ 179,943k 181,950k p=0.173 n=6
Memory Allocs 2,695,592 (± 0.01%) 2,695,074 (± 0.01%) -518 (- 0.02%) 2,694,707 2,695,430 p=0.013 n=6
Config Time 0.000s (±244.70%) 0.001s (±48.94%) 🔻+0.001s (+400.00%) 0.000s 0.001s p=0.034 n=6
Parse Time 0.062s (± 7.70%) 0.060s (± 7.87%) ~ 0.057s 0.070s p=0.685 n=6
Bind Time 0.019s (±10.67%) 0.018s (±20.02%) ~ 0.013s 0.022s p=0.335 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 1.082s (± 0.87%) 1.058s (± 1.70%) -0.024s (- 2.23%) 1.040s 1.079s p=0.030 n=6
Total Time 1.165s (± 1.27%) 1.138s (± 1.63%) -0.027s (- 2.36%) 1.118s 1.163s p=0.045 n=6
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 871,463 (± 0.06%) 871,966 (± 0.16%) ~ 870,090 873,844 p=0.575 n=6
Types 263,952 (± 0.00%) 263,952 (± 0.00%) ~ 263,949 263,954 p=1.000 n=6
Memory Used 829,758k (± 0.07%) 836,784k (± 0.06%) +7,026k (+ 0.85%) 836,079k 837,381k p=0.005 n=6
Memory Allocs 13,171,692 (± 0.07%) 13,167,608 (± 0.07%) ~ 13,160,064 13,185,010 p=0.230 n=6
Config Time 0.027s (±14.40%) 0.027s (±13.95%) ~ 0.022s 0.030s p=0.935 n=6
Parse Time 0.267s (± 2.04%) 0.267s (± 4.65%) ~ 0.254s 0.281s p=0.936 n=6
Bind Time 0.053s (±26.89%) 0.049s (±30.73%) ~ 0.038s 0.070s p=0.520 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 2.246s (± 2.08%) 2.152s (± 1.64%) 🟩-0.094s (- 4.17%) 2.109s 2.210s p=0.008 n=6
Total Time 2.608s (± 2.09%) 2.508s (± 1.47%) 🟩-0.100s (- 3.83%) 2.470s 2.568s p=0.008 n=6
mui-docs - native
Errors 11,268 (± 0.10%) 11,278 (± 0.06%) ~ 11,265 11,282 p=0.080 n=6
Symbols 4,450,247 4,450,247 ~ ~ ~ p=1.000 n=6
Types 1,659,961 1,659,961 ~ ~ ~ p=1.000 n=6
Memory Used 5,081,932k (± 0.04%) 5,072,606k (± 0.02%) -9,325k (- 0.18%) 5,071,583k 5,074,290k p=0.005 n=6
Memory Allocs 51,250,133 (± 0.13%) 51,231,318 (± 0.12%) ~ 51,182,406 51,344,609 p=0.575 n=6
Config Time 0.028s (±10.09%) 0.030s (± 8.16%) ~ 0.027s 0.034s p=0.331 n=6
Parse Time 0.594s (± 2.52%) 0.578s (± 2.03%) ~ 0.559s 0.590s p=0.093 n=6
Bind Time 0.002s (±22.11%) 0.003s 🔻+0.001s (+28.57%) ~ ~ p=0.025 n=6
Check Time 21.039s (± 0.92%) 19.542s (± 0.58%) 🟩-1.497s (- 7.12%) 19.427s 19.665s p=0.005 n=6
Emit Time 0.538s (± 0.32%) 0.570s (± 4.75%) 🔻+0.031s (+ 5.85%) 0.542s 0.595s p=0.005 n=6
Total Time 23.021s (± 1.19%) 21.683s (± 0.22%) 🟩-1.338s (- 5.81%) 21.610s 21.737s p=0.005 n=6
self-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,394,141 1,394,141 ~ ~ ~ p=1.000 n=6
Types 442,163 442,163 ~ ~ ~ p=1.000 n=6
Memory Used 1,657,822k (± 0.48%) 1,680,900k (± 0.20%) +23,078k (+ 1.39%) 1,675,550k 1,685,279k p=0.005 n=6
Memory Allocs 97,249,696 (± 0.09%) 97,204,144 (± 0.04%) ~ 97,147,484 97,264,064 p=0.298 n=6
Config Time 0.022s (± 9.64%) 0.021s (±18.17%) ~ 0.016s 0.026s p=0.688 n=6
Parse Time 0.261s (± 3.34%) 0.259s (± 2.45%) ~ 0.252s 0.266s p=0.810 n=6
Bind Time 0.001s (±244.70%) 0.000s ~ ~ ~ p=0.405 n=6
Check Time 2.722s (± 0.40%) 2.654s (± 0.93%) -0.068s (- 2.50%) 2.611s 2.682s p=0.005 n=6
Emit Time 0.360s (± 4.86%) 0.348s (± 4.45%) ~ 0.326s 0.366s p=0.173 n=6
Total Time 34.942s (± 0.92%) 34.158s (± 1.10%) -0.784s (- 2.24%) 33.700s 34.848s p=0.020 n=6
self-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 337,634 337,634 ~ ~ ~ p=1.000 n=6
Types 199,520 199,520 ~ ~ ~ p=1.000 n=6
Memory Used 332,375k (± 0.02%) 334,136k (± 0.04%) +1,761k (+ 0.53%) 333,975k 334,301k p=0.005 n=6
Memory Allocs 4,683,302 (± 0.01%) 4,682,026 (± 0.01%) -1,276 (- 0.03%) 4,681,055 4,682,748 p=0.008 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.131s (± 3.97%) 0.134s (± 4.03%) ~ 0.124s 0.139s p=0.228 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 1.381s (± 1.40%) 1.356s (± 0.81%) -0.025s (- 1.82%) 1.344s 1.372s p=0.037 n=6
Emit Time 0.124s (± 9.79%) 0.117s (± 8.11%) ~ 0.106s 0.130s p=0.377 n=6
Total Time 1.691s (± 0.98%) 1.660s (± 1.01%) -0.031s (- 1.85%) 1.642s 1.686s p=0.013 n=6
ts-pre-modules - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 97,488 97,488 ~ ~ ~ p=1.000 n=6
Types 356 356 ~ ~ ~ p=1.000 n=6
Memory Used 133,712k (± 0.02%) 135,667k (± 0.01%) +1,955k (+ 1.46%) 135,636k 135,678k p=0.005 n=6
Memory Allocs 180,410 (± 0.14%) 180,322 (± 0.30%) ~ 179,735 181,086 p=0.470 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.110s (± 4.03%) 0.112s (± 5.05%) ~ 0.104s 0.119s p=0.520 n=6
Bind Time 0.034s (±15.86%) 0.040s (±14.05%) ~ 0.032s 0.046s p=0.077 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Total Time 0.148s (± 6.78%) 0.156s (± 4.23%) ~ 0.150s 0.166s p=0.127 n=6
vscode - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 7,243,519 7,243,519 ~ ~ ~ p=1.000 n=6
Types 2,542,949 2,542,949 ~ ~ ~ p=1.000 n=6
Memory Used 4,970,209k (± 0.02%) 4,966,804k (± 0.03%) -3,405k (- 0.07%) 4,965,053k 4,968,797k p=0.005 n=6
Memory Allocs 37,371,313 (± 0.09%) 37,318,202 (± 0.10%) -53,111 (- 0.14%) 37,272,259 37,377,121 p=0.045 n=6
Config Time 0.074s (± 9.64%) 0.075s (± 9.82%) ~ 0.066s 0.082s p=0.572 n=6
Parse Time 0.903s (± 3.85%) 0.972s (± 6.52%) 🔻+0.069s (+ 7.66%) 0.880s 1.071s p=0.031 n=6
Bind Time 0.231s (±36.65%) 0.199s (±33.89%) ~ 0.151s 0.328s p=0.873 n=6
Check Time 9.871s (± 1.23%) 9.145s (± 0.94%) 🟩-0.726s (- 7.35%) 9.046s 9.264s p=0.005 n=6
Emit Time 2.890s (±10.48%) 2.971s (± 6.89%) ~ 2.774s 3.260s p=0.298 n=6
Total Time 13.990s (± 1.20%) 13.388s (± 0.83%) 🟩-0.602s (- 4.30%) 13.269s 13.531s p=0.005 n=6
webpack - native
Errors 2 2 ~ ~ ~ p=1.000 n=6
Symbols 192,429 192,429 ~ ~ ~ p=1.000 n=6
Types 340 340 ~ ~ ~ p=1.000 n=6
Memory Used 237,119k (± 0.17%) 240,881k (± 0.05%) +3,762k (+ 1.59%) 240,725k 241,015k p=0.005 n=6
Memory Allocs 977,101 (± 0.43%) 979,052 (± 0.65%) ~ 973,065 991,367 p=0.810 n=6
Config Time 0.012s (± 6.99%) 0.011s (±22.92%) ~ 0.008s 0.014s p=0.869 n=6
Parse Time 0.161s (± 5.91%) 0.163s (± 5.78%) ~ 0.151s 0.175s p=0.747 n=6
Bind Time 0s 0s ~ ~ ~ p=1.000 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.042s (±11.34%) 0.040s (± 9.87%) ~ 0.035s 0.046s p=0.571 n=6
Total Time 0.215s (± 5.09%) 0.215s (± 3.14%) ~ 0.205s 0.222s p=0.873 n=6
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,064,596 1,064,596 ~ ~ ~ p=1.000 n=6
Types 392,760 392,760 ~ ~ ~ p=1.000 n=6
Memory Used 645,825k (± 0.02%) 648,521k (± 0.01%) +2,696k (+ 0.42%) 648,423k 648,598k p=0.005 n=6
Memory Allocs 4,993,504 (± 0.04%) 4,988,475 (± 0.04%) -5,029 (- 0.10%) 4,985,479 4,990,911 p=0.013 n=6
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=6
Parse Time 0.121s (±10.17%) 0.131s (± 5.29%) ~ 0.119s 0.138s p=0.173 n=6
Bind Time 0.033s (±23.21%) 0.023s (± 9.75%) 🟩-0.010s (-31.16%) 0.020s 0.026s p=0.015 n=6
Check Time 1.114s (± 1.16%) 1.050s (± 0.45%) 🟩-0.064s (- 5.77%) 1.043s 1.055s p=0.005 n=6
Emit Time 0.001s 0.001s (±48.94%) ~ 0.000s 0.001s p=0.405 n=6
Total Time 1.274s (± 1.01%) 1.210s (± 0.77%) 🟩-0.064s (- 5.04%) 1.200s 1.223s p=0.005 n=6
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • self-build-src - native
  • self-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

lsp

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-UnionsLSP - native
Req 1 - updateOpen 10ms (± 4.15%) 10ms ~ ~ ~ p=0.405 n=6
Req 2 - geterr 974ms (± 0.88%) 946ms (± 0.53%) -28ms (- 2.82%) 937ms 952ms p=0.005 n=6
Req 3 - references 40ms (± 7.90%) 42ms (±12.00%) ~ 37ms 49ms p=0.517 n=6
Req 4 - navto 18ms (± 4.78%) 18ms (±17.12%) ~ 16ms 24ms p=0.797 n=6
Req 5 - completionInfo count 1,357 1,357 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 17ms (±30.25%) 17ms (±32.61%) ~ 13ms 28ms p=0.683 n=6
CompilerLSP - native
Req 1 - updateOpen 11ms (± 4.84%) 11ms (± 3.76%) ~ 10ms 11ms p=0.595 n=6
Req 2 - geterr 461ms (± 2.03%) 453ms (± 2.00%) ~ 442ms 465ms p=0.199 n=6
Req 3 - references 47ms (± 7.36%) 48ms (± 7.70%) ~ 42ms 52ms p=0.514 n=6
Req 4 - navto 18ms (± 3.51%) 18ms (± 3.13%) ~ 17ms 18ms p=0.201 n=6
Req 5 - completionInfo count 1,519 1,519 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 22ms (±15.61%) 21ms (±20.44%) ~ 16ms 28ms p=0.520 n=6
System info unknown
Hosts
  • native
Scenarios
  • CompilerLSP - native
  • Compiler-UnionsLSP - native
  • xstate-main-1-LSP - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
lsp-startup - native
Execution time 4.73ms (±516.54%) 4.73ms (±516.54%) +0.00ms (+ 0.05%) 0.00ms 474.54ms p=0.017 n=600
tsgo-startup - native
Execution time 5.89ms (±516.56%) 5.89ms (±516.55%) -0.01ms (- 0.10%) 0.00ms 594.65ms p=0.000 n=600
System info unknown
Hosts
  • native
Scenarios
  • lsp-startup - native
  • tsgo-startup - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

Comment thread internal/ast/symbol.go
ExportSymbol *Symbol
// CheckerData is side data attached by the one Checker that created this symbol; nil on
// binder-created symbols, which are shared between checkers. Owned by the checker package.
CheckerData any

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Right now Symbol is 96 bytes with no slack, so this makes every symbol larger. Maybe that's not a major problem?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

On the VS Code corpus, this change is still net-positive on memory overall (see the "Memory" section). Looking at the "Memory Used" table rows in the perf results, the general increase seems to be negligibly small (mostly 0.0x%).

@jakebailey
jakebailey requested a review from ahejlsberg July 22, 2026 14:06
// transientSymbol co-allocates a checker-created symbol with its value symbol links, reached via
// symbol.CheckerData. Such symbols are owned by the creating Checker alone and must never be
// handed to another checker; binder symbols use c.binderValueSymbolLinks (only via the accessors).
type transientSymbol struct {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is a nit, but we probably don't need a whole new file just for these 40 lines.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Your call! Happy to inline.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'd prefer moving it, yes

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That being said #4329 is probably going to provide a good place to put this, so probably not worth touching right now until that's in and you have to rebase

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm also curious whether the performance gains from this PR persist after #4329.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I'd prefer moving it, yes

Alright, I'll move once #4329 has been merged.

I'm also curious whether the performance gains from this PR persist after #4329.

That's a good point, perhaps we're double-counting a little here. I'll rebase this branch and we can re-run the benchmark.

@mds-ant
mds-ant force-pushed the claude/tsgo-checker-perf-2e234b branch from edd2d57 to 102a349 Compare July 23, 2026 09:57
@jakebailey

Copy link
Copy Markdown
Member

@typescript-bot perf test this

@typescript-automation

typescript-automation Bot commented Jul 23, 2026

Copy link
Copy Markdown

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

@jakebailey
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 4 4 ~ ~ ~ p=1.000 n=6
Symbols 81,820 (± 0.03%) 81,817 (± 0.02%) ~ 81,800 81,847 p=0.936 n=6
Types 98,819 98,819 ~ ~ ~ p=1.000 n=6
Memory Used 178,286k (± 0.36%) 178,582k (± 0.24%) ~ 177,991k 179,183k p=0.575 n=6
Memory Allocs 2,695,874 (± 0.01%) 2,694,942 (± 0.01%) -932 (- 0.03%) 2,694,619 2,695,250 p=0.005 n=6
Config Time 0.001s (±48.94%) 0.000s (±154.76%) ~ 0.000s 0.001s p=0.112 n=6
Parse Time 0.060s (± 2.88%) 0.059s (± 5.39%) ~ 0.054s 0.064s p=0.935 n=6
Bind Time 0.018s (±20.70%) 0.019s (±10.67%) ~ 0.018s 0.022s p=0.934 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 1.037s (± 1.36%) 1.039s (± 0.54%) ~ 1.033s 1.046s p=0.370 n=6
Total Time 1.117s (± 1.23%) 1.120s (± 0.70%) ~ 1.108s 1.132s p=0.229 n=6
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 872,223 (± 0.10%) 872,726 (± 0.13%) ~ 871,005 874,250 p=0.471 n=6
Types 263,952 (± 0.00%) 263,953 (± 0.00%) ~ 263,951 263,955 p=0.160 n=6
Memory Used 828,920k (± 0.10%) 833,466k (± 0.05%) +4,546k (+ 0.55%) 833,014k 833,880k p=0.005 n=6
Memory Allocs 13,178,891 (± 0.07%) 13,175,164 (± 0.07%) ~ 13,166,149 13,185,080 p=0.689 n=6
Config Time 0.026s (± 8.41%) 0.026s (±13.64%) ~ 0.022s 0.032s p=0.809 n=6
Parse Time 0.262s (± 3.41%) 0.261s (± 2.50%) ~ 0.251s 0.269s p=0.936 n=6
Bind Time 0.049s (±18.98%) 0.052s (±41.13%) ~ 0.037s 0.085s p=0.521 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 2.136s (± 2.24%) 2.110s (± 1.26%) ~ 2.085s 2.147s p=0.378 n=6
Total Time 2.489s (± 1.91%) 2.461s (± 1.18%) ~ 2.424s 2.498s p=0.471 n=6
mui-docs - native
Errors 11,280 (± 0.01%) 11,279 (± 0.03%) ~ 11,272 11,282 p=0.934 n=6
Symbols 4,450,248 4,450,248 ~ ~ ~ p=1.000 n=6
Types 1,659,963 1,659,963 ~ ~ ~ p=1.000 n=6
Memory Used 5,070,967k (± 0.02%) 5,069,008k (± 0.04%) ~ 5,067,539k 5,072,140k p=0.173 n=6
Memory Allocs 51,277,058 (± 0.05%) 51,219,399 (± 0.08%) -57,659 (- 0.11%) 51,173,903 51,283,748 p=0.031 n=6
Config Time 0.027s (±16.55%) 0.025s (±14.07%) ~ 0.020s 0.029s p=0.375 n=6
Parse Time 0.586s (± 2.17%) 0.575s (± 2.38%) ~ 0.557s 0.591s p=0.298 n=6
Bind Time 0.003s (±14.39%) 0.002s (±22.11%) ~ 0.002s 0.003s p=0.112 n=6
Check Time 19.763s (± 0.67%) 19.314s (± 0.29%) -0.449s (- 2.27%) 19.235s 19.383s p=0.005 n=6
Emit Time 0.608s (±18.42%) 0.557s (± 5.26%) ~ 0.537s 0.596s p=0.373 n=6
Total Time 21.873s (± 0.73%) 21.308s (± 0.60%) -0.565s (- 2.58%) 21.200s 21.499s p=0.005 n=6
self-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,394,141 1,394,141 ~ ~ ~ p=1.000 n=6
Types 442,163 442,163 ~ ~ ~ p=1.000 n=6
Memory Used 1,661,874k (± 0.26%) 1,682,109k (± 0.32%) +20,234k (+ 1.22%) 1,672,240k 1,687,283k p=0.005 n=6
Memory Allocs 97,223,321 (± 0.08%) 97,217,618 (± 0.07%) ~ 97,148,630 97,334,951 p=1.000 n=6
Config Time 0.024s (±15.32%) 0.024s (±12.99%) ~ 0.020s 0.027s p=1.000 n=6
Parse Time 0.267s (± 1.87%) 0.266s (± 3.43%) ~ 0.250s 0.275s p=0.810 n=6
Bind Time 0.000s 0.000s (±244.70%) ~ 0.000s 0.001s p=0.405 n=6
Check Time 2.537s (± 1.34%) 2.533s (± 1.16%) ~ 2.485s 2.560s p=1.000 n=6
Emit Time 0.356s (± 5.64%) 0.344s (± 3.42%) ~ 0.332s 0.358s p=0.423 n=6
Total Time 32.997s (± 0.57%) 32.878s (± 0.72%) ~ 32.550s 33.176s p=0.378 n=6
self-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 337,634 337,634 ~ ~ ~ p=1.000 n=6
Types 199,520 199,520 ~ ~ ~ p=1.000 n=6
Memory Used 326,520k (± 0.03%) 327,858k (± 0.04%) +1,338k (+ 0.41%) 327,611k 327,983k p=0.005 n=6
Memory Allocs 4,685,215 (± 0.02%) 4,681,665 (± 0.01%) -3,550 (- 0.08%) 4,680,922 4,682,502 p=0.005 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.131s (± 2.97%) 0.130s (± 8.26%) ~ 0.119s 0.142s p=1.000 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 1.288s (± 0.65%) 1.281s (± 0.32%) ~ 1.274s 1.286s p=0.065 n=6
Emit Time 0.118s (± 9.67%) 0.117s (± 4.98%) ~ 0.106s 0.122s p=1.000 n=6
Total Time 1.593s (± 0.93%) 1.580s (± 0.38%) ~ 1.573s 1.588s p=0.092 n=6
ts-pre-modules - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 97,488 97,488 ~ ~ ~ p=1.000 n=6
Types 356 356 ~ ~ ~ p=1.000 n=6
Memory Used 133,715k (± 0.02%) 135,630k (± 0.02%) +1,915k (+ 1.43%) 135,593k 135,679k p=0.005 n=6
Memory Allocs 180,253 (± 0.14%) 180,207 (± 0.21%) ~ 179,752 180,629 p=0.936 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.114s (± 5.08%) 0.111s (± 6.53%) ~ 0.107s 0.126s p=0.291 n=6
Bind Time 0.040s (±10.48%) 0.039s (±11.40%) ~ 0.031s 0.043s p=0.469 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Total Time 0.158s (± 5.73%) 0.154s (± 6.30%) ~ 0.143s 0.171s p=0.336 n=6
vscode - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 7,275,954 7,275,954 ~ ~ ~ p=1.000 n=6
Types 2,544,273 2,544,273 ~ ~ ~ p=1.000 n=6
Memory Used 4,984,518k (± 0.04%) 4,956,578k (± 0.02%) -27,941k (- 0.56%) 4,955,538k 4,958,555k p=0.005 n=6
Memory Allocs 37,412,135 (± 0.11%) 37,304,664 (± 0.08%) -107,472 (- 0.29%) 37,279,109 37,353,643 p=0.005 n=6
Config Time 0.077s (±13.25%) 0.077s (±12.20%) ~ 0.060s 0.086s p=0.936 n=6
Parse Time 0.931s (± 6.25%) 0.944s (± 4.04%) ~ 0.897s 0.982s p=0.378 n=6
Bind Time 0.205s (±37.27%) 0.168s (±13.56%) ~ 0.146s 0.208s p=0.521 n=6
Check Time 8.520s (± 0.92%) 8.228s (± 0.51%) 🟩-0.292s (- 3.43%) 8.165s 8.273s p=0.005 n=6
Emit Time 2.594s (± 8.33%) 2.681s (± 4.03%) ~ 2.596s 2.841s p=0.689 n=6
Total Time 12.348s (± 0.96%) 12.123s (± 1.22%) -0.225s (- 1.82%) 12.006s 12.341s p=0.030 n=6
webpack - native
Errors 2 2 ~ ~ ~ p=1.000 n=6
Symbols 192,456 192,456 ~ ~ ~ p=1.000 n=6
Types 340 340 ~ ~ ~ p=1.000 n=6
Memory Used 237,104k (± 0.13%) 240,758k (± 0.12%) +3,653k (+ 1.54%) 240,418k 241,261k p=0.005 n=6
Memory Allocs 978,258 (± 0.46%) 979,491 (± 0.72%) ~ 972,970 990,807 p=0.936 n=6
Config Time 0.008s (±23.74%) 0.010s (±29.71%) ~ 0.006s 0.014s p=0.331 n=6
Parse Time 0.151s (± 4.10%) 0.152s (± 5.15%) ~ 0.145s 0.167s p=1.000 n=6
Bind Time 0s 0s ~ ~ ~ p=1.000 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.038s (±21.78%) 0.041s (±31.01%) ~ 0.029s 0.055s p=0.810 n=6
Total Time 0.198s (± 7.05%) 0.204s (±10.07%) ~ 0.182s 0.231s p=0.630 n=6
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,064,596 1,064,596 ~ ~ ~ p=1.000 n=6
Types 392,760 392,760 ~ ~ ~ p=1.000 n=6
Memory Used 649,077k (± 0.02%) 647,762k (± 0.02%) -1,316k (- 0.20%) 647,629k 647,911k p=0.005 n=6
Memory Allocs 5,001,933 (± 0.05%) 4,996,043 (± 0.19%) ~ 4,983,641 5,009,574 p=0.298 n=6
Config Time 0.005s 0.005s (±11.05%) ~ 0.004s 0.005s p=0.174 n=6
Parse Time 0.134s (± 5.04%) 0.136s (± 7.01%) ~ 0.122s 0.148s p=0.810 n=6
Bind Time 0.030s (±27.58%) 0.036s (±24.39%) ~ 0.024s 0.046s p=0.293 n=6
Check Time 1.246s (± 0.89%) 1.209s (± 0.99%) -0.037s (- 2.98%) 1.193s 1.225s p=0.005 n=6
Emit Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Total Time 1.419s (± 0.68%) 1.390s (± 0.95%) -0.029s (- 2.04%) 1.365s 1.403s p=0.005 n=6
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • self-build-src - native
  • self-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

lsp

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-UnionsLSP - native
Req 1 - updateOpen 10ms (± 7.40%) 10ms ~ ~ ~ p=0.598 n=6
Req 2 - geterr 939ms (± 0.59%) 942ms (± 0.36%) ~ 937ms 946ms p=0.416 n=6
Req 3 - references 44ms (±11.98%) 40ms (±14.75%) ~ 36ms 52ms p=0.329 n=6
Req 4 - navto 17ms (± 2.98%) 17ms (± 5.72%) ~ 16ms 19ms p=0.504 n=6
Req 5 - completionInfo count 1,357 1,357 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 16ms (±26.78%) 15ms (± 7.23%) ~ 13ms 16ms p=0.744 n=6
CompilerLSP - native
Req 1 - updateOpen 11ms (± 3.76%) 11ms ~ ~ ~ p=0.405 n=6
Req 2 - geterr 440ms (± 2.20%) 439ms (± 2.28%) ~ 428ms 457ms p=0.873 n=6
Req 3 - references 51ms (± 8.59%) 46ms (± 5.48%) 🟩-6ms (-11.04%) 42ms 48ms p=0.007 n=6
Req 4 - navto 18ms (± 3.13%) 18ms (± 4.78%) ~ 17ms 19ms p=0.855 n=6
Req 5 - completionInfo count 1,519 1,519 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 19ms (±14.78%) 18ms (±15.67%) ~ 14ms 22ms p=0.626 n=6
System info unknown
Hosts
  • native
Scenarios
  • CompilerLSP - native
  • Compiler-UnionsLSP - native
  • xstate-main-1-LSP - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
lsp-startup - native
Execution time 4.77ms (±516.55%) 4.78ms (±516.54%) +0.01ms (+ 0.14%) 0.00ms 480.55ms p=0.000 n=600
tsgo-startup - native
Execution time 5.92ms (±516.55%) 6.05ms (±516.56%) +0.13ms (+ 2.22%) 0.00ms 610.35ms p=0.000 n=600
System info unknown
Hosts
  • native
Scenarios
  • lsp-startup - native
  • tsgo-startup - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

@jakebailey

Copy link
Copy Markdown
Member

Seems like it's in the noise?

mds-ant added 4 commits July 24, 2026 16:08
A few call sites asked `valueSymbolLinks.Has` and then immediately
fetched the same entry with `Get` or `TryGet`, probing the map two or
three times for one answer. The `Get` behind a positive `Has` can never
create anything, so a single `TryGet` plus a nil check does the same job
with one probe.
The checker keeps per-symbol side data in pointer-keyed `LinkStore`
maps, and `valueSymbolLinks` is by far the hottest of them.
Instantiation is the worst case: every freshly instantiated symbol does
a guaranteed-miss map probe, an arena allocation, and a map insert,
just to get an empty links struct back.

Symbols the checker makes for itself are only ever seen by that
checker, so their links can sit right next to the symbol: the arena now
hands out `transientSymbol`, an `ast.Symbol` plus an inline
`checkerSymbolData` block that the new `ast.Symbol.CheckerData` field
points at. Binder symbols are shared across checkers and stay on the
map; their `CheckerData` is nil. `getValueSymbolLinks` and
`tryGetValueSymbolLinks` behave exactly like the map's `Get` and
`TryGet`, and call sites move over in the next commit. TypeScript does
the same: `TransientSymbol` carries its `SymbolLinks` inline.
Purely mechanical: every `c.valueSymbolLinks.Get` and `.TryGet` becomes
`getValueSymbolLinks`/`tryGetValueSymbolLinks`, so symbols created by
the checker hit their inline links instead of the map. Checker-created
symbols no longer pay the probe on each access or the insert on first
touch.
Only binder-created symbols live in this map now, and nothing outside
the accessors should touch it. The old name made the muscle-memory
spelling `c.valueSymbolLinks.Get(symbol)` compile fine while silently
skipping a transient symbol's inline links; the new name makes that
mistake impossible to type by habit.
@mds-ant
mds-ant force-pushed the claude/tsgo-checker-perf-2e234b branch from 102a349 to f122ecb Compare July 24, 2026 16:15
@mds-ant

mds-ant commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

@jakebailey I just rebased and reran the benchmark. For single-threaded checking, we're no longer seeing a performance improvement now that #4329 has been merged, but we are still seeing wins for multi-threaded checking.

@jakebailey

Copy link
Copy Markdown
Member

Hmm, if so I do still expect to see a result:

@typescript-bot perf test this

@typescript-automation

typescript-automation Bot commented Jul 24, 2026

Copy link
Copy Markdown

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

@jakebailey
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 4 4 ~ ~ ~ p=1.000 n=6
Symbols 81,814 (± 0.03%) 81,784 (± 0.02%) -29 (- 0.04%) 81,754 81,799 p=0.044 n=6
Types 98,817 98,817 ~ ~ ~ p=1.000 n=6
Memory Used 176,048k (± 0.25%) 176,483k (± 0.53%) ~ 174,819k 177,235k p=0.298 n=6
Memory Allocs 2,695,505 (± 0.01%) 2,694,788 (± 0.01%) -718 (- 0.03%) 2,694,533 2,695,063 p=0.005 n=6
Config Time 0.001s (±77.38%) 0.001s (±48.94%) ~ 0.000s 0.001s p=0.595 n=6
Parse Time 0.062s (± 7.50%) 0.061s (± 5.86%) ~ 0.057s 0.067s p=0.739 n=6
Bind Time 0.018s (±20.34%) 0.019s (±14.15%) ~ 0.015s 0.023s p=0.257 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.975s (± 0.99%) 0.962s (± 1.72%) ~ 0.942s 0.985s p=0.261 n=6
Total Time 1.057s (± 1.48%) 1.044s (± 1.82%) ~ 1.023s 1.073s p=0.229 n=6
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 873,301 (± 0.13%) 871,865 (± 0.12%) ~ 870,627 873,565 p=0.066 n=6
Types 263,962 (± 0.00%) 263,963 (± 0.00%) ~ 263,960 263,965 p=0.737 n=6
Memory Used 828,848k (± 0.09%) 833,738k (± 0.14%) +4,890k (+ 0.59%) 832,483k 835,305k p=0.005 n=6
Memory Allocs 13,186,934 (± 0.16%) 13,183,802 (± 0.22%) ~ 13,161,086 13,241,580 p=0.689 n=6
Config Time 0.027s (± 6.80%) 0.026s (±13.71%) ~ 0.022s 0.032s p=0.374 n=6
Parse Time 0.262s (± 2.97%) 0.267s (± 2.63%) ~ 0.261s 0.281s p=0.376 n=6
Bind Time 0.059s (±34.33%) 0.044s (± 9.50%) ~ 0.039s 0.050s p=0.173 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 2.090s (± 1.77%) 2.135s (± 1.93%) ~ 2.089s 2.202s p=0.128 n=6
Total Time 2.454s (± 1.03%) 2.486s (± 1.41%) ~ 2.445s 2.542s p=0.066 n=6
mui-docs - native
Errors 11,276 (± 0.05%) 11,279 (± 0.03%) ~ 11,272 11,282 p=0.145 n=6
Symbols 4,448,802 4,448,802 ~ ~ ~ p=1.000 n=6
Types 1,659,690 1,659,690 ~ ~ ~ p=1.000 n=6
Memory Used 5,071,794k (± 0.03%) 5,069,392k (± 0.03%) -2,402k (- 0.05%) 5,068,076k 5,071,515k p=0.020 n=6
Memory Allocs 51,275,474 (± 0.05%) 51,219,405 (± 0.04%) -56,070 (- 0.11%) 51,184,253 51,247,333 p=0.005 n=6
Config Time 0.028s (±13.89%) 0.029s (±11.88%) ~ 0.022s 0.031s p=0.681 n=6
Parse Time 0.572s (± 2.63%) 0.573s (± 2.20%) ~ 0.562s 0.597s p=0.936 n=6
Bind Time 0.002s (±22.11%) 0.003s (±14.39%) ~ 0.002s 0.003s p=0.112 n=6
Check Time 19.608s (± 0.82%) 19.353s (± 0.92%) ~ 19.143s 19.570s p=0.128 n=6
Emit Time 0.547s (± 4.08%) 0.607s (±18.80%) ~ 0.534s 0.834s p=0.126 n=6
Total Time 21.585s (± 0.98%) 21.447s (± 1.01%) ~ 21.094s 21.659s p=0.471 n=6
self-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,394,220 1,394,220 ~ ~ ~ p=1.000 n=6
Types 442,210 442,210 ~ ~ ~ p=1.000 n=6
Memory Used 1,664,769k (± 0.17%) 1,682,453k (± 0.24%) +17,684k (+ 1.06%) 1,676,539k 1,687,137k p=0.005 n=6
Memory Allocs 97,307,335 (± 0.06%) 97,191,283 (± 0.06%) -116,052 (- 0.12%) 97,113,519 97,234,603 p=0.020 n=6
Config Time 0.025s (±14.26%) 0.026s (±10.36%) ~ 0.023s 0.031s p=0.335 n=6
Parse Time 0.261s (± 3.20%) 0.256s (± 2.74%) ~ 0.247s 0.268s p=0.296 n=6
Bind Time 0.000s 0.000s (±244.70%) ~ 0.000s 0.001s p=0.405 n=6
Check Time 2.568s (± 1.16%) 2.523s (± 1.40%) -0.045s (- 1.76%) 2.478s 2.558s p=0.020 n=6
Emit Time 0.359s (± 3.58%) 0.348s (± 4.28%) ~ 0.329s 0.373s p=0.173 n=6
Total Time 33.278s (± 1.03%) 32.612s (± 0.69%) -0.666s (- 2.00%) 32.300s 32.942s p=0.005 n=6
self-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 337,681 337,681 ~ ~ ~ p=1.000 n=6
Types 199,559 199,559 ~ ~ ~ p=1.000 n=6
Memory Used 326,469k (± 0.03%) 327,757k (± 0.04%) +1,287k (+ 0.39%) 327,600k 327,967k p=0.005 n=6
Memory Allocs 4,685,155 (± 0.02%) 4,681,966 (± 0.01%) -3,189 (- 0.07%) 4,681,141 4,682,483 p=0.005 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.132s (± 4.29%) 0.127s (± 8.11%) ~ 0.119s 0.146s p=0.228 n=6
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Check Time 1.283s (± 1.28%) 1.288s (± 0.74%) ~ 1.273s 1.301s p=0.229 n=6
Emit Time 0.115s (± 8.66%) 0.122s (± 5.79%) ~ 0.114s 0.130s p=0.335 n=6
Total Time 1.587s (± 1.48%) 1.590s (± 0.70%) ~ 1.580s 1.607s p=0.378 n=6
ts-pre-modules - native
Errors 3 3 ~ ~ ~ p=1.000 n=6
Symbols 97,488 97,488 ~ ~ ~ p=1.000 n=6
Types 356 356 ~ ~ ~ p=1.000 n=6
Memory Used 133,755k (± 0.02%) 135,630k (± 0.03%) +1,874k (+ 1.40%) 135,594k 135,690k p=0.005 n=6
Memory Allocs 180,555 (± 0.14%) 180,487 (± 0.20%) ~ 180,022 180,914 p=0.810 n=6
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=6
Parse Time 0.114s (± 3.73%) 0.111s (± 4.59%) ~ 0.106s 0.119s p=0.148 n=6
Bind Time 0.041s (±11.63%) 0.041s (±11.20%) ~ 0.032s 0.044s p=0.935 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=6
Total Time 0.159s (± 3.26%) 0.155s (± 1.81%) ~ 0.153s 0.160s p=0.142 n=6
vscode - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 7,308,559 7,308,559 ~ ~ ~ p=1.000 n=6
Types 2,560,866 2,560,866 ~ ~ ~ p=1.000 n=6
Memory Used 5,013,278k (± 0.03%) 4,983,988k (± 0.01%) -29,290k (- 0.58%) 4,983,205k 4,984,708k p=0.005 n=6
Memory Allocs 37,696,372 (± 0.13%) 37,563,517 (± 0.02%) -132,855 (- 0.35%) 37,554,599 37,573,499 p=0.005 n=6
Config Time 0.074s (±13.61%) 0.073s (±11.09%) ~ 0.062s 0.082s p=1.000 n=6
Parse Time 0.933s (± 3.21%) 0.961s (± 2.28%) ~ 0.929s 0.993s p=0.093 n=6
Bind Time 0.205s (±34.76%) 0.155s (± 2.25%) ~ 0.150s 0.160s p=0.052 n=6
Check Time 8.484s (± 0.80%) 8.228s (± 0.70%) 🟩-0.256s (- 3.02%) 8.154s 8.296s p=0.005 n=6
Emit Time 2.343s (± 9.43%) 2.452s (± 4.48%) ~ 2.320s 2.603s p=0.575 n=6
Total Time 12.062s (± 0.81%) 11.887s (± 0.73%) -0.174s (- 1.45%) 11.773s 11.985s p=0.031 n=6
webpack - native
Errors 2 2 ~ ~ ~ p=1.000 n=6
Symbols 193,220 193,220 ~ ~ ~ p=1.000 n=6
Types 340 340 ~ ~ ~ p=1.000 n=6
Memory Used 237,809k (± 0.10%) 241,696k (± 0.18%) +3,888k (+ 1.63%) 240,942k 242,128k p=0.005 n=6
Memory Allocs 979,796 (± 0.39%) 983,214 (± 0.53%) ~ 978,068 992,882 p=0.298 n=6
Config Time 0.009s (±33.86%) 0.008s (±22.32%) ~ 0.006s 0.011s p=0.935 n=6
Parse Time 0.140s (± 7.16%) 0.144s (± 3.14%) ~ 0.135s 0.148s p=0.572 n=6
Bind Time 0s 0s ~ ~ ~ p=1.000 n=6
Check Time 0s 0s ~ ~ ~ p=1.000 n=6
Emit Time 0.050s (±35.14%) 0.034s (±20.12%) 🟩-0.016s (-32.34%) 0.030s 0.048s p=0.043 n=6
Total Time 0.200s (±10.29%) 0.187s (± 4.85%) ~ 0.174s 0.201s p=0.128 n=6
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,064,618 1,064,618 ~ ~ ~ p=1.000 n=6
Types 392,776 392,776 ~ ~ ~ p=1.000 n=6
Memory Used 648,747k (± 0.03%) 647,517k (± 0.01%) -1,229k (- 0.19%) 647,412k 647,661k p=0.005 n=6
Memory Allocs 4,998,682 (± 0.06%) 4,986,283 (± 0.07%) -12,399 (- 0.25%) 4,980,493 4,990,687 p=0.005 n=6
Config Time 0.002s 0.002s (±18.82%) ~ 0.002s 0.003s p=0.405 n=6
Parse Time 0.127s (± 3.76%) 0.132s (± 7.42%) ~ 0.121s 0.149s p=0.467 n=6
Bind Time 0.030s (±30.16%) 0.034s (±50.20%) ~ 0.023s 0.066s p=0.808 n=6
Check Time 1.052s (± 0.74%) 1.031s (± 0.64%) -0.021s (- 2.04%) 1.020s 1.038s p=0.005 n=6
Emit Time 0.001s (±48.94%) 0.001s (±77.38%) ~ 0.000s 0.001s p=0.595 n=6
Total Time 1.217s (± 0.69%) 1.202s (± 1.00%) ~ 1.187s 1.221s p=0.054 n=6
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • mui-docs - native
  • self-build-src - native
  • self-compiler - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

lsp

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-UnionsLSP - native
Req 1 - updateOpen 10ms (± 4.15%) 10ms (± 6.32%) ~ 9ms 11ms p=0.673 n=6
Req 2 - geterr 896ms (± 0.60%) 882ms (± 0.40%) -14ms (- 1.58%) 879ms 888ms p=0.005 n=6
Req 3 - references 45ms (±10.46%) 43ms (±13.02%) ~ 38ms 53ms p=0.467 n=6
Req 4 - navto 19ms (±14.79%) 18ms (±14.35%) ~ 16ms 23ms p=0.858 n=6
Req 5 - completionInfo count 1,357 1,357 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 15ms (±19.62%) 14ms (±12.76%) ~ 12ms 17ms p=0.462 n=6
CompilerLSP - native
Req 1 - updateOpen 11ms (± 3.76%) 11ms (± 3.76%) ~ 10ms 11ms p=1.000 n=6
Req 2 - geterr 438ms (± 2.07%) 437ms (± 0.31%) ~ 434ms 438ms p=0.561 n=6
Req 3 - references 47ms (± 4.56%) 48ms (± 3.48%) ~ 46ms 51ms p=0.929 n=6
Req 4 - navto 18ms (± 3.51%) 17ms (± 2.98%) ~ 17ms 18ms p=0.091 n=6
Req 5 - completionInfo count 1,519 1,519 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 18ms (±16.77%) 20ms (±18.15%) ~ 15ms 24ms p=0.470 n=6
System info unknown
Hosts
  • native
Scenarios
  • CompilerLSP - native
  • Compiler-UnionsLSP - native
  • xstate-main-1-LSP - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
lsp-startup - native
Execution time 4.75ms (±516.54%) 4.75ms (±516.54%) +0.00ms (+ 0.08%) 0.00ms 475.60ms p=0.000 n=600
tsgo-startup - native
Execution time 5.91ms (±516.56%) 5.87ms (±516.54%) -0.04ms (- 0.62%) 0.00ms 590.46ms p=0.000 n=600
System info unknown
Hosts
  • native
Scenarios
  • lsp-startup - native
  • tsgo-startup - native
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

@jakebailey

Copy link
Copy Markdown
Member

It does seem 3% faster on vscode, at least.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants