What is Lazy Loading?什么是延迟加载?
[阅读一些答案后进行编辑] 假设您只使用ASP / ADO记录集,并使用数据或ADO.NET数据源将其加载到gridview。 我想我应该问为什么人们使用术语"延迟加载",他们是什么"其他"类型? 之所以称为延迟加载,是因为像一个懒惰的人一样,您推迟执行不想做的事情。与之相反的是"急切加载",您可以在需要之前就立即加载某些东西。 如果您好奇为什么人们可能会使用延迟加载,请考虑一个需要很长时间才能启动的应用程序。这个应用程序可能正在做很多急切的事情……从磁盘上加载东西,然后进行计算等等。 将此与延迟加载进行比较,应用程序将启动得更快,但是,当您第一次需要执行需要长时间运行的加载的操作时,首次加载时可能会稍有暂停。因此,通过延迟加载,您可以在运行应用程序的整个过程中分摊加载时间……实际上,您可以避免加载用户永远不会使用的内容。 延迟加载是一种编程实践,其中仅在首次需要时才加载或初始化对象。这有可能极大地提高性能,特别是如果您的应用程序中有很多组件。 和往常一样,维基百科有更多详细信息。 延迟加载是一个概念,其中我们将对象单元的加载延迟到需要的位置。简单说说按需加载对象,而不是不必要地加载对象。例如,如果您有一个"客户"类,其中聚集了"订单"对象。因此,您希望加载客户数据,但是要延迟订单对象,直到应用程序需要它为止。 以下是一个youtube视频,它演示了如何使用延迟加载,如何实现延迟加载及其优点和缺点。
维基百科的定义 http://en.wikipedia.org/wiki/Lazy%20loading 在谈论对象关系映射器时,通常使用术语惰性加载。如果直接使用ADO.NET,您总是会渴望加载(即,它始终会加载您指定的内容)。 像nHibernate这样的OR映射器支持返回代理对象,这些代理对象仅在访问数据时才用正确的数据"填充"。这样,您只需加载您实际使用的数据。当您指定可以从数据库中加载的对象之间有很多关系,而又不想OR映射器加载所有相关对象以及与相关对象相关的对象等等时,此功能很有用。这可能会导致整个数据库被加载。 也可以通过仔细设计对象模型来防止此问题。 (使用聚合并且仅像在域驱动设计中那样加载聚合根是解决此问题而不使用延迟加载的一种方法)。 延迟加载可能导致或映射器执行许多小型数据库访问,而不是一次检索您需要的所有数据。这也可能导致性能问题。 这是我写的一些实际Python代码的示例:
基本上,我有一个Item类,它代表库存中的一个项目。我们拥有的物品总数是我们拥有的物品数量加上我们从各种来源借来的所有物品的总和。这些数字都存储在我们的数据库中,在实际请求总数之前计算该数字是毫无意义的(因为通常会使用项而不请求总数)。 因此,total属性检查_total字段是否存在。如果不是,则属性代码查询数据库并对其进行计算,然后将该值存储在_total字段中,以便在下次请求时无需重新计算它。 延迟加载是数据库中经常使用的术语,是指仅在需要时才加载部分所需信息的概念。 即假设您需要一个包含多个表的联接的记录。如果一次性读取所有内容,则比只说主表要花费更长的时间。使用延迟加载,仅在需要时才获取其余信息。因此,在某些情况下,它实际上是"高效加载"。 其他类型的"加载"是: 延迟加载:您不会浪费时间(也不会浪费您的时间)来使用可能不需要的东西。然后,当您需要它时,它会花费更长的时间,但这很好。 生活中的例子:您不需要实际学习法语短语手册,而是一次学习一个短语。什么时候有意义?如果您只是短暂待在法国(例如,您不需要很多用语),或者您需要很快离开。如果您在这里呆了两年,并且/或者您有很长的学习时间,那么提前学习整个短语集(渴望加载)可能会更有效率。 [受到金星在WKRP上以帮派术语讲授的原子的启发。] 延迟加载的一些优点: 是一种设计模式。 延迟加载:直到您的代码需要特定对象执行某些操作,对象才会被初始化,并且一旦初始化,它就不会重新初始化该对象,而是使用先前初始化的对象。 这使您的代码效率更高,并有助于管理内存使用情况。 延迟加载的示例应用程序:
鬼 延迟加载的示例是网页上包含大量数据的表格或表格,以查看应用程序当时仅加载用户浏览器视点大小的位置。当他们向下滚动以查看更多内容或数据时,此时将有更多数据加载到视图中。 通过ajax或jQuery,这也越来越成为一种常见的视觉/交互设计模式。 如上所述,与之相反的是急切加载,您无需考虑客户端,因此可能会降低性能。
根据geeksforgeeks的介绍,延迟加载是一种软件设计模式,其中,仅在实际需要时才进行对象的初始化,而不是在保持使用简便性和提高性能的前提下进行初始化。 https://www.geeksforgeeks.org/lazy-loading-design-pattern/ |