@@ -494,6 +494,94 @@ return testEffect(done =>
494
494
)
495
495
` ` `
496
496
497
+ ### Benchmarks
498
+
499
+ While Solid offers performance simplified, it is good to validate if that promise can be kept.
500
+ Vitest offers an experimental ` bench` function to run benchmarks and compare the results inside the same ` describe` block;
501
+ for example if you had a ` < List> ` flow component similar to ` < For> ` , you could benchmark it like this:
502
+
503
+
504
+ ` ` ` jsx title= " list.bench.jsx"
505
+ describe (' list rendering' , () => {
506
+ const ITEMS = 1000
507
+ const renderedFor = new Set ()
508
+ const listFor = Array .from ({ length: ITEMS }, (_ , i ) => i)
509
+ bench (' For' , () => new Promise ((resolve ) => {
510
+ const ItemFor = (props ) => {
511
+ onMount (() => {
512
+ renderedFor .add (props .number )
513
+ if (renderedFor .size === ITEMS ) { resolve () }
514
+ })
515
+ return < span> {props .number }< / span>
516
+ }
517
+ render (() => < For each= {listFor}>
518
+ {(item ) => < ItemFor number= {item} / > }
519
+ < / For> )
520
+ }))
521
+
522
+ const renderedList = new Set ()
523
+ const listList = Array .from ({ length: ITEMS }, (_ , i ) => i)
524
+ bench (' List' , () => new Promise ((resolve ) => {
525
+ const ItemList = (props ) => {
526
+ onMount (() => {
527
+ renderedList .add (props .number )
528
+ if (renderedList .size === ITEMS ) { resolve () }
529
+ })
530
+ return < span> {props .number }< / span>
531
+ }
532
+ render (() => < List each= {listList}>
533
+ {(item ) => < ItemList number= {item} / > }
534
+ < / List> )
535
+ }))
536
+ })
537
+ ` ` `
538
+
539
+ Running ` [npm| pnpm| yarn] test bench` will then execute the benchmark function:
540
+
541
+ ` ` ` ansi frame= " none"
542
+ [1 ;36m [RUN ][0 ;36m v1.4 .0 [0 ;8m solid- app/ src/ components/ [0m
543
+
544
+ [0 ;32m ✓ [0 ;8msrc / components/ list .bench .jsx [0 ;31m (2 )[0 ;8m 1364ms
545
+ [0 ;32m ✓ [0 ;8mbenchmark [0 ;31m (2 )[0 ;8m 1360ms
546
+ [1 ;37m name hz min max mean p75 p99 p995 p999 rme samples
547
+ [1 ;32m · [0 ;37mFor [0 ;36m60 .5492 11.2355 47.9164 16.5155 15.4180 47.9164 47.9164 47.9164 [0 ;37m ±13.60 % 31 [0 ;32mfastest
548
+ [1 ;32m · [0 ;37mList [0 ;36m49 .7725 16.5441 69.3559 20.0914 18.0349 69.3559 69.3559 69.3559 [0 ;37m ±21.37 % 25
549
+
550
+ [1 ;36m [BENCH ][0 ;36m Summary
551
+
552
+ [0 ;37mFor - src/ components/ list .bench .tsx > benchmark
553
+ [0 ;32m 1 .22x [0 ;8m faster than[0 ;37m List
554
+ ` ` `
555
+
556
+ Please keep in mind that it is very difficult to create meaningful benchmarks.
557
+ The numbers should always be taken with a grain of salt, but can still indicate performance degradations if compared between versions.
558
+
559
+
560
+ ### Test coverage
561
+
562
+ While coverage numbers can be misleading, they are used by many projects as a rough measurement of code quality.
563
+ Vitest supports coverage collection. To use it, it needs an extra package:
564
+
565
+ <TabsCodeBlocks>
566
+ <div id="npm">
567
+ ` ` ` bash frame= " none"
568
+ npm i - D @vitest/ coverage- v8
569
+ ` ` `
570
+ </div>
571
+ <div id="yarn">
572
+ ` ` ` bash frame= " none"
573
+ yarn add - D @vitest/ coverage- v8
574
+ ` ` `
575
+ </div>
576
+ <div id="pnpm">
577
+ ` ` ` bash frame= " none"
578
+ pnpm i - D @vitest/ coverage- v8
579
+ ` ` `
580
+ </div>
581
+ </TabsCodeBlocks>
582
+
583
+ Also, you need to [set up vitest's coverage feature](https://vitest.dev/guide/coverage.html).
584
+
497
585
498
586
### Integration/E2E testing
499
587
0 commit comments