Отложенная и жадная загрузка
Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
TypeORM предоставляет два основных метода загрузки связей: Lazy Loading (отложенная) и Eager Loading (жадная). Каждый по-разному влияет на производительность приложения.
Lazy Loading (отложенная загрузка)
Отложенная загрузка подгружает данные связей только при необходимости, снижая нагрузку на базу данных, когда полные связанные данные требуются не всегда.
@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { lazy: true })
posts: Promise<Post[]>
}
Для получения данных достаточно вызвать
const user = await userRepository.findOne(userId)
const posts = await user.posts
Преимущества:
-
Эффективное использование ресурсов: Загружает только необходимые данные по требованию, снижая стоимость запросов и расход памяти.
-
Идеально для выборочного использования: Оптимально для сценариев, где не нужны все связанные данные.
Недостатки:
-
Усложнение запросов: Каждый доступ к связанным данным генерирует дополнительный запрос к БД, что может увеличить задержки при неправильном управлении.
-
Сложность отслеживания: При неосторожном использовании может привести к проблеме n+1 запросов.
Eager Loading (жадная загрузка)
Жадная загрузка автоматически получает все связанные данные при выполнении основного запроса. Это удобно, но может вызвать проблемы производительности при большом количестве сложных связей.
@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { eager: true })
posts: Post[]
}
В этом случае посты загрузятся сразу при получении данных пользователя.
Преимущества:
-
Автоматическая загрузка связей: Упрощает доступ к связанным данным без дополнительных запросов.
-
Исключает проблему n+1 запросов: Все данные извлекаются одним запросом, исключая риск генерации лишних запросов.
Недостатки:
-
Загрузка всех связанных данных может создавать ресурсоёмкие запросы, даже если часть данных не используется.
-
Неэффективно для сценариев выборочного доступа: Приводит к неоптимальному использованию данных, когда требуется только подмножество.
Подробные примеры настройки и использования отложенных и жадных связей смотрите в официальной документации TypeORM: Жадные и отложенные связи