Aller au contenu principal

Performance & Taille du Bundle

Principes

ObjectifStratégie
Tree-shakingExports granulaires, pas de barrel exports
Zéro dépendanceAucune dépendance externe
APIs modernesUtiliser les APIs natives quand équivalent
Pas de code mortPas de code legacy pour anciens navigateurs
Optimisation des bouclesPré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