DataLoader
NestJS 🔴 SeniorDefinition
Utilitaire qui regroupe et met en cache les requetes de base de donnees dans une execution GraphQL. Resout le probleme classique N+1.
Analogie
Comme un livreur qui regroupe toutes les commandes d'un quartier en une seule tournee au lieu de faire un aller-retour par colis.
Exemple de code
@Injectable({ scope: Scope.REQUEST })
export class UserLoader {
private loader = new DataLoader<number, User>(async (ids) => {
const users = await this.userService.findByIds([...ids]);
return ids.map(id => users.find(u => u.id === id));
});
load(id: number) { return this.loader.load(id); }
}
Cas d'usage
Optimiser les resolvers GraphQL en batchant les requetes par entite pour eviter le N+1.
Anti-pattern
Charger les relations une par une dans chaque resolver sans DataLoader.