@@ -283,6 +283,347 @@ Caveats:
283283
284284Per-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