Skip to content

Commit 77f88c6

Browse files
committed
fixup! test(@angular/build): add library builder scaling benchmark suite
Ran a small count n <= 100 entry point benchmarla cross the style flavor axis.
1 parent 45eb7d1 commit 77f88c6

1 file changed

Lines changed: 341 additions & 0 deletions

File tree

‎scripts/benchmarks/library-builder/README.md‎

Lines changed: 341 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,347 @@ Caveats:
283283

284284
Per-iteration CSV and the raw log are kept outside the repository (`tmp/benchmark-2026-10-23.md`).
285285

286+
### 2026-10-24: A/B Benchmark across `--style-flavor` and `--count` axis
287+
288+
For the fixtures in `flat` layout:
289+
290+
```sh
291+
$ pnpm admin benchmark library-builder \
292+
--builder=library,ng-packagr \
293+
--layout=flat \
294+
--style-flavor=inline,inline-css,inline-scss,external,external-css,external-scss \
295+
--count=10,50,100 --iterations=5 \
296+
--csv=./tmp/benchmark-2026-10-24.csv
297+
```
298+
299+
Environment: GitHub Codespace (2 cores, 8 GB):
300+
301+
```sh
302+
$ cat /proc/meminfo
303+
MemTotal: 8131876 kB
304+
MemFree: 260780 kB
305+
MemAvailable: 2296448 kB
306+
307+
$ cat /proc/cpuinfo
308+
processor : 0
309+
vendor_id : GenuineIntel
310+
cpu family : 6
311+
model : 106
312+
model name : Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
313+
cpu MHz : 3393.038
314+
315+
processor : 1
316+
vendor_id : GenuineIntel
317+
cpu family : 6
318+
model : 106
319+
model name : Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
320+
cpu MHz : 3472.520
321+
```
322+
323+
Results:
324+
325+
- `@angular/build:library` beats `@angular/build:ng-packagr` in all sweep axis, starting from the small N <= 100 entry point counts
326+
- Build times of `@angular/build:library` stay consistent across the `--style-flavor` axis, indicating roughly x-y ms per entry point:
327+
- build time per entry point stays roughly flat regardless of inline/external templates and stylesheet language
328+
- the primary driver of total build time (for the full library) is the number of entry points (`count` axis)
329+
- Total build time (for the full library) `@angular/build:library`
330+
331+
Build log:
332+
333+
```log
334+
$ node --no-warnings=ExperimentalWarning --experimental-transform-types ./scripts/devkit-admin.mts benchmark library-builder --builder=library,ng-packagr --layout=flat --style-flavor=inline,inline-css,inline-scss,external,external-css,external-scss --count=10,50,100 --iterations=5 --csv=./tmp/benchmark-2026-10-24.csv
335+
336+
[library-builder] library-flat-10-inline (10 entry points)
337+
run 1/5: done in 10.63s
338+
run 2/5: done in 4.11s
339+
run 3/5: done in 4.08s
340+
run 4/5: done in 4.08s
341+
run 5/5: done in 4.28s
342+
median: 4.11s (410.52ms/entry)
343+
344+
[library-builder] ng-packagr-flat-10-inline (10 entry points)
345+
run 1/5: done in 7.57s
346+
run 2/5: done in 6.12s
347+
run 3/5: done in 6.18s
348+
run 4/5: done in 6.44s
349+
run 5/5: done in 6.30s
350+
median: 6.30s (630.33ms/entry)
351+
352+
[library-builder] library-flat-50-inline (50 entry points)
353+
run 1/5: done in 4.58s
354+
run 2/5: done in 4.52s
355+
run 3/5: done in 4.54s
356+
run 4/5: done in 4.70s
357+
run 5/5: done in 4.52s
358+
median: 4.54s (90.88ms/entry)
359+
360+
[library-builder] ng-packagr-flat-50-inline (50 entry points)
361+
run 1/5: done in 16.46s
362+
run 2/5: done in 17.38s
363+
run 3/5: done in 17.73s
364+
run 4/5: done in 18.60s
365+
run 5/5: done in 16.53s
366+
median: 17.38s (347.50ms/entry)
367+
368+
[library-builder] library-flat-100-inline (100 entry points)
369+
run 1/5: done in 5.23s
370+
run 2/5: done in 5.11s
371+
run 3/5: done in 5.54s
372+
run 4/5: done in 5.14s
373+
run 5/5: done in 5.30s
374+
median: 5.23s (52.27ms/entry)
375+
376+
[library-builder] ng-packagr-flat-100-inline (100 entry points)
377+
run 1/5: done in 31.45s
378+
run 2/5: done in 30.15s
379+
run 3/5: done in 31.59s
380+
run 4/5: done in 30.58s
381+
run 5/5: done in 29.47s
382+
median: 30.58s (305.78ms/entry)
383+
384+
[library-builder] library-flat-10-inline-css (10 entry points)
385+
run 1/5: done in 4.91s
386+
run 2/5: done in 3.98s
387+
run 3/5: done in 4.28s
388+
run 4/5: done in 4.11s
389+
run 5/5: done in 4.12s
390+
median: 4.12s (412.22ms/entry)
391+
392+
[library-builder] ng-packagr-flat-10-inline-css (10 entry points)
393+
run 1/5: done in 6.05s
394+
run 2/5: done in 6.41s
395+
run 3/5: done in 6.13s
396+
run 4/5: done in 6.19s
397+
run 5/5: done in 6.29s
398+
median: 6.19s (619.22ms/entry)
399+
400+
[library-builder] library-flat-50-inline-css (50 entry points)
401+
run 1/5: done in 4.69s
402+
run 2/5: done in 5.00s
403+
run 3/5: done in 5.02s
404+
run 4/5: done in 5.58s
405+
run 5/5: done in 5.39s
406+
median: 5.02s (100.46ms/entry)
407+
408+
[library-builder] ng-packagr-flat-50-inline-css (50 entry points)
409+
run 1/5: done in 18.59s
410+
run 2/5: done in 17.77s
411+
run 3/5: done in 16.63s
412+
run 4/5: done in 17.64s
413+
run 5/5: done in 16.26s
414+
median: 17.64s (352.87ms/entry)
415+
416+
[library-builder] library-flat-100-inline-css (100 entry points)
417+
run 1/5: done in 5.21s
418+
run 2/5: done in 5.57s
419+
run 3/5: done in 5.15s
420+
run 4/5: done in 5.25s
421+
run 5/5: done in 5.15s
422+
median: 5.21s (52.12ms/entry)
423+
424+
[library-builder] ng-packagr-flat-100-inline-css (100 entry points)
425+
run 1/5: done in 28.20s
426+
run 2/5: done in 27.88s
427+
run 3/5: done in 27.33s
428+
run 4/5: done in 28.18s
429+
run 5/5: done in 27.30s
430+
median: 27.88s (278.84ms/entry)
431+
432+
[library-builder] library-flat-10-inline-scss (10 entry points)
433+
run 1/5: done in 5.94s
434+
run 2/5: done in 4.45s
435+
run 3/5: done in 4.34s
436+
run 4/5: done in 4.37s
437+
run 5/5: done in 4.18s
438+
median: 4.37s (436.70ms/entry)
439+
440+
[library-builder] ng-packagr-flat-10-inline-scss (10 entry points)
441+
run 1/5: done in 7.37s
442+
run 2/5: done in 6.54s
443+
run 3/5: done in 6.29s
444+
run 4/5: done in 6.32s
445+
run 5/5: done in 6.54s
446+
median: 6.54s (653.80ms/entry)
447+
448+
[library-builder] library-flat-50-inline-scss (50 entry points)
449+
run 1/5: done in 4.84s
450+
run 2/5: done in 4.77s
451+
run 3/5: done in 4.81s
452+
run 4/5: done in 4.72s
453+
run 5/5: done in 4.98s
454+
median: 4.81s (96.29ms/entry)
455+
456+
[library-builder] ng-packagr-flat-50-inline-scss (50 entry points)
457+
run 1/5: done in 16.12s
458+
run 2/5: done in 17.95s
459+
run 3/5: done in 15.98s
460+
run 4/5: done in 15.99s
461+
run 5/5: done in 16.54s
462+
median: 16.12s (322.37ms/entry)
463+
464+
[library-builder] library-flat-100-inline-scss (100 entry points)
465+
run 1/5: done in 5.48s
466+
run 2/5: done in 5.42s
467+
run 3/5: done in 5.40s
468+
run 4/5: done in 5.38s
469+
run 5/5: done in 5.43s
470+
median: 5.42s (54.18ms/entry)
471+
472+
[library-builder] ng-packagr-flat-100-inline-scss (100 entry points)
473+
run 1/5: done in 28.00s
474+
run 2/5: done in 28.23s
475+
run 3/5: done in 28.66s
476+
run 4/5: done in 27.14s
477+
run 5/5: done in 25.12s
478+
median: 28.00s (279.99ms/entry)
479+
480+
[library-builder] library-flat-10-external (10 entry points)
481+
run 1/5: done in 3.59s
482+
run 2/5: done in 3.65s
483+
run 3/5: done in 3.93s
484+
run 4/5: done in 3.65s
485+
run 5/5: done in 3.66s
486+
median: 3.65s (365.17ms/entry)
487+
488+
[library-builder] ng-packagr-flat-10-external (10 entry points)
489+
run 1/5: done in 6.10s
490+
run 2/5: done in 5.66s
491+
run 3/5: done in 5.49s
492+
run 4/5: done in 5.71s
493+
run 5/5: done in 5.88s
494+
median: 5.71s (570.85ms/entry)
495+
496+
[library-builder] library-flat-50-external (50 entry points)
497+
run 1/5: done in 4.15s
498+
run 2/5: done in 4.10s
499+
run 3/5: done in 4.13s
500+
run 4/5: done in 4.12s
501+
run 5/5: done in 4.16s
502+
median: 4.13s (82.62ms/entry)
503+
504+
[library-builder] ng-packagr-flat-50-external (50 entry points)
505+
run 1/5: done in 16.06s
506+
run 2/5: done in 15.63s
507+
run 3/5: done in 14.68s
508+
run 4/5: done in 17.45s
509+
run 5/5: done in 17.25s
510+
median: 16.06s (321.17ms/entry)
511+
512+
[library-builder] library-flat-100-external (100 entry points)
513+
run 1/5: done in 4.52s
514+
run 2/5: done in 4.71s
515+
run 3/5: done in 4.67s
516+
run 4/5: done in 4.57s
517+
run 5/5: done in 4.51s
518+
median: 4.57s (45.68ms/entry)
519+
520+
[library-builder] ng-packagr-flat-100-external (100 entry points)
521+
run 1/5: done in 27.89s
522+
run 2/5: done in 28.68s
523+
run 3/5: done in 29.08s
524+
run 4/5: done in 26.58s
525+
run 5/5: done in 27.23s
526+
median: 27.89s (278.87ms/entry)
527+
528+
[library-builder] library-flat-10-external-css (10 entry points)
529+
run 1/5: done in 3.74s
530+
run 2/5: done in 3.82s
531+
run 3/5: done in 3.72s
532+
run 4/5: done in 3.91s
533+
run 5/5: done in 3.80s
534+
median: 3.80s (379.65ms/entry)
535+
536+
[library-builder] ng-packagr-flat-10-external-css (10 entry points)
537+
run 1/5: done in 5.63s
538+
run 2/5: done in 5.86s
539+
run 3/5: done in 5.66s
540+
run 4/5: done in 5.50s
541+
run 5/5: done in 5.98s
542+
median: 5.66s (565.62ms/entry)
543+
544+
[library-builder] library-flat-50-external-css (50 entry points)
545+
run 1/5: done in 4.13s
546+
run 2/5: done in 4.35s
547+
run 3/5: done in 4.17s
548+
run 4/5: done in 4.22s
549+
run 5/5: done in 4.34s
550+
median: 4.22s (84.47ms/entry)
551+
552+
[library-builder] ng-packagr-flat-50-external-css (50 entry points)
553+
run 1/5: done in 14.36s
554+
run 2/5: done in 14.75s
555+
run 3/5: done in 14.42s
556+
run 4/5: done in 15.15s
557+
run 5/5: done in 15.48s
558+
median: 14.75s (295.02ms/entry)
559+
560+
[library-builder] library-flat-100-external-css (100 entry points)
561+
run 1/5: done in 4.87s
562+
run 2/5: done in 4.90s
563+
run 3/5: done in 4.87s
564+
run 4/5: done in 4.66s
565+
run 5/5: done in 4.77s
566+
median: 4.87s (48.71ms/entry)
567+
568+
[library-builder] ng-packagr-flat-100-external-css (100 entry points)
569+
run 1/5: done in 26.43s
570+
run 2/5: done in 26.93s
571+
run 3/5: done in 27.01s
572+
run 4/5: done in 26.46s
573+
run 5/5: done in 24.85s
574+
median: 26.46s (264.56ms/entry)
575+
576+
[library-builder] library-flat-10-external-scss (10 entry points)
577+
run 1/5: done in 3.87s
578+
run 2/5: done in 3.98s
579+
run 3/5: done in 3.85s
580+
run 4/5: done in 3.92s
581+
run 5/5: done in 3.83s
582+
median: 3.87s (387.06ms/entry)
583+
584+
[library-builder] ng-packagr-flat-10-external-scss (10 entry points)
585+
run 1/5: done in 5.81s
586+
run 2/5: done in 5.89s
587+
run 3/5: done in 5.97s
588+
run 4/5: done in 5.91s
589+
run 5/5: done in 6.05s
590+
median: 5.91s (591.38ms/entry)
591+
592+
[library-builder] library-flat-50-external-scss (50 entry points)
593+
run 1/5: done in 4.59s
594+
run 2/5: done in 4.49s
595+
run 3/5: done in 4.42s
596+
run 4/5: done in 4.34s
597+
run 5/5: done in 4.48s
598+
median: 4.48s (89.69ms/entry)
599+
600+
[library-builder] ng-packagr-flat-50-external-scss (50 entry points)
601+
run 1/5: done in 16.15s
602+
run 2/5: done in 16.11s
603+
run 3/5: done in 15.45s
604+
run 4/5: done in 16.25s
605+
run 5/5: done in 16.53s
606+
median: 16.15s (323.04ms/entry)
607+
608+
[library-builder] library-flat-100-external-scss (100 entry points)
609+
run 1/5: done in 5.68s
610+
run 2/5: done in 5.58s
611+
run 3/5: done in 5.46s
612+
run 4/5: done in 5.49s
613+
run 5/5: done in 6.03s
614+
median: 5.58s (55.81ms/entry)
615+
616+
[library-builder] ng-packagr-flat-100-external-scss (100 entry points)
617+
run 1/5: done in 29.19s
618+
run 2/5: done in 28.73s
619+
run 3/5: done in 30.11s
620+
run 4/5: done in 25.30s
621+
run 5/5: done in 25.74s
622+
median: 28.73s (287.26ms/entry)
623+
```
624+
625+
Results CSV: because of human mistake, the csv output was not written.
626+
286627
## Future Work
287628

288629
- Extend the A/B run against `ng-packagr` (first run: 2026-10-23, flat/inline, N up to 1000): `deep` layout, the style-flavor matrix, N=2000, more iterations, and an output-equivalence check of the two builders.

0 commit comments

Comments
 (0)