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.