Lazy Loading e Eager Loading
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