Carga Diferida y Carga Ansiosa
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
TypeORM proporciona dos métodos principales para cargar relaciones de datos: Carga diferida (Lazy Loading) y Carga ansiosa (Eager Loading). Cada uno tiene un impacto diferente en el rendimiento de tu aplicación.
Carga diferida
La carga diferida recupera los datos de relaciones solo cuando se necesitan, reduciendo la carga en la base de datos cuando no siempre se requieren todos los datos relacionados.
@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { lazy: true })
posts: Promise<Post[]>
}
Cuando necesites recuperar los datos, simplemente llama
const user = await userRepository.findOne(userId)
const posts = await user.posts
Ventajas:
-
Eficiencia de recursos: Solo carga los datos necesarios cuando realmente se requieren, reduciendo costos de consulta y uso de memoria.
-
Ideal para uso selectivo de datos: Adecuado para escenarios donde no se necesitan todos los datos relacionados.
Desventajas:
-
Complejidad de consultas incrementada: Cada acceso a datos relacionados dispara una consulta adicional a la base de datos, lo que puede aumentar la latencia si no se gestiona adecuadamente.
-
Difícil de rastrear: Puede generar el problema de consultas n+1 si se usa sin cuidado.
Carga ansiosa
La carga ansiosa recupera automáticamente todos los datos relacionados cuando se ejecuta la consulta principal. Esto puede ser conveniente pero causar problemas de rendimiento si existen demasiadas relaciones complejas.
@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { eager: true })
posts: Post[]
}
En este caso, las publicaciones se cargarán tan pronto como se recuperen los datos del usuario.
Ventajas:
-
Carga automáticamente datos relacionados, facilitando el acceso a relaciones sin consultas adicionales.
-
Evita el problema de consultas n+1: Como todos los datos se obtienen en una sola consulta, no hay riesgo de generar múltiples consultas innecesarias.
Desventajas:
-
Recuperar todos los datos relacionados de una vez puede generar consultas pesadas, incluso si no se necesitan todos los datos.
-
No es adecuado para escenarios donde solo se requiere un subconjunto de datos relacionados, ya que puede llevar a un uso ineficiente de datos.
Para explorar más detalles y ejemplos sobre cómo configurar y usar relaciones diferidas y ansiosas, visita la documentación oficial de TypeORM: Relaciones Ansiosas y Diferidas