Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: lazy loading, eager loading, ORM, performance, N+1 problem

В чем разница между lazy loading и eager loading?

Вопрос проверяет понимание стратегий загрузки данных в ORM и их влияние на производительность приложений.

Короткий ответ

Lazy loading загружает связанные данные только при первом обращении к ним, что может привести к проблеме N+1 запросов. Eager loading загружает все связанные данные сразу с помощью JOIN или отдельных запросов, что уменьшает количество запросов к базе данных. Выбор между ними зависит от сценария использования: lazy подходит для редких обращений к связям, eager — когда данные точно понадобятся.

Длинный ответ

Основные концепции

Lazy loading (отложенная загрузка) и eager loading (жадная загрузка) — это две стратегии загрузки связанных данных в объектно-реляционном отображении (ORM). Они определяют, когда и как загружаются связанные сущности из базы данных.

Lazy loading

При lazy loading связанные данные загружаются только в момент первого обращения к ним. Например, если у вас есть объект User с коллекцией Orders, то при получении пользователя заказы не загружаются. Они будут загружены отдельным запросом, когда вы вызовете user.orders. Это экономит ресурсы, если связанные данные не нужны, но может привести к проблеме N+1 запросов, когда для каждого родительского объекта выполняется дополнительный запрос.

// Пример на TypeORM (Node.js)
const user = await userRepository.findOne({ where: { id: 1 } });
// Заказы не загружены
console.log(user.orders); // Здесь выполняется дополнительный запрос

Eager loading

При eager loading связанные данные загружаются сразу вместе с родительским объектом, обычно через JOIN или отдельные запросы. Это увеличивает объем данных в одном запросе, но уменьшает общее количество запросов. Подходит, когда вы точно знаете, что связанные данные понадобятся.

// Пример на TypeORM
const user = await userRepository.findOne({
  where: { id: 1 },
  relations: ['orders']
});
// Заказы уже загружены
console.log(user.orders); // Нет дополнительного запроса

Когда что использовать

  • Lazy loading: когда связанные данные нужны редко или не для всех объектов. Например, загрузка комментариев к статье только при их просмотре.
  • Eager loading: когда связанные данные нужны для большинства объектов. Например, загрузка автора вместе с постом для отображения на странице списка.

Вывод: Выбор между lazy и eager loading зависит от паттернов доступа к данным. Для API с предсказуемыми запросами чаще используют eager loading, чтобы избежать N+1 проблемы. Для сложных графов объектов с редкими обращениями к связям lazy loading может быть эффективнее.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • SQL

Ключевые слова

#lazy loading

#eager loading

#ORM

#performance

#N+1 problem

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.