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

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

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

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

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

Ответ 1

Он назывался ленивой загрузкой, потому что, как ленивый человек, вы откладываете то, что не хотите. Противоположность - Eager Loading, где вы загружаете что-то сразу, задолго до того, как оно вам понадобится.

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

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

Ответ 2

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

Как обычно, Wikipedia содержит более подробную информацию.

Ответ 3

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

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

Ответ 4

Lazy loading - это концепция, в которой мы задерживаем загрузку единицы объекта в том месте, в котором она нам нужна. Вставка простых слов по требованию, а не загрузка объектов без необходимости. Например, если у вас есть класс "Клиент", который имеет агрегированный объект "Заказы". Таким образом, вам нравится загружать данные клиента, но объекты заказов, которые вы хотели бы задержать, пока ваше приложение не потребует его.

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

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

Ответ 5

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

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

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

Lazy loading может привести к тому, что или mapper сделает много небольших доступов к базе данных вместо того, чтобы извлекать все данные, которые вам нужны один раз. Это также может привести к проблемам с производительностью.

Ответ 6

Вот пример из некоторого реального кода на 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, чтобы он не нуждался в перерасчете при следующем запросе.

Ответ 7

Lazy loading: вы не тратите свое время (и свою память) на то, что вам может не понадобиться. Тогда, когда вам это нужно, это занимает больше времени, но это прекрасно.

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

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

Ответ 8

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

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

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

  • Eager Loading - Загрузка всех подключенных таблиц сразу.

Ответ 9

- шаблон проектирования.

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

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

Примеры приложений Lazy loading:

Призрак Ленивая инициализация Держатель стоимости

Ответ 10

Lazy<T> теперь входит в С# 4.0 - есть хорошая страница на MSDN, который объясняет концепцию.

Ответ 11

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

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

И, как уже упоминалось выше, противоположность была бы Eager Loading, когда вы не принимаете клиента, поэтому потенциально может иметь успех.

Ответ 12

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

  • Сведение к минимуму времени запуска приложения.
  • Приложение потребляет меньше памяти из-за загрузки по требованию.
  • Избегается ненужный запрос на сервер.