logo hsb.horse
← Voltar para o índice de snippets

Snippets

Cache de import dinâmico

Implementação leve em TypeScript para cachear imports dinâmicos. Trata múltiplos imports do mesmo caminho com uma única Promise.

Publicado: Atualizado:

Ao usar imports dinâmicos, vários imports do mesmo módulo geram Promises separadas. Com cache, dá para tratar imports do mesmo caminho com uma única 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;
}

Onde isso rende na prática

Esse padrão é mais útil quando imports paralelos podem acertar o mesmo módulo ao mesmo tempo. Ele funciona bem em lazy dialogs, widgets administrativos e command palettes, onde a mesma corrida de import pode ser disparada por mais de um chamador.

A principal decisão de desenho é se Promises com erro devem continuar no cache. Se o requisito inclui retry, normalmente é mais simples limpar a entrada quando ocorre erro.

Nota prática

Este snippet funciona bem quando você não quer reescrever a mesma operação ou a mesma verificação em rotinas ligadas a typescript, javascript, performance. Mantido como um apoio pequeno, ele deixa a intenção mais clara para quem chama.

Se as ramificações e as pré-condições começarem a crescer, é melhor não concentrar tudo em um único snippet. Separar o passo a passo, o helper e as responsabilidades costuma ser mais fácil de manter.