intermediate

Lazy vs eager loading

Выбирайте, когда related data loads on demand или upfront, учитывая query count, memory и serialization boundaries.

Lazy loading подгружает связанные данные при первом обращении. Eager loading (join, include, preload) забирает связи заранее. Выбор зависит от формы запроса, кардинальности, сериализации и памяти.

| Стратегия | Окупается когда | Риск | |-----------|-----------------|------| | Lazy | Связь редко нужна | N+1, запросы после закрытия транзакции | | Eager | Связь всегда в ответе | Over-fetch, широкие join, память |

На интервью: свяжите стратегию загрузки с предотвращением N+1, формой DTO ответа и границей между persistence-моделью и объектом ответа.

Типовые ошибки: lazy при сериализации в JSON; eager на широкие графы, которые не используются; загрузка в цикле без batching.

Компромисс — число запросов и латентность против памяти и размера ответа.

Чеклист:

  • Знайте кардинальность связей.
  • Считайте запросы на endpoint.
  • Сопоставляйте загруженные данные с ответом.
  • Предпочитайте явные include неявному lazy.