Skip to content

Use char code array in createTextWriter #44037

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

Closed

Conversation

dmichon-msft
Copy link
Contributor

@dmichon-msft dmichon-msft commented May 11, 2021

Inquiring minds wanted to know, based on the performance savings in #44031 , if the same trick would work in createTextWriter. This PR aims to answer that question.

Fixes #44036

@typescript-bot typescript-bot added the For Uncommitted Bug PR for untriaged, rejected, closed or missing bug label May 11, 2021
@dmichon-msft
Copy link
Contributor Author

@amcasey, @DanielRosenwasser : one of you mind kicking a perf test? Running the output on the TypeScript compiler node ./built/local/tsc -p ./src/compiler/tsconfig.release.json --extendedDiagnostics suggests it saves about 5%.

@RyanCavanaugh
Copy link
Member

@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented May 11, 2021

Heya @RyanCavanaugh, I've started to run the perf test suite on this PR at 142f9da. You can monitor the build here.

Update: The results are in!

@dmichon-msft
Copy link
Contributor Author

Thanks, @RyanCavanaugh

@dmichon-msft
Copy link
Contributor Author

dmichon-msft commented May 11, 2021

Hm, first glance at the benchmarks is not promising. I suspect whether or not this method is an improvement may depend heavily on how long the input strings to the writer are. Long comments that are preserved will result in redundant decode/encode work relative to the raw string concatenation. Might need a hybrid approach that bypasses the char code array for strings longer than some threshold.

My local tests were run with both this change and the change in #44031, and showed an improvement with both over just the source map generator change. Wonder if the allocations in the source map generator are interfering, or if the benchmark cases just have very different characteristics than the compiler source code.

@typescript-bot
Copy link
Collaborator

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

Here they are:

Comparison Report - master..44037

Metric master 44037 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 344,738k (± 0.01%) 344,747k (± 0.02%) +9k (+ 0.00%) 344,609k 344,949k
Parse Time 1.91s (± 0.50%) 1.92s (± 0.76%) +0.00s (+ 0.16%) 1.89s 1.94s
Bind Time 0.83s (± 0.70%) 0.84s (± 0.86%) +0.01s (+ 1.08%) 0.83s 0.87s
Check Time 5.23s (± 0.28%) 5.27s (± 0.34%) +0.04s (+ 0.71%) 5.23s 5.31s
Emit Time 5.57s (± 0.34%) 5.87s (± 0.76%) +0.30s (+ 5.39%) 5.80s 6.01s
Total Time 13.55s (± 0.20%) 13.89s (± 0.37%) +0.35s (+ 2.55%) 13.81s 14.03s
Compiler-Unions - node (v10.16.3, x64)
Memory used 200,233k (± 0.06%) 200,209k (± 0.08%) -25k (- 0.01%) 199,740k 200,428k
Parse Time 0.78s (± 0.71%) 0.79s (± 0.78%) +0.01s (+ 0.90%) 0.78s 0.80s
Bind Time 0.53s (± 1.09%) 0.52s (± 1.58%) -0.01s (- 1.13%) 0.51s 0.54s
Check Time 7.51s (± 0.37%) 7.55s (± 0.53%) +0.05s (+ 0.63%) 7.50s 7.64s
Emit Time 2.45s (± 0.78%) 2.45s (± 0.88%) +0.00s (+ 0.04%) 2.39s 2.48s
Total Time 11.26s (± 0.27%) 11.32s (± 0.37%) +0.05s (+ 0.48%) 11.20s 11.41s
Monaco - node (v10.16.3, x64)
Memory used 341,668k (± 0.03%) 341,712k (± 0.02%) +44k (+ 0.01%) 341,551k 341,917k
Parse Time 1.56s (± 0.43%) 1.56s (± 0.56%) +0.01s (+ 0.39%) 1.54s 1.58s
Bind Time 0.74s (± 0.88%) 0.74s (± 0.64%) +0.01s (+ 0.68%) 0.73s 0.75s
Check Time 5.36s (± 0.21%) 5.39s (± 0.51%) +0.03s (+ 0.54%) 5.33s 5.46s
Emit Time 2.97s (± 0.61%) 2.94s (± 1.08%) -0.03s (- 0.94%) 2.87s 3.01s
Total Time 10.63s (± 0.19%) 10.64s (± 0.40%) +0.01s (+ 0.08%) 10.55s 10.72s
TFS - node (v10.16.3, x64)
Memory used 304,195k (± 0.01%) 304,205k (± 0.02%) +11k (+ 0.00%) 304,004k 304,345k
Parse Time 1.21s (± 0.58%) 1.22s (± 0.63%) +0.01s (+ 0.50%) 1.19s 1.23s
Bind Time 0.71s (± 0.73%) 0.71s (± 1.19%) 0.00s ( 0.00%) 0.70s 0.74s
Check Time 4.81s (± 0.41%) 4.83s (± 0.38%) +0.02s (+ 0.42%) 4.77s 4.86s
Emit Time 3.11s (± 1.80%) 2.95s (± 1.05%) 🟩-0.16s (- 5.14%) 2.87s 3.03s
Total Time 9.84s (± 0.56%) 9.70s (± 0.41%) -0.14s (- 1.38%) 9.61s 9.77s
material-ui - node (v10.16.3, x64)
Memory used 473,839k (± 0.01%) 473,848k (± 0.01%) +9k (+ 0.00%) 473,663k 473,966k
Parse Time 1.93s (± 0.68%) 1.95s (± 0.61%) +0.02s (+ 0.93%) 1.91s 1.97s
Bind Time 0.65s (± 0.85%) 0.65s (± 1.00%) -0.00s (- 0.61%) 0.64s 0.67s
Check Time 14.71s (± 0.44%) 14.86s (± 0.71%) +0.14s (+ 0.97%) 14.68s 15.18s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 17.30s (± 0.42%) 17.45s (± 0.63%) +0.16s (+ 0.92%) 17.28s 17.80s
Angular - node (v12.1.0, x64)
Memory used 322,370k (± 0.04%) 322,276k (± 0.03%) -94k (- 0.03%) 322,070k 322,469k
Parse Time 1.91s (± 0.76%) 1.90s (± 0.52%) -0.00s (- 0.21%) 1.88s 1.92s
Bind Time 0.83s (± 1.59%) 0.82s (± 0.83%) -0.01s (- 0.96%) 0.81s 0.84s
Check Time 5.13s (± 0.39%) 5.17s (± 0.40%) +0.03s (+ 0.58%) 5.13s 5.21s
Emit Time 5.78s (± 0.44%) 6.04s (± 0.59%) +0.25s (+ 4.41%) 5.96s 6.13s
Total Time 13.66s (± 0.34%) 13.93s (± 0.31%) +0.28s (+ 2.02%) 13.83s 14.05s
Compiler-Unions - node (v12.1.0, x64)
Memory used 187,445k (± 0.20%) 187,504k (± 0.17%) +59k (+ 0.03%) 186,515k 187,841k
Parse Time 0.77s (± 0.68%) 0.77s (± 0.58%) +0.00s (+ 0.39%) 0.76s 0.78s
Bind Time 0.53s (± 1.13%) 0.53s (± 0.65%) +0.00s (+ 0.19%) 0.52s 0.53s
Check Time 6.98s (± 0.45%) 7.02s (± 0.66%) +0.04s (+ 0.50%) 6.96s 7.17s
Emit Time 2.44s (± 1.06%) 2.42s (± 0.79%) -0.02s (- 0.70%) 2.38s 2.47s
Total Time 10.72s (± 0.45%) 10.73s (± 0.55%) +0.01s (+ 0.13%) 10.65s 10.94s
Monaco - node (v12.1.0, x64)
Memory used 324,050k (± 0.01%) 324,095k (± 0.02%) +45k (+ 0.01%) 323,977k 324,335k
Parse Time 1.54s (± 0.42%) 1.55s (± 0.58%) +0.01s (+ 0.52%) 1.53s 1.57s
Bind Time 0.72s (± 0.62%) 0.72s (± 0.62%) 0.00s ( 0.00%) 0.71s 0.73s
Check Time 5.21s (± 0.36%) 5.20s (± 0.45%) -0.00s (- 0.04%) 5.15s 5.25s
Emit Time 3.02s (± 0.64%) 3.00s (± 0.66%) -0.02s (- 0.66%) 2.96s 3.04s
Total Time 10.48s (± 0.25%) 10.47s (± 0.32%) -0.01s (- 0.11%) 10.38s 10.54s
TFS - node (v12.1.0, x64)
Memory used 288,744k (± 0.02%) 288,732k (± 0.04%) -12k (- 0.00%) 288,482k 289,089k
Parse Time 1.21s (± 0.43%) 1.21s (± 0.73%) +0.00s (+ 0.08%) 1.20s 1.24s
Bind Time 0.69s (± 0.72%) 0.70s (± 0.93%) +0.00s (+ 0.43%) 0.69s 0.71s
Check Time 4.70s (± 0.45%) 4.72s (± 0.54%) +0.02s (+ 0.49%) 4.67s 4.77s
Emit Time 3.12s (± 0.93%) 2.97s (± 0.55%) 🟩-0.15s (- 4.93%) 2.92s 3.00s
Total Time 9.72s (± 0.36%) 9.60s (± 0.31%) -0.12s (- 1.25%) 9.55s 9.68s
material-ui - node (v12.1.0, x64)
Memory used 451,510k (± 0.07%) 451,410k (± 0.08%) -100k (- 0.02%) 450,551k 451,825k
Parse Time 1.94s (± 0.43%) 1.94s (± 0.33%) +0.00s (+ 0.05%) 1.93s 1.96s
Bind Time 0.64s (± 0.87%) 0.64s (± 0.70%) -0.00s (- 0.00%) 0.63s 0.65s
Check Time 13.35s (± 0.53%) 13.38s (± 0.98%) +0.03s (+ 0.22%) 13.14s 13.80s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 15.93s (± 0.41%) 15.96s (± 0.82%) +0.03s (+ 0.21%) 15.72s 16.39s
Angular - node (v14.15.1, x64)
Memory used 321,018k (± 0.00%) 321,006k (± 0.01%) -13k (- 0.00%) 320,936k 321,049k
Parse Time 1.90s (± 0.70%) 1.90s (± 0.47%) +0.01s (+ 0.37%) 1.89s 1.93s
Bind Time 0.87s (± 0.46%) 0.87s (± 0.38%) -0.00s (- 0.11%) 0.86s 0.88s
Check Time 5.13s (± 0.24%) 5.16s (± 0.59%) +0.03s (+ 0.53%) 5.09s 5.22s
Emit Time 5.81s (± 0.75%) 6.03s (± 0.58%) +0.22s (+ 3.84%) 5.97s 6.11s
Total Time 13.71s (± 0.35%) 13.96s (± 0.42%) +0.26s (+ 1.86%) 13.84s 14.10s
Compiler-Unions - node (v14.15.1, x64)
Memory used 187,720k (± 0.62%) 188,670k (± 0.58%) +949k (+ 0.51%) 186,406k 189,680k
Parse Time 0.80s (± 0.45%) 0.80s (± 0.77%) -0.00s (- 0.37%) 0.79s 0.82s
Bind Time 0.55s (± 0.67%) 0.56s (± 0.61%) +0.00s (+ 0.36%) 0.55s 0.56s
Check Time 7.11s (± 0.42%) 7.15s (± 0.63%) +0.03s (+ 0.49%) 7.08s 7.26s
Emit Time 2.46s (± 0.80%) 2.42s (± 0.84%) -0.04s (- 1.63%) 2.38s 2.47s
Total Time 10.92s (± 0.34%) 10.92s (± 0.48%) -0.00s (- 0.05%) 10.81s 11.08s
Monaco - node (v14.15.1, x64)
Memory used 323,126k (± 0.01%) 323,119k (± 0.01%) -7k (- 0.00%) 323,075k 323,197k
Parse Time 1.56s (± 0.59%) 1.57s (± 0.56%) +0.01s (+ 0.51%) 1.55s 1.59s
Bind Time 0.75s (± 0.64%) 0.75s (± 0.69%) +0.00s (+ 0.27%) 0.74s 0.76s
Check Time 5.17s (± 0.33%) 5.18s (± 0.50%) +0.01s (+ 0.14%) 5.13s 5.25s
Emit Time 3.07s (± 0.78%) 3.03s (± 0.77%) -0.04s (- 1.27%) 2.97s 3.08s
Total Time 10.55s (± 0.36%) 10.53s (± 0.38%) -0.02s (- 0.22%) 10.42s 10.62s
TFS - node (v14.15.1, x64)
Memory used 287,665k (± 0.01%) 287,659k (± 0.01%) -6k (- 0.00%) 287,615k 287,689k
Parse Time 1.27s (± 1.21%) 1.26s (± 1.02%) -0.00s (- 0.16%) 1.23s 1.29s
Bind Time 0.72s (± 0.80%) 0.71s (± 0.96%) -0.01s (- 0.69%) 0.70s 0.73s
Check Time 4.73s (± 0.30%) 4.73s (± 0.34%) +0.01s (+ 0.13%) 4.71s 4.77s
Emit Time 3.21s (± 0.61%) 3.00s (± 0.76%) 🟩-0.21s (- 6.43%) 2.95s 3.04s
Total Time 9.92s (± 0.27%) 9.71s (± 0.28%) -0.20s (- 2.05%) 9.66s 9.76s
material-ui - node (v14.15.1, x64)
Memory used 449,978k (± 0.01%) 449,806k (± 0.07%) -172k (- 0.04%) 448,930k 450,164k
Parse Time 1.98s (± 0.69%) 1.99s (± 0.92%) +0.00s (+ 0.15%) 1.95s 2.03s
Bind Time 0.70s (± 0.49%) 0.70s (± 1.27%) +0.01s (+ 1.00%) 0.69s 0.73s
Check Time 13.41s (± 0.32%) 13.53s (± 0.74%) +0.11s (+ 0.85%) 13.34s 13.78s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 16.09s (± 0.30%) 16.22s (± 0.61%) +0.12s (+ 0.77%) 16.04s 16.46s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-206-generic
Architecturex64
Available Memory16 GB
Available Memory6 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 44037 10
Baseline master 10

Developer Information:

Download Benchmark

@dmichon-msft
Copy link
Contributor Author

Well, those results are fascinating. 5% improvement for TFS, 5% slower for Angular, about the same for Monaco and Compiler Unions.

@typescript-bot typescript-bot added For Backlog Bug PRs that fix a backlog bug and removed For Uncommitted Bug PR for untriaged, rejected, closed or missing bug labels May 11, 2021
@dmichon-msft
Copy link
Contributor Author

@rbuckton , @weswigham , do either of you know what the key differences are between the Angular benchmark and the TFS benchmark that might explain the differences in results?

@weswigham
Copy link
Member

TFS benchmark is all legacy style namespaces (concatenated into a single output file), angular benchmark is all individual modules.

@DanielRosenwasser
Copy link
Member

@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented May 11, 2021

Heya @DanielRosenwasser, I've started to run the perf test suite on this PR at 7f98bef. You can monitor the build here.

Update: The results are in!

@dmichon-msft
Copy link
Contributor Author

@weswigham So that means this might be higher overhead per file but scale better for large files?

@weswigham
Copy link
Member

Maybe! I couldn't say for sure without microbenchmarking the code to find out, but that's definitely a plausible cause.

@typescript-bot
Copy link
Collaborator

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

Here they are:

Comparison Report - master..44037

Metric master 44037 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 344,738k (± 0.01%) 344,774k (± 0.02%) +36k (+ 0.01%) 344,619k 344,941k
Parse Time 1.91s (± 0.50%) 1.91s (± 0.35%) -0.00s (- 0.05%) 1.90s 1.93s
Bind Time 0.83s (± 0.70%) 0.84s (± 0.79%) +0.01s (+ 0.84%) 0.83s 0.85s
Check Time 5.23s (± 0.28%) 5.26s (± 0.36%) +0.03s (+ 0.55%) 5.23s 5.30s
Emit Time 5.57s (± 0.34%) 5.69s (± 0.60%) +0.12s (+ 2.15%) 5.60s 5.77s
Total Time 13.55s (± 0.20%) 13.70s (± 0.27%) +0.15s (+ 1.13%) 13.63s 13.79s
Compiler-Unions - node (v10.16.3, x64)
Memory used 200,233k (± 0.06%) 200,222k (± 0.03%) -11k (- 0.01%) 200,051k 200,349k
Parse Time 0.78s (± 0.71%) 0.78s (± 0.93%) +0.00s (+ 0.00%) 0.77s 0.80s
Bind Time 0.53s (± 1.09%) 0.53s (± 1.42%) -0.00s (- 0.57%) 0.51s 0.54s
Check Time 7.51s (± 0.37%) 7.49s (± 0.44%) -0.02s (- 0.28%) 7.40s 7.55s
Emit Time 2.45s (± 0.78%) 2.48s (± 0.91%) +0.03s (+ 1.39%) 2.41s 2.52s
Total Time 11.26s (± 0.27%) 11.28s (± 0.31%) +0.01s (+ 0.13%) 11.20s 11.35s
Monaco - node (v10.16.3, x64)
Memory used 341,668k (± 0.03%) 341,686k (± 0.01%) +18k (+ 0.01%) 341,615k 341,772k
Parse Time 1.56s (± 0.43%) 1.55s (± 0.42%) -0.01s (- 0.32%) 1.54s 1.56s
Bind Time 0.74s (± 0.88%) 0.75s (± 1.02%) +0.01s (+ 0.95%) 0.73s 0.77s
Check Time 5.36s (± 0.21%) 5.38s (± 0.45%) +0.02s (+ 0.35%) 5.33s 5.44s
Emit Time 2.97s (± 0.61%) 2.95s (± 0.28%) -0.02s (- 0.61%) 2.94s 2.97s
Total Time 10.63s (± 0.19%) 10.63s (± 0.29%) +0.00s (+ 0.02%) 10.57s 10.73s
TFS - node (v10.16.3, x64)
Memory used 304,195k (± 0.01%) 304,258k (± 0.03%) +64k (+ 0.02%) 304,052k 304,434k
Parse Time 1.21s (± 0.58%) 1.21s (± 0.41%) +0.00s (+ 0.41%) 1.21s 1.23s
Bind Time 0.71s (± 0.73%) 0.71s (± 0.73%) 0.00s ( 0.00%) 0.70s 0.72s
Check Time 4.81s (± 0.41%) 4.83s (± 0.53%) +0.02s (+ 0.33%) 4.78s 4.89s
Emit Time 3.11s (± 1.80%) 3.06s (± 2.18%) -0.05s (- 1.64%) 2.92s 3.26s
Total Time 9.84s (± 0.56%) 9.81s (± 0.81%) -0.03s (- 0.29%) 9.66s 10.04s
material-ui - node (v10.16.3, x64)
Memory used 473,839k (± 0.01%) 473,848k (± 0.01%) +9k (+ 0.00%) 473,736k 473,988k
Parse Time 1.93s (± 0.68%) 1.94s (± 0.45%) +0.01s (+ 0.52%) 1.92s 1.96s
Bind Time 0.65s (± 0.85%) 0.65s (± 1.05%) -0.01s (- 0.92%) 0.64s 0.67s
Check Time 14.71s (± 0.44%) 14.75s (± 0.42%) +0.04s (+ 0.29%) 14.66s 14.91s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 17.30s (± 0.42%) 17.34s (± 0.37%) +0.05s (+ 0.28%) 17.23s 17.50s
Angular - node (v12.1.0, x64)
Memory used 322,370k (± 0.04%) 322,349k (± 0.04%) -21k (- 0.01%) 322,092k 322,651k
Parse Time 1.91s (± 0.76%) 1.90s (± 0.58%) -0.00s (- 0.16%) 1.88s 1.92s
Bind Time 0.83s (± 1.59%) 0.82s (± 0.79%) -0.01s (- 1.68%) 0.81s 0.84s
Check Time 5.13s (± 0.39%) 5.14s (± 0.48%) +0.01s (+ 0.16%) 5.10s 5.22s
Emit Time 5.78s (± 0.44%) 5.88s (± 0.58%) +0.10s (+ 1.73%) 5.81s 5.96s
Total Time 13.66s (± 0.34%) 13.75s (± 0.39%) +0.09s (+ 0.67%) 13.65s 13.91s
Compiler-Unions - node (v12.1.0, x64)
Memory used 187,445k (± 0.20%) 187,734k (± 0.08%) +289k (+ 0.15%) 187,173k 187,922k
Parse Time 0.77s (± 0.68%) 0.77s (± 0.62%) -0.00s (- 0.26%) 0.76s 0.78s
Bind Time 0.53s (± 1.13%) 0.53s (± 0.98%) +0.00s (+ 0.57%) 0.52s 0.54s
Check Time 6.98s (± 0.45%) 7.00s (± 0.51%) +0.01s (+ 0.16%) 6.91s 7.08s
Emit Time 2.44s (± 1.06%) 2.41s (± 0.69%) -0.03s (- 1.03%) 2.38s 2.45s
Total Time 10.72s (± 0.45%) 10.71s (± 0.34%) -0.01s (- 0.14%) 10.64s 10.80s
Monaco - node (v12.1.0, x64)
Memory used 324,050k (± 0.01%) 324,046k (± 0.01%) -4k (- 0.00%) 323,946k 324,098k
Parse Time 1.54s (± 0.42%) 1.54s (± 0.55%) +0.00s (+ 0.07%) 1.52s 1.56s
Bind Time 0.72s (± 0.62%) 0.71s (± 0.51%) -0.00s (- 0.56%) 0.71s 0.72s
Check Time 5.21s (± 0.36%) 5.20s (± 0.43%) -0.01s (- 0.13%) 5.16s 5.25s
Emit Time 3.02s (± 0.64%) 3.00s (± 0.98%) -0.02s (- 0.53%) 2.92s 3.07s
Total Time 10.48s (± 0.25%) 10.46s (± 0.39%) -0.02s (- 0.22%) 10.36s 10.53s
TFS - node (v12.1.0, x64)
Memory used 288,744k (± 0.02%) 288,751k (± 0.02%) +7k (+ 0.00%) 288,617k 288,854k
Parse Time 1.21s (± 0.43%) 1.21s (± 0.62%) -0.00s (- 0.17%) 1.19s 1.22s
Bind Time 0.69s (± 0.72%) 0.69s (± 0.64%) -0.00s (- 0.43%) 0.68s 0.70s
Check Time 4.70s (± 0.45%) 4.75s (± 0.74%) +0.05s (+ 1.04%) 4.69s 4.84s
Emit Time 3.12s (± 0.93%) 3.05s (± 0.71%) -0.07s (- 2.31%) 3.02s 3.11s
Total Time 9.72s (± 0.36%) 9.70s (± 0.48%) -0.03s (- 0.29%) 9.61s 9.83s
material-ui - node (v12.1.0, x64)
Memory used 451,510k (± 0.07%) 451,774k (± 0.01%) +264k (+ 0.06%) 451,637k 451,890k
Parse Time 1.94s (± 0.43%) 1.94s (± 0.57%) -0.00s (- 0.05%) 1.91s 1.96s
Bind Time 0.64s (± 0.87%) 0.64s (± 1.16%) +0.00s (+ 0.31%) 0.62s 0.66s
Check Time 13.35s (± 0.53%) 13.27s (± 0.46%) -0.07s (- 0.55%) 13.15s 13.43s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 15.93s (± 0.41%) 15.85s (± 0.38%) -0.08s (- 0.47%) 15.71s 15.98s
Angular - node (v14.15.1, x64)
Memory used 321,018k (± 0.00%) 321,015k (± 0.00%) -4k (- 0.00%) 320,987k 321,037k
Parse Time 1.90s (± 0.70%) 1.91s (± 0.40%) +0.01s (+ 0.47%) 1.89s 1.93s
Bind Time 0.87s (± 0.46%) 0.87s (± 0.64%) -0.00s (- 0.34%) 0.86s 0.88s
Check Time 5.13s (± 0.24%) 5.16s (± 0.30%) +0.03s (+ 0.60%) 5.13s 5.20s
Emit Time 5.81s (± 0.75%) 5.92s (± 0.65%) +0.11s (+ 1.96%) 5.82s 6.01s
Total Time 13.71s (± 0.35%) 13.86s (± 0.37%) +0.15s (+ 1.09%) 13.73s 13.98s
Compiler-Unions - node (v14.15.1, x64)
Memory used 187,720k (± 0.62%) 189,014k (± 0.51%) +1,294k (+ 0.69%) 186,437k 189,747k
Parse Time 0.80s (± 0.45%) 0.80s (± 0.56%) -0.01s (- 0.75%) 0.79s 0.81s
Bind Time 0.55s (± 0.67%) 0.55s (± 0.40%) -0.00s (- 0.72%) 0.55s 0.56s
Check Time 7.11s (± 0.42%) 7.12s (± 0.65%) +0.01s (+ 0.14%) 7.03s 7.25s
Emit Time 2.46s (± 0.80%) 2.42s (± 0.75%) -0.03s (- 1.34%) 2.40s 2.48s
Total Time 10.92s (± 0.34%) 10.89s (± 0.43%) -0.03s (- 0.26%) 10.81s 11.00s
Monaco - node (v14.15.1, x64)
Memory used 323,126k (± 0.01%) 323,119k (± 0.00%) -8k (- 0.00%) 323,085k 323,160k
Parse Time 1.56s (± 0.59%) 1.57s (± 0.41%) +0.01s (+ 0.38%) 1.55s 1.58s
Bind Time 0.75s (± 0.64%) 0.75s (± 0.89%) 0.00s ( 0.00%) 0.74s 0.77s
Check Time 5.17s (± 0.33%) 5.19s (± 0.48%) +0.02s (+ 0.43%) 5.15s 5.25s
Emit Time 3.07s (± 0.78%) 3.03s (± 0.81%) -0.03s (- 1.11%) 2.99s 3.10s
Total Time 10.55s (± 0.36%) 10.54s (± 0.48%) -0.01s (- 0.09%) 10.44s 10.66s
TFS - node (v14.15.1, x64)
Memory used 287,665k (± 0.01%) 287,649k (± 0.01%) -16k (- 0.01%) 287,597k 287,712k
Parse Time 1.27s (± 1.21%) 1.27s (± 0.87%) +0.00s (+ 0.08%) 1.24s 1.28s
Bind Time 0.72s (± 0.80%) 0.71s (± 0.66%) -0.01s (- 1.39%) 0.70s 0.72s
Check Time 4.73s (± 0.30%) 4.76s (± 0.36%) +0.03s (+ 0.59%) 4.72s 4.79s
Emit Time 3.21s (± 0.61%) 3.09s (± 0.57%) 🟩-0.12s (- 3.59%) 3.06s 3.13s
Total Time 9.92s (± 0.27%) 9.83s (± 0.31%) -0.09s (- 0.93%) 9.77s 9.91s
material-ui - node (v14.15.1, x64)
Memory used 449,978k (± 0.01%) 449,701k (± 0.09%) -277k (- 0.06%) 448,632k 450,082k
Parse Time 1.98s (± 0.69%) 1.97s (± 0.43%) -0.01s (- 0.71%) 1.95s 1.99s
Bind Time 0.70s (± 0.49%) 0.70s (± 0.49%) +0.00s (+ 0.00%) 0.69s 0.70s
Check Time 13.41s (± 0.32%) 13.56s (± 0.85%) +0.15s (+ 1.08%) 13.36s 13.90s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 16.09s (± 0.30%) 16.22s (± 0.73%) +0.13s (+ 0.80%) 16.01s 16.56s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-206-generic
Architecturex64
Available Memory16 GB
Available Memory6 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 44037 10
Baseline master 10

Developer Information:

Download Benchmark

@dmichon-msft
Copy link
Contributor Author

Hm, less pronounced effects than before, but still the same split.

@dmichon-msft
Copy link
Contributor Author

This looks like a no go so far. I've explored altering writePunctuation(), writeSpace(), writeTrailingSemicolon to write the character codes directly (i.e. without having to decode them from a string first), and that didn't seem to help much if at all. The build is still slower against my reference codebase.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
For Backlog Bug PRs that fix a backlog bug
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Improve performance of the API returned by createTextWriter
5 participants