Ленивая загрузка VS Стремительная загрузка в Active record - Rails - PullRequest
0 голосов
/ 26 декабря 2018

При чтении на форумах для оптимизации запросов активная загрузка лучше, чем ленивая загрузка при использовании активных записей.Но когда я посещаю интервью, люди говорят, что ленивая загрузка полезна в некоторых сценариях.Когда я занимаюсь серфингом в Google, я не могу найти достаточно информации об этом.Кто-нибудь может направить меня, чтобы понять эту концепцию.Ленивая загрузка Vs Eager loading

Мое понимание: Eager loading решает проблемы N + 1 при получении связанных записей.

Пожалуйста, дайте мне несколько практических сценариев

1 Ответ

0 голосов
/ 26 декабря 2018

Когда требуется отложенная загрузка?

Вы хотите получить данные любой модели с условиями (условиями соединения) других связанных моделей, но не хотите загружать эти связанные данные таблицычто может занять время.

Таким образом, ленивая загрузка сэкономит время, поскольку вы можете получать данные путем фильтрации, но не загружаете связанные данные из базы данных.

Когда необходима активная загрузка?

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

Предположим,

@ users - это ActiveRecord::Relation объект коллекции (has_one: id_card), имеющий размер 80 & Iвызывал каждый цикл для таблицы, как показано ниже:

@users.each do |user|
  user.id_card.name
end

Он запустит запрос 80 раз для таблицы модели IdCard.Так вот, это эффективно.

Обновление

includes не всегда создают два отдельных запроса, прочитайте здесь .

...