Aller au contenu principal

Benchmarks de performance Zygos

Comparaison de performance entre Zygos, Neverthrow (Result) et fp-ts (Option).

Données auto-générées le Jan 29, 2026.

TL;DR

Zygos gagne 80% des benchmarks Result vs Neverthrow. Jusqu'à 3× plus rapide sur la création d'objets, 2-3× plus rapide sur les opérations chaînées. Performances similaires sur les opérations simples comme isOk() et unwrapOr().

Opérations par seconde. Plus c'est élevé, mieux c'est.


Méthodologie

Chaque benchmark :

  1. Crée des données de test correspondant aux patterns réels (chaînes de Result, transformations d'Option)
  2. Exécute les opérations en boucle serrée
  3. Mesure les opérations par seconde avec analyse statistique
  4. Rapporte min, max, moyenne, percentiles (p75, p99, p995, p999)
  5. Inclut la marge d'erreur relative (rme) pour la confiance

Le label "fastest" n'est attribué que lorsque le gagnant est ≥10% plus rapide que le second. Sinon, c'est considéré comme une égalité statistique.


Bibliothèques testées

BibliothèqueVersionDescription
zygos1.1.0Module Result/Option de Pithos (léger, tree-shakable)
neverthrow8.2.0Bibliothèque Result populaire pour TypeScript
Benchmarks exécutés le Jan 29, 2026

Pattern Result (Zygos vs Neverthrow)

Le pattern Result est le cœur de la gestion d'erreurs dans les deux bibliothèques. Voici comment elles se comparent :

Testzygosneverthrow
andThen-chain
15.63M ops/s
le plus rapide
4.37M ops/s
(3.57x)
andThen-err
25.10M ops/s
(1x)
25.13M ops/s
le plus rapide
andThen-ok
22.39M ops/s
le plus rapide
9.93M ops/s
(2.26x)
combine-all-ok
17.09M ops/s
le plus rapide
6.61M ops/s
(2.59x)
combine-large
3.58M ops/s
le plus rapide
2.49M ops/s
(1.44x)
combine-with-err
17.58M ops/s
le plus rapide
6.69M ops/s
(2.63x)
err-creation
21.04M ops/s
le plus rapide
7.17M ops/s
(2.93x)
fromThrowable-error
233.68K ops/s
(1.01x)
235.96K ops/s
le plus rapide
fromThrowable-success
4.90M ops/s
le plus rapide
4.89M ops/s
(1x)
isErr
25.30M ops/s
le plus rapide
25.27M ops/s
(1x)
isOk
25.36M ops/s
le plus rapide
25.20M ops/s
(1.01x)
map-err
28.47M ops/s
le plus rapide
28.44M ops/s
(1x)
map-ok
28.38M ops/s
le plus rapide
28.32M ops/s
(1x)
mapErr
28.44M ops/s
le plus rapide
28.41M ops/s
(1x)
match-err
28.31M ops/s
(1x)
28.32M ops/s
le plus rapide
match-ok
28.23M ops/s
le plus rapide
27.99M ops/s
(1.01x)
ok-complex
21.37M ops/s
le plus rapide
7.13M ops/s
(3x)
ok-creation
21.00M ops/s
le plus rapide
9.98M ops/s
(2.1x)
unwrapOr-err
25.17M ops/s
(1x)
25.29M ops/s
le plus rapide
unwrapOr-ok
25.33M ops/s
le plus rapide
25.32M ops/s
(1x)
Données générées le Jan 29, 2026 • Vitest bench

Résultats clés

La création d'objets est 2-3x plus rapide. Zygos utilise de simples littéraux d'objets tandis que Neverthrow utilise l'instanciation de classes avec plus de surcharge.

Les opérations chaînées (andThen) sont 2-4x plus rapides. L'implémentation plus simple de Zygos paie quand on chaîne plusieurs opérations.

Les opérations simples sont équivalentes. isOk(), isErr(), unwrapOr() performent de manière identique : les deux sont juste des vérifications de propriétés.

Pattern Option (Zygos vs fp-ts)

Zygos fournit une implémentation légère d'Option comparée à l'approche plus complète (mais plus lourde) de fp-ts :

TestZygosfp-ts
flatMap
17.07M ops/s
le plus rapide
2.16M ops/s
(7.9x)
fromNullable
21.18M ops/s
le plus rapide
12.53M ops/s
(1.69x)
fromNullable-null
21.42M ops/s
le plus rapide
12.74M ops/s
(1.68x)
getOrElse
20.48M ops/s
le plus rapide
10.37M ops/s
(1.98x)
isSome
20.54M ops/s
le plus rapide
12.33M ops/s
(1.67x)
map
20.27M ops/s
le plus rapide
10.06M ops/s
(2.01x)
match
20.35M ops/s
le plus rapide
10.00M ops/s
(2.04x)
some-creation
21.11M ops/s
le plus rapide
13.70M ops/s
(1.54x)
Données générées le Jan 29, 2026 • Vitest bench

Résultats clés

Zygos est 1,5-8x plus rapide sur toutes les opérations Option. Les plus gros gains sont sur flatMap (8x) et getOrElse (2x).

Le pipe de fp-ts ajoute de la surcharge. Bien qu'élégant, le style de composition fonctionnelle a un coût runtime.

Zygos utilise des appels de fonctions directs. Pas d'abstractions intermédiaires, juste des conditionnels simples.

📊 Résumé des performances

Result (vs Neverthrow)
🏆 Zygos : 16/20
Option (vs fp-ts)
🏆 Zygos : 8/8

Pourquoi Zygos est rapide

  1. Littéraux d'objets simples : { _tag: "Ok", value } au lieu d'instances de classes
  2. Pas d'abstractions intermédiaires : Accès direct aux propriétés, pas de chaînes de méthodes
  3. JavaScript moderne : Cible ES2020+, pas de surcharge de transpilation
  4. Code minimal : Moins de code = moins à exécuter

Quand la performance n'a pas d'importance

Pour la plupart des applications, Zygos et Neverthrow sont tous deux "assez rapides". Le vrai différenciateur est :

  • Taille de bundle : Zygos est 2.6x plus petit par rapport à Neverthrow
  • Ergonomie de l'API : Choisissez ce qui convient à votre équipe
  • Écosystème : Zygos s'intègre avec les autres modules Pithos

Statistiques détaillées

Pour les sceptiques qui veulent voir les chiffres bruts :

Result20
andThen-chain
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆15.63M0.00000.03940.00010.00010.0001±0.12%7,812,553
neverthrow4.37M0.00010.06680.00020.00020.0003±0.13%2,186,487
andThen-err
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
neverthrow 🏆25.13M0.00000.03780.00000.00000.0001±0.13%12,564,743
zygos25.10M0.00000.10500.00000.00000.0001±0.13%12,548,149
andThen-ok
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆22.39M0.00000.28580.00000.00000.0001±0.20%11,196,072
neverthrow9.93M0.00000.15480.00010.00010.0001±0.17%4,962,641
combine-all-ok
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆17.09M0.00002.69030.00010.00010.0001±1.09%8,546,422
neverthrow6.61M0.00000.28380.00020.00020.0002±0.27%3,303,774
combine-large
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆3.58M0.00020.20670.00030.00030.0006±0.42%1,789,730
neverthrow2.49M0.00020.26850.00040.00040.0007±0.39%1,245,772
combine-with-err
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆17.58M0.00000.26360.00010.00010.0001±0.44%8,789,518
neverthrow6.69M0.00000.44470.00010.00020.0002±0.37%3,346,903
err-creation
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆21.04M0.00000.13670.00000.00000.0001±0.20%10,518,494
neverthrow7.17M0.00000.14300.00010.00010.0002±0.23%3,586,381
fromThrowable-error
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
neverthrow 🏆235.96K0.00381.62690.00420.00400.0086±0.79%117,980
zygos233.68K0.00380.56210.00430.00410.0097±0.50%116,839
fromThrowable-success
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆4.90M0.00010.04300.00020.00020.0003±0.12%2,447,979
neverthrow4.89M0.00010.13410.00020.00020.0003±0.16%2,446,526
isErr
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆25.30M0.00000.05260.00000.00000.0001±0.12%12,652,338
neverthrow25.27M0.00000.06330.00000.00000.0001±0.15%12,636,894
isOk
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆25.36M0.00000.07540.00000.00000.0001±0.13%12,682,172
neverthrow25.20M0.00000.09030.00000.00000.0001±0.13%12,600,520
map-err
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆28.47M0.00000.26280.00000.00000.0000±0.16%14,236,276
neverthrow28.44M0.00000.05710.00000.00000.0000±0.12%14,219,506
map-ok
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆28.38M0.00000.07070.00000.00000.0000±0.13%14,187,567
neverthrow28.32M0.00000.15970.00000.00000.0000±0.15%14,159,415
mapErr
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆28.44M0.00000.03900.00000.00000.0000±0.13%14,218,338
neverthrow28.41M0.00000.06730.00000.00000.0000±0.13%14,203,990
match-err
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
neverthrow 🏆28.32M0.00000.09560.00000.00000.0000±0.19%14,160,960
zygos28.31M0.00000.10780.00000.00000.0000±0.21%14,152,591
match-ok
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆28.23M0.00000.06850.00000.00000.0000±0.13%14,115,862
neverthrow27.99M0.00000.19380.00000.00000.0000±0.23%13,995,988
ok-complex
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆21.37M0.00000.24070.00000.00000.0001±0.23%10,682,566
neverthrow7.13M0.00000.11020.00010.00010.0002±0.24%3,564,423
ok-creation
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆21.00M0.00000.07810.00000.00000.0001±0.21%10,501,012
neverthrow9.98M0.00000.18120.00010.00010.0001±0.24%4,990,318
unwrapOr-err
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
neverthrow 🏆25.29M0.00000.06620.00000.00000.0001±0.13%12,647,338
zygos25.17M0.00000.11130.00000.00000.0001±0.14%12,586,019
unwrapOr-ok
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆25.33M0.00000.10780.00000.00000.0001±0.12%12,663,841
neverthrow25.32M0.00000.36400.00000.00000.0001±0.19%12,659,480
Option8
flatMap
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆17.07M0.00000.23980.00010.00010.0001±0.27%8,533,278
fp-ts/flatMap2.16M0.00030.31110.00050.00050.0006±0.34%1,079,701
fromNullable
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆21.18M0.00000.42900.00000.00000.0001±0.30%10,587,618
fp-ts/fromNullable12.53M0.00000.04310.00010.00010.0001±0.12%6,265,561
fromNullable-null
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆21.42M0.00000.07940.00000.00000.0001±0.12%10,709,367
fp-ts/fromNullable12.74M0.00000.06650.00010.00010.0001±0.13%6,369,362
getOrElse
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆20.48M0.00000.12040.00000.00000.0001±0.13%10,241,621
fp-ts/getOrElse10.37M0.00000.06990.00010.00010.0001±0.13%5,183,817
isSome
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆20.54M0.00000.81300.00000.00000.0001±0.34%10,269,219
fp-ts/isSome12.33M0.00000.08420.00010.00010.0001±0.13%6,163,962
map
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆20.27M0.00000.13480.00000.00000.0001±0.14%10,132,860
fp-ts/map10.06M0.00000.32810.00010.00010.0001±0.18%5,030,723
match
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆20.35M0.00000.31620.00000.00000.0001±0.19%10,175,539
fp-ts/match10.00M0.00000.28160.00010.00010.0001±0.17%5,000,125
some-creation
Bibliothèqueops/sminmaxmoy.p75p99rmeéchantillons
zygos 🏆21.11M0.00000.06430.00000.00000.0001±0.11%10,553,702
fp-ts/some13.70M0.00000.05860.00010.00010.0001±0.13%6,851,485

Reproduire ces résultats

Vous voulez vérifier ces résultats ? Consultez comment reproduire nos données.


Related