Skip to content

Stop .gts counting against TypeScript's non-TS program size limit - #247

Open
wagenet wants to merge 1 commit into
ember-tooling:mainfrom
wagenet:wagenet/eep-gts-sizelimit
Open

Stop .gts counting against TypeScript's non-TS program size limit#247
wagenet wants to merge 1 commit into
ember-tooling:mainfrom
wagenet:wagenet/eep-gts-sizelimit

Conversation

@wagenet

@wagenet wagenet commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Investigated and written by Claude (Anthropic's Claude Code), working in Peter Wagenet's checkout and opened from his account. Peter set the scope; the analysis, code and numbers are Claude's.

The problem

TypeScript's ProjectService adds up the size of every program root it doesn't recognise as TypeScript. Past maxProgramSizeForNonTsFiles — 20MB, not configurable — it calls disableLanguageService on the project. A disabled project reports only the files the client currently has open as program roots:

// Project#getScriptFileNames
if (this.languageServiceEnabled || value.info && value.info.isScriptOpen()) { ... }

parserOptions.projectService opens one file at a time. So against a demoted project, every file ESLint lints is new to the program and forces a fresh ts.Program.

.gts is TypeScript with a template in it, and it counts toward that budget. A large enough TypeScript-flavoured Ember app trips a limit meant for apps full of bundled JavaScript, and nothing says so.

Classic parserOptions.project is unaffected — typescript-estree builds its own program and never consults the heuristic. It only bites the mode typescript-eslint now recommends, which is probably why it's gone unnoticed.

It's not only slower — results change

This is the part that made me write it up as a bug rather than a perf tweak. A demoted program contains the open file and whatever it imports, and nothing else. Ambient declarations that nothing imports — declare global, module augmentation, standalone .d.ts — simply aren't there.

Same file, same rules, two projects identical except for total .gts bytes:

under 20MB over 20MB
AMBIENT_FLAG string any
window.ambientRegistry AmbientRegistry any
semantic errors none Cannot find name 'AMBIENT_FLAG', Property 'ambientRegistry' does not exist on type 'Window & typeof globalThis'

Every no-unsafe-* rule, no-floating-promises, restrict-template-expressions — anything that branches on any — reports differently once a project crosses the line. Ember apps lean on registry augmentation, so this isn't hypothetical.

Numbers

Synthetic fixture, 22MB of .gts (313 files) over a 200-module import chain, 300 files linted, measuring parseForESLint only:

before after
distinct ts.Program instances 300 1
languageServiceEnabled false true
program roots 1, growing to 300 522 (all of them)
steady-state per file 8.1 → 9.6 ms, rising 2.2 ms, flat
total 2662 ms 1577 ms (889 ms of it the one program build)

The rising per-file cost is the mechanism: each rebuild is over a slightly larger program, so the gap widens with project size. At 12k files it's the difference between one program build and twelve thousand.

What this changes

1. .gts no longer counts toward the non-TS budget. The honest fix is to tell TypeScript that .gts is TypeScript, but there's currently no way to say that — see below. So the patched ts.sys reports .gts as zero bytes and the project gets measured on the JavaScript it actually contains.

.gjs deliberately keeps its weight. It's JavaScript with a template; charging it to a JavaScript size budget is correct, not a bug.

2. A one-time warning when a project does get demoted, naming the project, the file that tipped it over, and disableSizeLimit. This hooks the public Project#disableLanguageService, calls straight through, and changes nothing.

What this does not fix

An app can be over the limit on .js + .gjs alone, and excluding .gts won't save it. Real numbers from the app where this turned up:

.js    2,381 files   18.1 MB
.gts   3,716 files   24.8 MB   <- no longer counted
.gjs   4,080 files   24.2 MB   <- still counted, correctly
                     -------
                     42.3 MB remaining, limit 20 MB

That app stays demoted, which is why change 2 matters as much as change 1: it turns an invisible 4x into a line of output that names the fix. "disableSizeLimit": true in the tsconfig resolves it completely — on the app above it took rebuilds from 358-per-400-files to 1, with slightly lower peak memory.

Worth considering separately: the Ember app blueprint could ship disableSizeLimit: true, since any large app using template imports will eventually trip a limit designed for a different situation. That's a blueprint/docs change elsewhere, not this repo.

Known limitation

Change 1 only lands if this parser replaces ts.sys before typescript-eslint builds its ProjectService. That service snapshots {...ts.sys} once, on the first type-aware parse in the process — and if ESLint reaches a plain .ts file first, that parse happens before this parser is ever invoked, and the patch misses. I measured both orderings:

first file ESLint parses service host patched?
.gts yes
.ts no

Change 2 is installed at import for exactly this reason, so the warning is reliable even when the workaround isn't. Same caveat already applies to the existing readFile / fileExists / readDirectory patches — I've left that alone here rather than widen this PR.

Upstream

The real fix belongs in TypeScript, and extraFileExtensions looks like the place to declare that .gts is TypeScript. It isn't, yet — getSupportedExtensions only accepts extra extensions registered as Deferred or JS-like, and silently drops anything registered as ScriptKind.TS:

TypeScript .gts registered as language service roots
stock Deferred (what typescript-eslint does today) disabled 1
stock TS enabled 209 — .gts dropped from the project entirely
patched TS enabled 522 — all included, not charged

Two small hunks make row 3 work: let getSupportedExtensions accept TS-like extra extensions, and have the size check skip them. I've tested that patch against a local TypeScript build; issues filed:

The typescript-eslint side is where the warning really belongs, too. TypeScript already emits a public projectLanguageServiceState event carrying the project and lastFileExceededProgramSize, and typescript-eslint already builds an eventHandler — it just wires it to a debug namespace that's off by default. Surfacing it there needs no new API from anyone, and would make the hook in this PR redundant.

Testing

  • tests/size-limit.test.js — unit cover for the patched getFileSize and the warning hook
  • tests/size-limit-project.test.js — end-to-end: builds two 21MB projects in tmp, one carrying its bytes in .gts and one in .gjs, and asserts the first keeps a whole program while the second demotes and warns. Runs in ~1.4s, and fails on main.

Feature-detects projectService and skips where it's unavailable. Verified green against @typescript-eslint/parser 6/7/8 and TypeScript 5.3 / 5.7 / 5.9, plus pnpm --filter '*' test and test:check.

Needs a label for release-plan — bug seems right.

TypeScript's ProjectService sums the size of every program root it does
not recognise as TypeScript and, past maxProgramSizeForNonTsFiles (20MB),
calls disableLanguageService on the project. A disabled project reports
only the files the client currently has open as program roots.

parserOptions.projectService opens one file at a time, so against a
demoted project every linted file forces a fresh ts.Program. That is
several times slower, and it also changes results: ambient declarations
the linted file does not import (declare global, module augmentation,
standalone .d.ts) are no longer in the program, so type-aware rules see
`any` where they would otherwise see a real type.

.gts is TypeScript with a template in it and has no business being weighed
against a JavaScript budget. There is no way to say so through
extraFileExtensions — an extension registered as ScriptKind.TS is dropped
from the supported set outright — so report .gts as weightless through the
patched ts.sys instead. .gjs is JavaScript and keeps its weight.

That patch only lands when this parser replaces ts.sys before
typescript-eslint builds its ProjectService, and an app can be over the
limit on .js + .gjs alone, so also surface the demotion: hook the public
Project#disableLanguageService and warn once, naming the project and
disableSizeLimit. Installed at import because the project service is built
on the first type-aware parse in the process, which may be a plain .ts
file this parser never sees.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🏎️ Benchmark Comparison

Parse

Benchmark Control (p50) Experiment (p50) Δ
🟢 gts small 938.60 ms 885.81 ms -5.6%
🟠 gts medium 1592.03 ms 1650.20 ms +3.7%
gts large 799.22 ms 793.88 ms -0.7%
gjs small 783.69 ms 796.56 ms +1.6%
🟢 gjs medium 1406.37 ms 1360.06 ms -3.3%
gjs large 628.10 ms 622.22 ms -0.9%
🟠 hbs small 128.04 ms 133.82 ms +4.5%
🟢 hbs medium 744.68 ms 712.62 ms -4.3%
hbs large 818.36 ms 808.51 ms -1.2%

🟢 faster · 🔴 slower · 🟠 slightly slower · ⚪ within 2%

Full mitata output
clk: ~3.10 GHz
cpu: AMD EPYC 7763 64-Core Processor
runtime: node 24.19.0 (x64-linux)

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)          971.10 ms/iter    1.01 s    █                 
                       (821.52 ms … 1.29 s)    1.11 s ▅▅ █▅   ▅ ▅▅ ▅    ▅ ▅
                    ( 13.08 mb …  88.31 mb)  42.50 mb ██▁██▁▁▁█▁██▁█▁▁▁▁█▁█

gts small (experiment)       929.98 ms/iter 959.56 ms █ █                  
                       (807.44 ms … 1.23 s)    1.09 s █ █▅  ▅▅▅  ▅    ▅   ▅
                    ( 12.88 mb …  83.98 mb)  42.03 mb █▁██▁▁███▁▁█▁▁▁▁█▁▁▁█

                             ┌                                            ┐
                               ╷      ┌──────────────┬─────┐              ╷
         gts small (control)   ├──────┤              │     ├──────────────┤
                               ╵      └──────────────┴─────┘              ╵
                             ╷   ┌─────────────┬────┐                 ╷
      gts small (experiment) ├───┤             │    ├─────────────────┤
                             ╵   └─────────────┴────┘                 ╵
                             └                                            ┘
                             807.44 ms           959.16 ms           1.11 s

summary
  gts small (experiment)
   1.04x faster than gts small (control)

------------------------------------------- -------------------------------
gts medium (control)            1.64 s/iter    1.68 s                     █
                          (1.50 s … 2.06 s)    1.69 s ▅▅   ▅▅  ▅▅  ▅   ▅ ▅█
                    ( 79.83 mb … 136.95 mb)  89.70 mb ██▁▁▁██▁▁██▁▁█▁▁▁█▁██

gts medium (experiment)         1.68 s/iter    1.68 s       █         █    
                          (1.56 s … 2.09 s)    1.72 s ▅  ▅ ▅█    ▅ ▅ ▅█   ▅
                    ( 79.19 mb …  97.82 mb)  84.15 mb █▁▁█▁██▁▁▁▁█▁█▁██▁▁▁█

                             ┌                                            ┐
                             ╷         ┌──────────────────┬───────┐ ╷
        gts medium (control) ├─────────┤                  │       ├─┤
                             ╵         └──────────────────┴───────┘ ╵
                                         ╷      ┌────────────────┬─┐      ╷
     gts medium (experiment)             ├──────┤                │ ├──────┤
                                         ╵      └────────────────┴─┘      ╵
                             └                                            ┘
                             1.50 s              1.61 s              1.72 s

summary
  gts medium (control)
   1.02x faster than gts medium (experiment)

------------------------------------------- -------------------------------
gts large (control)          847.47 ms/iter 847.00 ms     █                
                       (748.99 ms … 1.23 s) 888.56 ms     █         █      
                    ( 14.79 mb …  87.31 mb)  38.16 mb █▁▁▁██▁█▁▁▁▁█▁█▁█▁▁▁█

gts large (experiment)       843.38 ms/iter 857.10 ms    █                 
                       (766.92 ms … 1.15 s) 939.27 ms  █ █ █               
                    ( 14.93 mb …  86.96 mb)  38.08 mb ██▁█▁█▁▁▁▁██▁▁▁▁▁▁▁▁█

                             ┌                                            ┐
                             ╷      ┌───────────────┬         ╷
         gts large (control) ├──────┤               │─────────┤
                             ╵      └───────────────┴         ╵
                                 ╷  ┌──────────────┬───┐                  ╷
      gts large (experiment)     ├──┤              │   ├──────────────────┤
                                 ╵  └──────────────┴───┘                  ╵
                             └                                            ┘
                             748.99 ms         844.13 ms          939.27 ms

summary
  gts large (experiment)
   1x faster than gts large (control)

------------------------------------------- -------------------------------
gjs small (control)          816.82 ms/iter 818.03 ms     █                
                       (726.25 ms … 1.11 s) 881.03 ms ▅ ▅ █ ▅▅  ▅▅▅ ▅     ▅
                    ( 29.32 mb …  85.96 mb)  37.08 mb █▁█▁█▁██▁▁███▁█▁▁▁▁▁█

gjs small (experiment)       824.28 ms/iter 833.57 ms  █    █    █         
                       (751.73 ms … 1.11 s) 903.46 ms ▅█▅▅  █▅   █        ▅
                    ( 29.44 mb …  85.98 mb)  37.08 mb ████▁▁██▁▁▁█▁▁▁▁▁▁▁▁█

                             ┌                                            ┐
                             ╷      ┌───────────────┬               ╷
         gjs small (control) ├──────┤               │───────────────┤
                             ╵      └───────────────┴               ╵
                                   ╷ ┌────────────────┬─┐                 ╷
      gjs small (experiment)       ├─┤                │ ├─────────────────┤
                                   ╵ └────────────────┴─┘                 ╵
                             └                                            ┘
                             726.25 ms         814.85 ms          903.46 ms

summary
  gjs small (control)
   1.01x faster than gjs small (experiment)

------------------------------------------- -------------------------------
gjs medium (control)            1.46 s/iter    1.47 s █                    
                          (1.34 s … 1.91 s)    1.52 s █   ▅▅▅▅ ▅▅    ▅  ▅ ▅
                    ( 21.01 mb …  89.47 mb)  71.36 mb █▁▁▁████▁██▁▁▁▁█▁▁█▁█

gjs medium (experiment)         1.43 s/iter    1.45 s █                    
                          (1.33 s … 1.87 s)    1.49 s █▅▅▅▅     ▅  ▅ ▅   ▅▅
                    ( 19.21 mb …  88.98 mb)  70.74 mb █████▁▁▁▁▁█▁▁█▁█▁▁▁██

                             ┌                                            ┐
                                ╷       ┌───────────────────┬──┐          ╷
        gjs medium (control)    ├───────┤                   │  ├──────────┤
                                ╵       └───────────────────┴──┘          ╵
                             ╷ ┌──────────────────────┬──┐         ╷
     gjs medium (experiment) ├─┤                      │  ├─────────┤
                             ╵ └──────────────────────┴──┘         ╵
                             └                                            ┘
                             1.33 s              1.42 s              1.52 s

summary
  gjs medium (experiment)
   1.02x faster than gjs medium (control)

------------------------------------------- -------------------------------
gjs large (control)          664.28 ms/iter 640.06 ms     █                
                    (590.67 ms … 942.07 ms) 769.09 ms     █                
                    ( 89.76 kb …  70.22 mb)  43.92 mb ▆▆▁▁█▆▆▁▆▁▁▁▁▁▁▁▁▁▁▁▆

gjs large (experiment)       661.73 ms/iter 628.90 ms   █                  
                    (605.17 ms … 922.76 ms) 747.52 ms   █▇                 
                    ( 82.68 kb …  70.27 mb)  43.61 mb ▆▁██▁▁▁▁▁▁▁▆▁▁▁▁▁▁▁▁▆

                             ┌                                            ┐
                             ╷       ┌──────────┬                         ╷
         gjs large (control) ├───────┤          │─────────────────────────┤
                             ╵       └──────────┴                         ╵
                                 ╷  ┌──────────┬                     ╷
      gjs large (experiment)     ├──┤          │─────────────────────┤
                                 ╵  └──────────┴                     ╵
                             └                                            ┘
                             590.67 ms         679.88 ms          769.09 ms

summary
  gjs large (experiment)
   1x faster than gjs large (control)

------------------------------------------- -------------------------------
hbs small (control)          146.05 ms/iter 153.68 ms    █ █          █    
                    (115.29 ms … 266.43 ms) 164.12 ms ▅▅ █ █   ▅ ▅    █   ▅
                    ( 51.35 mb …  57.01 mb)  53.83 mb ██▁█▁█▁▁▁█▁█▁▁▁▁█▁▁▁█

hbs small (experiment)       150.38 ms/iter 151.63 ms         █            
                    (111.51 ms … 290.45 ms) 168.63 ms ▅ ▅ ▅ ▅ █▅   ▅▅  ▅  ▅
                    ( 51.27 mb …  56.31 mb)  53.58 mb █▁█▁█▁█▁██▁▁▁██▁▁█▁▁█

                             ┌                                            ┐
                                ╷    ┌──────────────────┬─────┐       ╷
         hbs small (control)    ├────┤                  │     ├───────┤
                                ╵    └──────────────────┴─────┘       ╵
                             ╷         ┌────────────────────┬┐            ╷
      hbs small (experiment) ├─────────┤                    │├────────────┤
                             ╵         └────────────────────┴┘            ╵
                             └                                            ┘
                             111.51 ms         140.07 ms          168.63 ms

summary
  hbs small (control)
   1.03x faster than hbs small (experiment)

------------------------------------------- -------------------------------
hbs medium (control)         779.01 ms/iter 774.48 ms   █                  
                       (725.09 ms … 1.04 s) 824.90 ms   █ ▅                
                    (  8.75 mb …  82.35 mb)  37.95 mb ▇▁█▁█▁▇▁▁▁▇▁▁▁▁▇▁▁▁▁▇

hbs medium (experiment)      749.22 ms/iter 735.98 ms  █                   
                    (702.55 ms … 994.98 ms) 794.12 ms ██                   
                    (  8.93 mb …  82.81 mb)  32.61 mb █████▁▁█▁▁▁▁▁▁▁▁▁▁█▁█

                             ┌                                            ┐
                                     ╷   ┌───────────────┬                ╷
        hbs medium (control)         ├───┤               │────────────────┤
                                     ╵   └───────────────┴                ╵
                             ╷ ┌──────────────┬                ╷
     hbs medium (experiment) ├─┤              │────────────────┤
                             ╵ └──────────────┴                ╵
                             └                                            ┘
                             702.55 ms         763.72 ms          824.90 ms

summary
  hbs medium (experiment)
   1.04x faster than hbs medium (control)

------------------------------------------- -------------------------------
hbs large (control)          847.77 ms/iter 831.26 ms   █                  
                       (808.19 ms … 1.07 s) 882.49 ms   █                  
                    ( 53.57 mb …  63.29 mb)  55.25 mb ███████▁▁▁█▁▁▁▁▁▁▁▁▁█

hbs large (experiment)       830.74 ms/iter 813.15 ms █                    
                       (802.34 ms … 1.04 s) 856.45 ms ███                  
                    ( 53.41 mb …  64.85 mb)  55.48 mb ██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█

                             ┌                                            ┐
                                ╷   ┌──────────────────┬                  ╷
         hbs large (control)    ├───┤                  │──────────────────┤
                                ╵   └──────────────────┴                  ╵
                             ╷┌──────────────┬             ╷
      hbs large (experiment) ├┤              │─────────────┤
                             ╵└──────────────┴             ╵
                             └                                            ┘
                             802.34 ms         842.42 ms          882.49 ms

summary
  hbs large (experiment)
   1.02x faster than hbs large (control)
### Project mode (type-aware)
Benchmark Control (p50) Experiment (p50) Δ
🟢 project warm parse x150 589.28 ms 577.42 ms -2.0%
project parse+typed x150 627.76 ms 622.06 ms -0.9%
projectService warm parse x150 612.79 ms 607.17 ms -0.9%
projectService parse+typed x150 651.15 ms 643.89 ms -1.1%

🟢 faster · 🔴 slower · 🟠 slightly slower · ⚪ within 2%

Full mitata output
clk: ~2.98 GHz
cpu: AMD EPYC 7763 64-Core Processor
runtime: node 24.19.0 (x64-linux)

benchmark                                   avg (min … max) p75 / p99    (min … top 1%)
----------------------------------------------------------- -------------------------------
project warm parse x150 (control)            589.09 ms/iter 592.31 ms █           █        
                                    (576.26 ms … 612.79 ms) 603.76 ms ███▁█▁▁▁▁█▁██▁▁█▁▁▁▁█
                                  gc(272.68 ms … 281.22 ms) 113.33 mb (112.39 mb…114.88 mb)

project warm parse x150 (experiment)         579.92 ms/iter 589.23 ms                    █ 
                                    (560.17 ms … 606.23 ms) 591.18 ms ███▁▁▁▁▁██▁█▁▁▁▁█▁███
                                  gc(273.18 ms … 292.75 ms) 111.59 mb (101.13 mb…121.11 mb)

                                             ┌                                            ┐
                                                              ╷┌───────────┬──┐           ╷
           project warm parse x150 (control)                  ├┤           │  ├───────────┤
                                                              ╵└───────────┴──┘           ╵
                                             ╷  ┌────────────────┬─────────┐ ╷
        project warm parse x150 (experiment) ├──┤                │         ├─┤
                                             ╵  └────────────────┴─────────┘ ╵
                                             └                                            ┘
                                             560.17 ms         581.96 ms          603.76 ms

summary
  project warm parse x150 (experiment)
   1.02x faster than project warm parse x150 (control)

----------------------------------------------------------- -------------------------------
project parse+typed x150 (control)           630.20 ms/iter 629.39 ms        █ ██          
                                    (595.62 ms … 665.78 ms) 665.64 ms █▁▁▁▁▁█████▁█▁▁▁▁▁▁▁█
                                  gc(278.03 ms … 287.60 ms) 117.84 mb (113.72 mb…122.51 mb)

project parse+typed x150 (experiment)        624.85 ms/iter 631.79 ms █             █      
                                    (606.16 ms … 665.40 ms) 636.58 ms █▁▁██▁▁▁█▁█▁▁▁█▁▁██▁█
                                  gc(282.97 ms … 299.24 ms) 117.00 mb (113.21 mb…121.30 mb)

                                             ┌                                            ┐
                                             ╷               ┌─────┬                      ╷
          project parse+typed x150 (control) ├───────────────┤     │──────────────────────┤
                                             ╵               └─────┴                      ╵
                                                    ╷  ┌────────┬───┐  ╷
       project parse+typed x150 (experiment)        ├──┤        │   ├──┤
                                                    ╵  └────────┴───┘  ╵
                                             └                                            ┘
                                             595.62 ms         630.63 ms          665.64 ms

summary
  project parse+typed x150 (experiment)
   1.01x faster than project parse+typed x150 (control)

----------------------------------------------------------- -------------------------------
projectService warm parse x150 (control)     613.76 ms/iter 615.35 ms           █▃         
                                    (598.69 ms … 627.07 ms) 626.49 ms ▆▁▁▁▁▆▁▆▁▁██▆▁▆▁▁▁▁▁▆
                                  gc(291.25 ms … 303.84 ms) 115.17 mb (113.10 mb…116.28 mb)

projectService warm parse x150 (experiment)  609.80 ms/iter 618.52 ms             ██       
                                    (584.64 ms … 636.88 ms) 636.58 ms █▁█▁███▁▁█▁▁██▁▁▁▁▁▁█
                                  gc(288.31 ms … 366.80 ms) 111.58 mb (110.66 mb…112.57 mb)

                                             ┌                                            ┐
                                                         ╷        ┌───┬─┐        ╷
    projectService warm parse x150 (control)             ├────────┤   │ ├────────┤
                                                         ╵        └───┴─┘        ╵
                                             ╷        ┌────────────┬──────┐               ╷
 projectService warm parse x150 (experiment) ├────────┤            │      ├───────────────┤
                                             ╵        └────────────┴──────┘               ╵
                                             └                                            ┘
                                             584.64 ms         610.61 ms          636.58 ms

summary
  projectService warm parse x150 (experiment)
   1.01x faster than projectService warm parse x150 (control)

----------------------------------------------------------- -------------------------------
projectService parse+typed x150 (control)    657.51 ms/iter 667.33 ms             █        
                                    (627.73 ms … 710.32 ms) 677.05 ms █▁▁▁██▁███▁▁█▁▁▁█▁█▁█
                                  gc(293.54 ms … 312.64 ms) 118.81 mb (114.46 mb…123.51 mb)

projectService parse+typed x150 (experiment) 649.61 ms/iter 651.32 ms        █             
                                    (627.54 ms … 690.85 ms) 673.48 ms █▁▁▁▁▅▁█▅▁▅▁▁▁▁▁▅▁▁▁▅
                                  gc(294.44 ms … 313.12 ms) 117.99 mb (113.68 mb…121.40 mb)

                                             ┌                                            ┐
                                             ╷          ┌───────────────┬────────┐        ╷
   projectService parse+typed x150 (control) ├──────────┤               │        ├────────┤
                                             ╵          └───────────────┴────────┘        ╵
                                             ╷          ┌────────┬─┐                   ╷
projectService parse+typed x150 (experiment) ├──────────┤        │ ├───────────────────┤
                                             ╵          └────────┴─┘                   ╵
                                             └                                            ┘
                                             627.54 ms         652.30 ms          677.05 ms

summary
  projectService parse+typed x150 (experiment)
   1.01x faster than projectService parse+typed x150 (control)

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.

1 participant