Что такое отложенная загрузка?

91

Что такое отложенная загрузка?

[Отредактируйте после прочтения нескольких ответов] Почему люди так часто используют этот термин?

Скажем, вы просто используете набор записей ASP / ADO и загружаете его данными или источником данных ADO.NET для представления сетки.

Думаю, мне следовало спросить, почему люди используют термин «ленивая загрузка», какие у них «другие» типы?

Брайан Боутрайт
источник

Ответы:

225

Это называется отложенной загрузкой, потому что, как ленивый человек, вы откладываете выполнение того, чего не хотите. Напротив, это «нетерпеливая загрузка», когда вы загружаете что-то сразу, задолго до того, как это вам понадобится.

Если вам интересно, почему люди могут использовать отложенную загрузку, подумайте о приложении, запуск которого занимает LOOOOONG времени. Это приложение, вероятно, много загружается ... загружает вещи с диска, выполняет вычисления и прочее задолго до того, как оно когда-либо понадобится.

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

Майк Стоун
источник
@Mike Stone, Привет, ты можешь объяснить, когда использовать ленивую и нетерпеливую загрузку? Насколько мне известно, если я запускаю файловый менеджер, он использует ленивую загрузку.
Олстон
40

Ленивая загрузка - это практика программирования, при которой вы загружаете или инициализируете объект только тогда, когда он вам впервые нужен. Это потенциально может значительно повысить производительность, особенно если в вашем приложении много компонентов.

Как обычно, в Википедии больше подробностей.

Javache
источник
14

Ленивая загрузка - это концепция, при которой мы откладываем загрузку единицы объекта до точки, где она нам нужна. Простыми словами загрузка объекта по запросу, а не загрузка объектов без надобности. Например, если у вас есть класс «Клиент», в котором агрегирован объект «Заказы». Итак, вы хотите загрузить данные о клиентах, но объекты заказов, которые вы хотели бы отложить, пока они не понадобятся вашему приложению.

Ниже приведено видео на YouTube, которое демонстрирует, как использовать отложенную загрузку, как мы можем реализовать отложенную загрузку, а также преимущества и недостатки этого.

http://www.youtube.com/watch?v=2SrfdAkwmFo

Шивпрасад Коирала
источник
9

Определение википедии Ленивая загрузка - это шаблон проектирования, обычно используемый в компьютерном программировании, чтобы отложить инициализацию объекта до момента, когда это необходимо. ...

http://en.wikipedia.org/wiki/Lazy%20loading

Кевин Гофф
источник
7

Термин отложенная загрузка обычно используется, когда речь идет об объектно-реляционных преобразователях. Если вы используете ADO.NET напрямую, вы всегда получаете активную загрузку (т. Е. Всегда загружает только то, что вы указали).

OR-mappers, такие как nHibernate, поддерживают возвращение прокси-объектов, которые «заполняются» правильными данными только тогда, когда вы обращаетесь к данным. Таким образом вы загружаете только те данные, которые действительно используете. Это полезная функция, когда вы указываете множество отношений между объектами, которые могут быть загружены из базы данных, вы не хотите, чтобы OR-mapper загружал все связанные объекты и объекты, связанные со связанными объектами, и так далее. Это может привести к загрузке всей вашей базы данных.

Эту проблему можно предотвратить также путем тщательного проектирования вашей объектной модели. (использование агрегатов и загрузка только агрегированных корней, как в дизайне, управляемом доменами, - это способ обойти это без использования ленивой загрузки).

Ленивая загрузка может привести к тому, что or mapper будет выполнять множество обращений к малой базе данных вместо того, чтобы получить все данные, которые вам нужны один раз. Это также может привести к проблемам с производительностью.

Мендельт
источник
5

Вот пример реального кода Python, который я написал:

class Item(Model):
    ...
    @property
    def total(self):
        if not hasattr(self, "_total"):
            self._total = self.quantity \
                  + sum(bi.quantity for bi in self.borroweditem_set.all())
        return self._total

По сути, у меня есть класс Item, который представляет предмет в нашем инвентаре. Общее количество предметов, которые у нас есть, - это количество, которым мы владеем, плюс сумма всех предметов, которые мы заимствуем из различных источников. Все эти числа хранятся в нашей базе данных, и было бы бессмысленно рассчитывать их до тех пор, пока не будет фактически запрошена общая сумма (поскольку часто элементы будут использоваться без запрашиваемой суммы).

Таким образом, свойство total проверяет, существует ли поле _total. В противном случае код свойства запрашивает базу данных и вычисляет ее, а затем сохраняет значение в поле _total, чтобы его не нужно было повторно вычислять при следующем запросе.

Эли Кортрайт
источник
4

Ленивая загрузка: вы не тратите свое время (или память) на ненужные вещи. Затем, когда вам это нужно, это займет больше времени, но это нормально.

Пример из жизни: вместо того, чтобы на самом деле изучать этот французский разговорник, вы учите фразы по одной по мере необходимости. Когда это имеет смысл? Если вы собираетесь быть во Франции только на короткое время (т.е. вам не понадобится много фраз) или если вам нужно очень скоро уехать. Если вы там два года и / или у вас много времени на учебу, то было бы гораздо эффективнее просто выучить весь разговорник заранее (жадная загрузка).

[Вдохновленный Атомом, как учила Венера на WKRP в терминах банды .]

Дэн Розенстарк
источник
Не всегда правильно, что все занимает больше времени. Я испытал, что, когда ленивая загрузка не реализована наиболее оптимальным образом, на самом деле может значительно замедлить работу приложения.
Captain Sensible
1
@SeventhElement Я не утверждаю, что это нормально. Это основа понимания отложенной загрузки. В случае, когда это не нормально (например, потому, что пользовательский интерфейс становится вялым или по какой-либо другой причине), вы можете выбрать активную загрузку.
Дэн Розенстарк
4

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

Предположим, вам нужна запись, в которой объединены несколько таблиц. Если вы загрузите все сразу, это займет больше времени, чем если бы вы загрузили, скажем, только основную таблицу. При использовании отложенной загрузки остальная информация будет извлечена только в случае необходимости. Так что в определенных сценариях это фактически «эффективная загрузка».

Другие типы «загрузки»:

  1. Активная загрузка - загрузка всех подключенных столов одновременно.
Кирилл Гупта
источник
3

это шаблон дизайна.

Ленивая загрузка: до тех пор, пока ваш код не потребует некоторой операции, выполняемой конкретным объектом, объект не инициализируется, а после инициализации он не повторно инициализирует объект, а использует ранее инициализированный объект.

Это делает ваш код намного более эффективным и помогает управлять использованием памяти.

Примеры применения отложенной загрузки:

Ghost Lazy initialization Держатель значения

Пасан Индеевара
источник
3

Некоторые из преимуществ отложенной загрузки:

  1. Минимизирует время запуска приложения.
  2. Приложение потребляет меньше памяти из-за загрузки по запросу.
  3. Исключается ненужный запрос к серверу.
Гидеон Балаганесан
источник
2

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

Это становится все более распространенным шаблоном визуального / интерактивного проектирования, в том числе через ajax или jQuery.

И, как упоминалось выше, противоположной будет загрузка с нетерпением, когда вы не учитываете клиента, что потенциально может снизить производительность.

d48
источник
1

Lazy<T>теперь является частью C # 4.0 - в MSDN есть хорошая страница, объясняющая эту концепцию.

Филип Уоллес
источник
0

Согласно geeksforgeeks, отложенная загрузка - это шаблон проектирования программного обеспечения, при котором инициализация объекта происходит только тогда, когда это действительно необходимо, а не раньше, чтобы сохранить простоту использования и повысить производительность.

https://www.geeksforgeeks.org/lazy-loading-design-pattern/

Рохит Катияр
источник