DataLoader

NestJS 🔴 Senior

Definition

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.
#communication#interview