Aller au contenu principal

Taille de bundle Kanon

Des chiffres réels. Pas de marketing. Données auto-générées le Mar 3, 2026.

TL;DR

Pour une app complète avec tous les types de schémas (gzip) :

  • Kanon : 4.19 kB référence
  • Zod 4 Mini : 9.57 kB (+128%)
  • Zod 4 Classic : 17.24 kB (+311%)

Cas d'utilisation réels

Voici des scénarios de validation que vous rencontrerez en production :

Cas d'usageKanon v3Zod 4 MiniZod 4 ClassicZod 3
Formulaire de connexion
Login form validation
3.06 kB
référence
6.71 kB
+119%
14.72 kB
+381%
12.80 kB
+318%
Profil utilisateur
User profile with optional fields
3.40 kB
référence
7.53 kB
+121%
15.88 kB
+367%
12.84 kB
+277%
Réponse API
API response with discriminated union
3.44 kB
référence
7.00 kB
+103%
15.96 kB
+364%
12.82 kB
+272%
Validation de config
App configuration validation
3.23 kB
référence
7.35 kB
+128%
15.90 kB
+393%
12.86 kB
+298%
Formulaire + Coercion
Form data with type coercion
3.20 kB
référence
6.91 kB
+116%
16.14 kB
+405%
12.88 kB
+303%
App complète
Complete app schemas (comprehensive)
4.19 kB
référence
9.57 kB
+128%
17.24 kB
+311%
13.06 kB
+211%
Données générées le Mar 3, 2026 • Mesuré avec esbuild + gzip

Ce que chaque test valide

Cas d'utilisationCe qu'il valide
Formulaire de connexionEmail + mot de passe avec contraintes
Profil utilisateurUUID, email, âge optionnel, tableau de rôles
Réponse APIUnion discriminée (succès/erreur)
Validation de configURL, plage de ports, enum, timeout optionnel
Formulaire + CoercitionString→Number, String→Boolean, String→Date
Application complèteTout ce qui précède + discriminatedUnion, record, etc.

Détail Kanon

Cas d'usageBrutGzipBrotli
Formulaire de connexion
Login form validation
10.38 kB3.06 kB2.71 kB
Profil utilisateur
User profile with optional fields
11.65 kB3.40 kB3.00 kB
Réponse API
API response with discriminated union
11.81 kB3.44 kB3.03 kB
Validation de config
App configuration validation
10.81 kB3.23 kB2.85 kB
Formulaire + Coercion
Form data with type coercion
11.08 kB3.20 kB2.84 kB
App complète
Complete app schemas (comprehensive)
14.44 kB4.19 kB3.72 kB

Données générées le Mar 3, 2026


Pourquoi Kanon est plus petit : le vrai tree-shaking

Kanon utilise des fonctions pures. Zod utilise des classes. Cette différence architecturale est la raison pour laquelle Kanon fait un tree-shaking parfait.

// ✅ Kanon - chaque fonction est autonome
// Seuls string() et object() se retrouvent dans votre bundle
import { string, object, parse } from "pithos/kanon";

const loginSchema = object({
email: string({ format: "email" }),
password: string({ minLength: 8 }),
});
// ⚠️ Zod - z est un namespace qui embarque TOUTES les méthodes
// La bibliothèque Zod entière se retrouve dans votre bundle
import { z } from "zod";

const loginSchema = z.object({
email: z.string().email(),
password: z.string().min(8),
});

Même z.string().min(1) embarque ~15 kB car les méthodes de classe sont bundlées ensemble.

Zod 4 Mini : une solution partielle

Zod 4 a introduit zod/mini qui est plus petit, mais ne peut toujours pas faire un tree-shaking complet :

ScénarioZod 4 ClassicZod 4 MiniKanon v3
Formulaire de connexion simple~14.7 kB~6.7 kB~3.1 kB
Schémas d'app complète~17.2 kB~9.6 kB~4.2 kB
Taux de croissance+17%+43%+37%

Kanon v2.0.1 vs Zod v4.3.5

Le bundle de Kanon grandit proportionnellement avec l'utilisation. Celui de Zod est principalement une surcharge fixe.


Helpers de commodité : k, z & validation

Kanon offre des helpers de commodité pour différents cas d'utilisation, mais ils ont un compromis :

Style d'importKanon v3Zod 4 MiniZod 4 Classic
Imports directs
Toujours (production)
3.06 kB
référence
6.71 kB
+119%
14.72 kB
+381%
validation +3%
validation(schema).safeParse(data)
3.14 kB
référence
6.71 kB
+114%
14.72 kB
+369%
k +74%
Syntaxe type Zod : k.string(), k.object()...
5.32 kB
référence
6.71 kB
+26%
14.72 kB
+177%
z +119%
Migration depuis Zod
6.71 kB
référence
6.71 kB
+-0%
14.72 kB
+119%
Référence Kanon : formulaire de connexion avec imports directs

Reproduire ces résultats

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


Résumé

AspectKanonZod
ArchitectureFonctionsClasses
Tree-shaking✅ Complet❌ Limité
Bundle min~3 kB~7-15 kB
Évolue avec l'usage✅ Oui❌ Plutôt fixe
Chemin de migrationz shim z disponibleN/D
En résumé

En production : Utilisez les imports directs pour le plus petit bundle. Prototypage : Utilisez le namespace k pour la commodité. Migration depuis Zod : Utilisez le shim z, puis passez progressivement aux imports directs.


Related