@@ -543,10 +543,54 @@ async function getFileSizes(targetDir) {
543
543
} ;
544
544
}
545
545
546
- // average results
546
+ // Add ranking emojis to performance metrics (smaller values are better)
547
+ function addRankingEmojis ( toolNames , results , metricKey ) {
548
+ const values = toolNames . map ( ( name ) => ( {
549
+ name,
550
+ value : parseFloat ( results [ name ] [ metricKey ] . replace ( 'ms' , '' ) ) ,
551
+ originalValue : results [ name ] [ metricKey ] ,
552
+ } ) ) ;
553
+
554
+ // Sort by value (smaller is better)
555
+ values . sort ( ( a , b ) => a . value - b . value ) ;
556
+
557
+ const emojis = [ '🥇' , '🥈' , '🥉' ] ;
558
+ const rankedValues = { } ;
559
+
560
+ values . forEach ( ( item , rank ) => {
561
+ const emoji = rank < 3 ? emojis [ rank ] : '' ;
562
+ rankedValues [ item . name ] = item . originalValue + emoji ;
563
+ } ) ;
564
+
565
+ return rankedValues ;
566
+ }
567
+
568
+ // Add ranking emojis to bundle size metrics (smaller values are better)
569
+ function addSizeRankingEmojis ( toolNames , results , metricKey ) {
570
+ const values = toolNames . map ( ( name ) => ( {
571
+ name,
572
+ value : parseFloat ( results [ name ] [ metricKey ] . replace ( 'kB' , '' ) ) ,
573
+ originalValue : results [ name ] [ metricKey ] ,
574
+ } ) ) ;
575
+
576
+ // Sort by value (smaller is better)
577
+ values . sort ( ( a , b ) => a . value - b . value ) ;
578
+
579
+ const emojis = [ '🥇' , '🥈' , '🥉' ] ;
580
+ const rankedValues = { } ;
581
+
582
+ values . forEach ( ( item , rank ) => {
583
+ const emoji = rank < 3 ? emojis [ rank ] : '' ;
584
+ rankedValues [ item . name ] = item . originalValue + emoji ;
585
+ } ) ;
586
+
587
+ return rankedValues ;
588
+ }
589
+
590
+ // Calculate average results
547
591
const averageResults = { } ;
548
592
549
- // drop the warmup results
593
+ // Drop the warmup results
550
594
perfResults = perfResults . slice ( warmupTimes ) ;
551
595
552
596
for ( const result of perfResults ) {
@@ -576,33 +620,78 @@ logger.success('Benchmark finished!\n');
576
620
577
621
let markdownLogs = '' ;
578
622
623
+ // Use actual tool names from buildTools (with version numbers)
624
+ const actualToolNames = buildTools . map ( ( { name } ) => name ) ;
625
+
579
626
markdownLogs += '#### Build performance\n\n' ;
580
627
581
628
if ( runDev ) {
629
+ // Add ranking emojis for each metric
630
+ const devColdStartRanked = addRankingEmojis (
631
+ actualToolNames ,
632
+ averageResults ,
633
+ 'devColdStart' ,
634
+ ) ;
635
+ const rootHmrRanked = addRankingEmojis (
636
+ actualToolNames ,
637
+ averageResults ,
638
+ 'rootHmr' ,
639
+ ) ;
640
+ const leafHmrRanked = addRankingEmojis (
641
+ actualToolNames ,
642
+ averageResults ,
643
+ 'leafHmr' ,
644
+ ) ;
645
+ const prodBuildRanked = addRankingEmojis (
646
+ actualToolNames ,
647
+ averageResults ,
648
+ 'prodBuild' ,
649
+ ) ;
650
+
582
651
markdownLogs += markdownTable ( [
583
652
[ 'Name' , 'Dev cold start' , 'Root HMR' , 'Leaf HMR' , 'Prod build' ] ,
584
- ...buildTools . map ( ( { name } ) => [
653
+ ...actualToolNames . map ( ( name ) => [
585
654
name ,
586
- `${ averageResults [ name ] . devColdStart } (${ averageResults [ name ] . serverStart } + ${ averageResults [ name ] . onLoad } )` ,
587
- averageResults [ name ] . rootHmr ,
588
- averageResults [ name ] . leafHmr ,
589
- averageResults [ name ] . prodBuild ,
655
+ `${ devColdStartRanked [ name ] } (${ averageResults [ name ] . serverStart . replace ( 'ms' , '' ) } + ${ averageResults [ name ] . onLoad . replace ( 'ms' , '' ) } )` ,
656
+ rootHmrRanked [ name ] ,
657
+ leafHmrRanked [ name ] ,
658
+ prodBuildRanked [ name ] ,
590
659
] ) ,
591
660
] ) ;
592
661
} else {
662
+ // Add ranking emojis for prod build only
663
+ const prodBuildRanked = addRankingEmojis (
664
+ actualToolNames ,
665
+ averageResults ,
666
+ 'prodBuild' ,
667
+ ) ;
668
+
593
669
markdownLogs += markdownTable ( [
594
670
[ 'Name' , 'Prod build' ] ,
595
- ...buildTools . map ( ( { name } ) => [ name , averageResults [ name ] . prodBuild ] ) ,
671
+ ...actualToolNames . map ( ( name ) => [ name , prodBuildRanked [ name ] ] ) ,
596
672
] ) ;
597
673
}
598
674
599
675
markdownLogs += '\n\n#### Bundle sizes\n\n' ;
676
+
677
+ // Add ranking emojis for bundle sizes
678
+ const totalSizeRanked = addSizeRankingEmojis (
679
+ actualToolNames ,
680
+ sizeResults ,
681
+ 'totalSize' ,
682
+ ) ;
683
+ const totalGzipSizeRanked = addSizeRankingEmojis (
684
+ actualToolNames ,
685
+ sizeResults ,
686
+ 'totalGzipSize' ,
687
+ ) ;
688
+
600
689
markdownLogs += markdownTable ( [
601
690
[ 'Name' , 'Total size' , 'Gzipped size' ] ,
602
- ...buildTools . map ( ( { name } ) => [
691
+ ...actualToolNames . map ( ( name ) => [
603
692
name ,
604
- sizeResults [ name ] . totalSize ,
605
- sizeResults [ name ] . totalGzipSize ,
693
+ totalSizeRanked [ name ] ,
694
+ totalGzipSizeRanked [ name ] ,
606
695
] ) ,
607
696
] ) ;
608
697
0 commit comments