Performance & Taille du Bundle
Principes
| Objectif | Stratégie |
|---|---|
| Tree-shaking | Exports granulaires, pas de barrel exports |
| Zéro dépendance | Aucune dépendance externe |
| APIs modernes | Utiliser les APIs natives quand équivalent |
| Pas de code mort | Pas de code legacy pour anciens navigateurs |
| Optimisation des boucles | Préférer les boucles for pour les opérations critiques |
Optimisation des boucles
Pour les opérations critiques en performance, préférez les boucles for aux méthodes chaînées (map, filter, reduce). Les boucles for évitent les allocations intermédiaires et le surcoût des appels de fonction.
// ✅ Bien : boucle for pour la performance
export function keyBy<T>(
array: readonly T[],
iteratee: (value: T) => PropertyKey
): Record<string, T> {
const result: Record<string, T> = {};
for (let i = 0; i < array.length; i++) {
const key = String(iteratee(array[i]));
result[key] = array[i];
}
return result;
}
// ✅ Bien : les méthodes Array sont acceptables pour du code simple et lisible
export function difference<T>(array: readonly T[], values: readonly T[]): T[] {
const excludeSet = new Set(values);
return array.filter((item) => !excludeSet.has(item));
}
Documentation de la complexité : Utilisez le tag @performance dans TSDoc pour documenter la complexité temporelle (O(n), O(n²), etc.) quand c'est pertinent.
Structure des imports
// ✅ Import direct (tree-shaking optimal)
import { chunk } from "pithos/arkhe/array/chunk";
import { isString } from "pithos/arkhe/is/isString";
// ⚠️ Import groupé (acceptable, tree-shakable)
import { chunk, map, filter } from "pithos/arkhe/array";
// ❌ Import global (à éviter, inclut tout)
import * as Arkhe from "pithos/arkhe";
Cible ES2020+
Pithos cible ES2020+ pour bénéficier des APIs modernes :
// Utilisation des APIs natives modernes
Object.fromEntries() // au lieu d'un fromPairs custom
Array.prototype.flat() // au lieu d'un flatten custom
?? // nullish coalescing
?. // optional chaining
astuce
Philosophie : Si une API native fait le travail, ne la réimplémentez pas.
Documentez l'alternative native dans Taphos (utilitaires dépréciés).
Related
- Design de l'API — Conventions de nommage et signatures de fonctions
- Arkhe vs Lodash — Taille du Bundle — Comparaisons réelles de taille de bundle
- Taphos — Équivalence Native — Quand le JS natif suffit