代码之家  ›  专栏  ›  技术社区  ›  Brian Boatright

什么是延迟加载?

  •  77
  • Brian Boatright  · 技术社区  · 16 年前

    什么是延迟加载?

    [阅读一些答案后进行编辑] 为什么人们如此频繁地使用这个术语?

    假设您只使用ASP/ADO记录集,并为gridview加载数据或ADO.NET数据源。

    13 回复  |  直到 15 年前
        1
  •  227
  •   Mike Stone    16 年前

    这被称为延迟加载,因为就像一个懒惰的人一样,你正在推迟做你不想做的事情。相反的是快速加载,在你需要它之前,你就可以立即加载它。

    如果您想知道为什么人们可能会使用懒惰加载,那么考虑一个需要花费大量时间启动的应用程序。此应用程序可能正在进行大量的快速加载。。。从磁盘加载东西,在需要它之前做计算等等。

    与延迟加载相比,应用程序的启动速度要快得多,但是当您第一次需要执行一些需要长时间运行的加载时,在第一次加载时可能会有轻微的停顿。因此,通过延迟加载,您可以在整个应用程序运行过程中摊销加载时间。。。实际上,您可以从加载用户可能从未打算使用的东西中节省下来。

        2
  •  40
  •   Javache    16 年前

    延迟加载是一种编程实践,您仅在第一次需要时加载或初始化对象。这可能会大大提高性能,尤其是在应用程序中有大量组件的情况下。

    像往常一样, Wikipedia

        3
  •  14
  •   Shivprasad Koirala    11 年前

    下面是一个youtube视频,演示了如何使用延迟加载,如何实现延迟加载以及延迟加载的优缺点。

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

        4
  •  9
  •   Kevin Goff    16 年前

    延迟加载是计算机编程中常用的一种设计模式,它将对象的初始化延迟到需要时。。。

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

        5
  •  7
  •   Mendelt    16 年前

    术语延迟加载通常用于讨论对象关系映射器。如果您直接使用ADO.NET,您总是会得到快速加载(即它总是加载您指定的内容)。

    仔细设计对象模型也可以避免这个问题。(在域驱动设计中,使用聚合并仅加载聚合根是一种避免使用延迟加载的方法)。

    延迟加载可能导致或映射器执行大量小型数据库访问,而不是一次检索所有需要的数据。这也会导致性能问题。

        6
  •  5
  •   Eli Courtwright    16 年前

    下面是我编写的一些实际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字段中,以便下次请求时无需重新计算该值。

        7
  •  4
  •   Dan Rosenstark    16 年前

    懒散加载:你不会把时间(或记忆)浪费在你可能不需要的东西上。当你需要它的时候,它需要更长的时间,但那很好。

    Atom as taught in gang terms by Venus on WKRP .]

        8
  •  4
  •   Cyril Gupta    15 年前

    延迟加载是数据库中经常使用的一个术语,指的是仅在需要时加载部分所需信息的概念。

    例如,假设您需要一个包含多个表的联接的记录。如果您同时获取所有数据,则所需时间将比仅获取主表所需时间更长。使用延迟加载,只有在需要时才会获取其余信息。因此,在某些情况下,它实际上是“有效加载”。

    其他类型的“装载”是:

    1. 立即加载-一次加载所有连接的表。
        9
  •  3
  •   Pasan Indeewara    16 年前

    这使您的代码更加高效,并有助于管理内存使用。

    延迟加载的示例应用程序:

    价值持有者

        10
  •  3
  •   Gideon Balaganesan    9 年前

    延迟加载的一些优点:

    1. 最小化应用程序的启动时间。
    2. 由于按需加载,应用程序消耗的内存更少。
        11
  •  2
  •   d48    13 年前

    延迟加载的一个例子是网页上有大量数据的网格或表格,以查看应用程序当时只加载用户浏览器视点大小的页面。当他们向下滚动想要查看更多内容或数据时,此时会将更多数据加载到视图中。

    通过ajax或jQuery,这也越来越成为一种常见的视觉/交互设计模式。

        12
  •  1
  •   Philip Wallace    15 年前

    Lazy<T> 现在是c#4.0的一部分-上有一个不错的页面 MSDN 这就解释了这个概念。

        13
  •  0
  •   Rohit Katiyar    6 年前

    Geeksforgeks认为,延迟加载是一种软件设计模式,只有在实际需要时才会初始化对象,而不是在之前初始化对象,以保持使用的简单性并提高性能。

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