什么是懒加载?
[阅读几个答案后编辑] 为什么人们经常使用这个术语?
假设您只使用ASP/ADO记录集,并将其加载到数据或ADO.NET数据源中以供网格视图使用。
我想我应该问为什么人们使用懒加载这个术语,还有哪些“其他”类型?
什么是懒加载?
[阅读几个答案后编辑] 为什么人们经常使用这个术语?
假设您只使用ASP/ADO记录集,并将其加载到数据或ADO.NET数据源中以供网格视图使用。
我想我应该问为什么人们使用懒加载这个术语,还有哪些“其他”类型?
它被称为“懒加载”,就像一个懒惰的人一样,你推迟了做你不想做的事情。相反的是“急切加载”,它会在需要之前立即加载某些东西。
如果你好奇为什么人们可能使用懒加载,请考虑一个需要很长时间才能启动的应用程序。这个应用程序可能会进行大量的急切加载......从磁盘加载东西,进行计算等等,而这些东西在实际使用前很久就已经加载完成了。
与此相比,懒加载应用程序将更快地启动,但当你第一次需要执行某些需要长时间运行的操作时,可能会稍微有点停顿,因为它是第一次加载。因此,使用懒加载,你可以在运行应用程序的过程中分摊加载时间...并且你可能会节省加载用户可能永远不打算使用的东西的时间。
惰性加载是一个概念,指我们延迟加载对象,直到需要使用它。简单来说,按需对象加载而不是无谓地加载对象。例如,如果您有一个“Customer”类,其中包含“Orders”对象,则您希望加载客户数据,但是订单对象可以推迟到应用程序需要时再加载。
下面是一个YouTube视频,演示了如何使用惰性加载,以及如何实现惰性加载和它的优缺点。
维基百科的定义
懒加载是一种常见的设计模式,用于计算机编程中推迟对象初始化的时间,直到需要使用该对象时才进行初始化。
以下是我编写的一些实际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字段中,以便下次请求时无需重新计算。
延迟加载是数据库中经常使用的术语,指的是仅在需要时加载所需信息的部分。
例如,假设您需要一个包含几个表的连接记录。如果一次性获取所有内容,则需要的时间比只获取主表要长。使用延迟加载,只有在需要时才会获取其余信息。因此,在某些情况下实际上是“高效加载”。
其他类型的“加载”包括:
延迟加载的一些优点:
是一种设计模式。
懒加载:只有当您的代码需要执行某个特定对象的操作时,该对象才会被初始化。一旦初始化完成,它就不会重新初始化该对象,而是使用先前初始化过的对象。
这使得您的代码更加高效,并有助于管理内存使用。
懒加载的示例应用:
Ghost 懒初始化 值持有者