Vai al contenuto principale

Lazy Loading e Eager Loading

Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

TypeORM fornisce due metodi principali per caricare le relazioni dei dati: Lazy Loading e Eager Loading. Ognuno ha un impatto diverso sulle prestazioni della tua applicazione.

Lazy Loading

Il lazy loading carica i dati delle relazioni solo quando necessario, riducendo il carico sul database quando tutti i dati correlati non sono sempre indispensabili.

@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { lazy: true })
posts: Promise<Post[]>
}

Quando occorre recuperare i dati, basta chiamare

const user = await userRepository.findOne(userId)
const posts = await user.posts

Vantaggi:

  • Efficienza delle risorse: Carica solo i dati necessari al momento effettivo del bisogno, riducendo costi delle query e utilizzo di memoria.

  • Ideale per utilizzo selettivo: Adatto a scenari dove non servono tutti i dati correlati.

Svantaggi:

  • Complessità query aumentata: Ogni accesso ai dati correlati scatena una query aggiuntiva al database, potenzialmente aumentando la latenza se non gestita correttamente.

  • Difficile da tracciare: Può causare il problema delle query n+1 se usato con superficialità.

Eager Loading

L'eager loading recupera automaticamente tutti i dati correlati durante l'esecuzione della query principale. Comodo ma può causare problemi di performance con troppe relazioni complesse.

@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { eager: true })
posts: Post[]
}

In questo caso, i post verranno caricati non appena si recuperano i dati dell'utente.

Vantaggi:

  • Caricamento automatico dei dati correlati, semplificando l'accesso alle relazioni senza query aggiuntive.

  • Evita il problema delle query n+1: Recuperando tutti i dati in un'unica query, si elimina il rischio di generare query multiple non necessarie.

Svantaggi:

  • Recuperare tutti i dati correlati in una volta può generare query pesanti, anche quando non servono tutte le informazioni.

  • Non adatto a scenari che richiedono solo un sottoinsieme dei dati correlati, poiché può portare a un utilizzo inefficiente delle risorse.

Per approfondire dettagli ed esempi su come configurare e usare relazioni lazy ed eager, consulta la documentazione ufficiale di TypeORM: Relazioni Eager e Lazy