Avec les dynamic imports, plusieurs imports du même module créent des Promises distinctes. Le cache permet de traiter les imports du même chemin avec une seule Promise.
type ModuleCache = Map<string, Promise<unknown>>;
const modCache: ModuleCache = new Map();
export async function dynamicImport<T = unknown>(path: string): Promise<T> { const cache = modCache.get(path); if (cache) return cache as Promise<T>;
const modPromise = import(path) as Promise<T>; modCache.set(path, modPromise); return modPromise;}Là où cela paie en pratique
Ce pattern est surtout utile quand plusieurs imports parallèles peuvent viser le même module au même moment. Il fonctionne bien pour des dialogues lazy, des widgets d’administration ou des command palettes où la même course d’import peut être déclenchée par plusieurs appels.
Le vrai choix de conception est de savoir si un Promise en échec doit rester dans le cache. Si le besoin inclut un retry, il est généralement plus simple d’effacer l’entrée en cas d’erreur.
Note pratique
Ce snippet convient bien quand on ne veut pas réécrire la même opération ou la même vérification autour de typescript, javascript, performance. Le garder sous la forme d’un petit utilitaire rend l’intention plus lisible côté appelant.
En revanche, si les branches et les préconditions s’accumulent, mieux vaut ne pas tout tasser dans un seul snippet. Séparer la procédure, le helper et les responsabilités rend l’ensemble plus simple à maintenir.
hsb.horse