Skip to content

Add single-element fastpath to getSupertypeOrUnion #43934

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 5, 2021

Conversation

weswigham
Copy link
Member

@weswigham weswigham commented May 3, 2021

Thus avoiding the expensive calculations in literalTypesWithSameBaseType when it isn't actually needed.
Fixes #43899, from what I can tell. Since it's a perf optimization, I don't really have a test, per-sey, other than my observed performance, since I couldn't scale the example in the issue to the point it'd crash even with tens of thousands of elements.

@weswigham weswigham requested review from sandersn and andrewbranch May 3, 2021 19:50
@weswigham
Copy link
Member Author

@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented May 3, 2021

Heya @weswigham, I've started to run the perf test suite on this PR at 8f460a8. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

@weswigham
The results of the perf run you requested are in!

Here they are:

Comparison Report - master..43934

Metric master 43934 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 345,029k (± 0.03%) 344,944k (± 0.02%) -85k (- 0.02%) 344,728k 345,044k
Parse Time 1.93s (± 0.50%) 1.92s (± 0.66%) -0.01s (- 0.52%) 1.90s 1.95s
Bind Time 0.84s (± 0.41%) 0.84s (± 1.08%) +0.00s (+ 0.48%) 0.82s 0.87s
Check Time 5.28s (± 0.41%) 5.26s (± 0.36%) -0.02s (- 0.32%) 5.22s 5.30s
Emit Time 5.95s (± 0.68%) 5.92s (± 0.34%) -0.03s (- 0.54%) 5.88s 5.98s
Total Time 13.99s (± 0.43%) 13.94s (± 0.20%) -0.05s (- 0.38%) 13.87s 13.99s
Compiler-Unions - node (v10.16.3, x64)
Memory used 200,829k (± 0.03%) 200,704k (± 0.12%) -125k (- 0.06%) 199,801k 201,003k
Parse Time 0.78s (± 0.87%) 0.78s (± 0.57%) -0.00s (- 0.26%) 0.77s 0.79s
Bind Time 0.53s (± 0.90%) 0.53s (± 0.42%) +0.00s (+ 0.76%) 0.53s 0.54s
Check Time 7.59s (± 0.23%) 7.57s (± 0.64%) -0.03s (- 0.36%) 7.46s 7.66s
Emit Time 2.50s (± 1.02%) 2.51s (± 0.93%) +0.00s (+ 0.16%) 2.47s 2.56s
Total Time 11.41s (± 0.27%) 11.39s (± 0.32%) -0.02s (- 0.16%) 11.31s 11.45s
Monaco - node (v10.16.3, x64)
Memory used 341,707k (± 0.02%) 341,661k (± 0.02%) -47k (- 0.01%) 341,515k 341,839k
Parse Time 1.57s (± 0.45%) 1.56s (± 0.49%) -0.01s (- 0.89%) 1.54s 1.57s
Bind Time 0.75s (± 0.94%) 0.74s (± 0.60%) -0.01s (- 0.93%) 0.73s 0.75s
Check Time 5.38s (± 0.43%) 5.37s (± 0.27%) -0.01s (- 0.28%) 5.34s 5.40s
Emit Time 3.04s (± 0.86%) 2.99s (± 0.58%) -0.05s (- 1.58%) 2.96s 3.04s
Total Time 10.74s (± 0.48%) 10.66s (± 0.20%) -0.09s (- 0.80%) 10.63s 10.72s
TFS - node (v10.16.3, x64)
Memory used 304,254k (± 0.03%) 304,241k (± 0.02%) -13k (- 0.00%) 304,002k 304,338k
Parse Time 1.22s (± 0.67%) 1.21s (± 0.64%) -0.01s (- 0.49%) 1.19s 1.23s
Bind Time 0.71s (± 0.78%) 0.71s (± 0.73%) +0.00s (+ 0.14%) 0.70s 0.72s
Check Time 4.82s (± 0.40%) 4.80s (± 0.54%) -0.02s (- 0.50%) 4.74s 4.87s
Emit Time 3.21s (± 1.46%) 3.19s (± 1.82%) -0.02s (- 0.65%) 3.06s 3.33s
Total Time 9.95s (± 0.52%) 9.91s (± 0.81%) -0.05s (- 0.49%) 9.74s 10.09s
material-ui - node (v10.16.3, x64)
Memory used 474,654k (± 0.02%) 474,587k (± 0.02%) -67k (- 0.01%) 474,435k 474,772k
Parse Time 1.94s (± 0.75%) 1.94s (± 0.60%) -0.01s (- 0.36%) 1.91s 1.96s
Bind Time 0.65s (± 0.95%) 0.65s (± 0.73%) +0.00s (+ 0.31%) 0.64s 0.66s
Check Time 14.86s (± 0.64%) 14.70s (± 0.34%) -0.16s (- 1.08%) 14.61s 14.86s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 17.45s (± 0.58%) 17.29s (± 0.29%) -0.17s (- 0.96%) 17.19s 17.43s
Angular - node (v12.1.0, x64)
Memory used 322,550k (± 0.04%) 322,577k (± 0.03%) +27k (+ 0.01%) 322,373k 322,775k
Parse Time 1.92s (± 0.49%) 1.91s (± 0.82%) -0.01s (- 0.52%) 1.88s 1.94s
Bind Time 0.83s (± 1.16%) 0.83s (± 0.81%) -0.00s (- 0.24%) 0.81s 0.84s
Check Time 5.17s (± 0.35%) 5.16s (± 0.39%) -0.02s (- 0.35%) 5.10s 5.21s
Emit Time 6.16s (± 0.67%) 6.22s (± 0.95%) +0.06s (+ 0.99%) 6.12s 6.40s
Total Time 14.07s (± 0.36%) 14.11s (± 0.49%) +0.03s (+ 0.21%) 13.99s 14.33s
Compiler-Unions - node (v12.1.0, x64)
Memory used 187,800k (± 0.21%) 188,084k (± 0.15%) +284k (+ 0.15%) 187,369k 188,418k
Parse Time 0.77s (± 1.01%) 0.77s (± 0.75%) +0.00s (+ 0.52%) 0.76s 0.79s
Bind Time 0.53s (± 0.89%) 0.54s (± 0.92%) +0.01s (+ 1.13%) 0.53s 0.55s
Check Time 7.05s (± 0.79%) 7.09s (± 0.95%) +0.04s (+ 0.62%) 6.97s 7.21s
Emit Time 2.50s (± 1.27%) 2.48s (± 0.95%) -0.03s (- 1.00%) 2.43s 2.55s
Total Time 10.85s (± 0.71%) 10.88s (± 0.61%) +0.03s (+ 0.27%) 10.74s 11.00s
Monaco - node (v12.1.0, x64)
Memory used 324,060k (± 0.03%) 323,949k (± 0.07%) -111k (- 0.03%) 323,087k 324,175k
Parse Time 1.54s (± 0.66%) 1.55s (± 0.72%) +0.01s (+ 0.45%) 1.52s 1.57s
Bind Time 0.72s (± 0.80%) 0.72s (± 0.31%) +0.00s (+ 0.14%) 0.72s 0.73s
Check Time 5.21s (± 0.44%) 5.21s (± 0.62%) -0.00s (- 0.02%) 5.16s 5.30s
Emit Time 3.08s (± 0.80%) 3.08s (± 1.14%) +0.00s (+ 0.07%) 3.03s 3.20s
Total Time 10.54s (± 0.41%) 10.55s (± 0.45%) +0.01s (+ 0.11%) 10.46s 10.67s
TFS - node (v12.1.0, x64)
Memory used 288,738k (± 0.03%) 288,718k (± 0.02%) -20k (- 0.01%) 288,612k 288,817k
Parse Time 1.22s (± 0.71%) 1.22s (± 0.71%) 0.00s ( 0.00%) 1.20s 1.24s
Bind Time 0.70s (± 0.72%) 0.69s (± 1.06%) -0.01s (- 1.01%) 0.68s 0.70s
Check Time 4.71s (± 0.37%) 4.70s (± 0.58%) -0.02s (- 0.38%) 4.63s 4.75s
Emit Time 3.19s (± 0.63%) 3.19s (± 1.02%) +0.00s (+ 0.06%) 3.10s 3.26s
Total Time 9.82s (± 0.34%) 9.80s (± 0.48%) -0.02s (- 0.22%) 9.70s 9.94s
material-ui - node (v12.1.0, x64)
Memory used 452,295k (± 0.07%) 452,502k (± 0.01%) +206k (+ 0.05%) 452,434k 452,613k
Parse Time 1.95s (± 0.59%) 1.95s (± 0.48%) -0.01s (- 0.31%) 1.93s 1.97s
Bind Time 0.64s (± 0.62%) 0.64s (± 0.75%) -0.00s (- 0.62%) 0.63s 0.65s
Check Time 13.37s (± 0.95%) 13.36s (± 0.75%) -0.01s (- 0.04%) 13.21s 13.60s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 15.96s (± 0.78%) 15.95s (± 0.62%) -0.02s (- 0.10%) 15.82s 16.17s
Angular - node (v14.15.1, x64)
Memory used 321,273k (± 0.01%) 321,265k (± 0.01%) -8k (- 0.00%) 321,202k 321,300k
Parse Time 1.90s (± 0.61%) 1.91s (± 0.53%) +0.01s (+ 0.42%) 1.88s 1.93s
Bind Time 0.87s (± 0.66%) 0.88s (± 0.63%) +0.01s (+ 0.92%) 0.87s 0.89s
Check Time 5.18s (± 0.42%) 5.16s (± 0.39%) -0.02s (- 0.37%) 5.12s 5.20s
Emit Time 6.25s (± 0.65%) 6.25s (± 0.57%) +0.00s (+ 0.08%) 6.19s 6.34s
Total Time 14.20s (± 0.40%) 14.20s (± 0.32%) +0.01s (+ 0.04%) 14.11s 14.33s
Compiler-Unions - node (v14.15.1, x64)
Memory used 188,819k (± 0.61%) 188,812k (± 0.62%) -7k (- 0.00%) 186,851k 190,100k
Parse Time 0.81s (± 0.94%) 0.80s (± 0.56%) -0.00s (- 0.50%) 0.79s 0.81s
Bind Time 0.56s (± 0.80%) 0.56s (± 1.22%) -0.00s (- 0.36%) 0.55s 0.58s
Check Time 7.17s (± 0.69%) 7.12s (± 0.61%) -0.05s (- 0.67%) 7.04s 7.23s
Emit Time 2.48s (± 0.59%) 2.48s (± 0.60%) -0.00s (- 0.16%) 2.43s 2.51s
Total Time 11.01s (± 0.54%) 10.95s (± 0.44%) -0.06s (- 0.52%) 10.83s 11.08s
Monaco - node (v14.15.1, x64)
Memory used 323,155k (± 0.01%) 323,148k (± 0.01%) -7k (- 0.00%) 323,091k 323,176k
Parse Time 1.57s (± 0.55%) 1.58s (± 0.95%) +0.00s (+ 0.25%) 1.55s 1.62s
Bind Time 0.75s (± 0.66%) 0.75s (± 0.60%) +0.00s (+ 0.27%) 0.74s 0.76s
Check Time 5.20s (± 0.38%) 5.21s (± 0.42%) +0.01s (+ 0.21%) 5.16s 5.25s
Emit Time 3.13s (± 0.90%) 3.12s (± 0.79%) -0.01s (- 0.26%) 3.09s 3.20s
Total Time 10.65s (± 0.41%) 10.65s (± 0.37%) +0.01s (+ 0.08%) 10.57s 10.74s
TFS - node (v14.15.1, x64)
Memory used 287,649k (± 0.01%) 287,665k (± 0.01%) +16k (+ 0.01%) 287,588k 287,704k
Parse Time 1.26s (± 1.15%) 1.27s (± 1.06%) +0.01s (+ 0.72%) 1.24s 1.30s
Bind Time 0.72s (± 0.81%) 0.71s (± 0.70%) -0.00s (- 0.28%) 0.71s 0.73s
Check Time 4.72s (± 0.45%) 4.73s (± 0.43%) +0.01s (+ 0.11%) 4.69s 4.77s
Emit Time 3.29s (± 0.52%) 3.27s (± 0.62%) -0.01s (- 0.40%) 3.23s 3.33s
Total Time 9.99s (± 0.30%) 9.99s (± 0.33%) +0.00s (+ 0.02%) 9.91s 10.05s
material-ui - node (v14.15.1, x64)
Memory used 450,714k (± 0.01%) 450,701k (± 0.00%) -13k (- 0.00%) 450,646k 450,739k
Parse Time 2.01s (± 0.63%) 2.00s (± 0.85%) -0.01s (- 0.45%) 1.96s 2.03s
Bind Time 0.71s (± 1.65%) 0.70s (± 0.68%) -0.00s (- 0.28%) 0.69s 0.71s
Check Time 13.52s (± 0.63%) 13.54s (± 0.69%) +0.01s (+ 0.09%) 13.28s 13.78s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 16.23s (± 0.62%) 16.23s (± 0.63%) +0.00s (+ 0.01%) 15.94s 16.49s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-206-generic
Architecturex64
Available Memory16 GB
Available Memory8 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v14.15.1, x64)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v14.15.1, x64)
  • Compiler-Unions - node (v10.16.3, x64)
  • Compiler-Unions - node (v12.1.0, x64)
  • Compiler-Unions - node (v14.15.1, x64)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v14.15.1, x64)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v14.15.1, x64)
  • material-ui - node (v10.16.3, x64)
  • material-ui - node (v12.1.0, x64)
  • material-ui - node (v14.15.1, x64)
Benchmark Name Iterations
Current 43934 10
Baseline master 10

Developer Information:

Download Benchmark

@weswigham
Copy link
Member Author

Good, perf seems to be generally stable, and this seems to handle the outsized example in the linked issue.

@typescript-bot pack this

@typescript-bot
Copy link
Collaborator

typescript-bot commented May 3, 2021

Heya @weswigham, I've started to run the tarball bundle task on this PR at 8f460a8. You can monitor the build here.

@typescript-bot
Copy link
Collaborator

typescript-bot commented May 3, 2021

Hey @weswigham, I've packed this into an installable tgz. You can install it for testing by referencing it in your package.json like so:

{
    "devDependencies": {
        "typescript": "https://typescript.visualstudio.com/cf7ac146-d525-443c-b23c-0d58337efebc/_apis/build/builds/102232/artifacts?artifactName=tgz&fileId=B3FC75132FBF0E9ABA67931BD77D694AC1F110AC2AF31008D022830054848F5A02&fileName=/typescript-4.3.0-insiders.20210503.tgz"
    }
}

and then running npm install.


There is also a playground for this build and an npm module you can use via "typescript": "npm:@typescript-deploys/[email protected]".;

@weswigham
Copy link
Member Author

@h-joo would you be able to try the above build out and see if/how much it helps your real codebase?

@h-joo
Copy link
Contributor

h-joo commented May 4, 2021

Sure, I will let you know once I'm done testing.

@h-joo
Copy link
Contributor

h-joo commented May 4, 2021

Confirmed that this commit fixes the issue. Thank you for the fix :)

@weswigham weswigham merged commit 84da19e into microsoft:master May 5, 2021
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.

Slow build time on union of enums type as a parameter of generic function.
5 participants