什么是渴望加载?


161

什么是渴望加载?我用PHP / JS编写代码,但是更通用的答案就可以了。

我看到了很多有关Java和Ruby的问题,但是我不知道这些语言中的任何一种,而且我很难阅读代码。首先我不知道该怎么办


好问题。
PA-GW

Answers:


383

分为三个级别:

  1. 渴望加载:在被询问时您可以做所有事情。经典示例是将两个矩阵相乘。您完成所有计算。渴望加载;
  2. 延迟加载:仅在需要时进行计算。在前面的示例中,在访问结果矩阵的元素之前,您无需进行任何计算;和
  3. 急切加载:您可以在此处尝试预期用户的要求并对其进行预加载。

我希望这在您看到的情况下有意义。

让我给您一个“ Webby”示例。

想象一个页面,其中包含菜单项或导航之类的过渡图像。在此页面上可以通过三种方式加载图像:

  1. 在呈现页面之前加载所需的每个图像(eager);
  2. 仅在页面加载时加载显示的图像,并在需要时加载其他图像(惰性);和
  3. 在页面加载时仅加载显示的图像。页面加载后,在需要时将其他图像预加载到背景过急)。

合理?


3
尽管您超越了特定的问题,但还是过分了;这仍然是一个很好的答案。它简短,简单,并举了一个例子。
菲尔(Phil)

23

这与延迟加载相反,它延迟了对象的初始化,直到需要该对象为止。渴望加载会在创建对象时初始化它。


1
我可以补充一点,这些术语通常在ORM(对象关系映射器)的上下文中使用(可能来自?),在ORM中,您将对象映射到关系数据库中的表。
洛基(Loki)

10

如果您想象自己有一个叫人的对象,该人的名字,出生日期和不太重要的细节数量,那么可以说喜欢的颜色,喜欢的电视节目。

要延迟加载该类,您可以初始化它,也许从数据库中读取所有更常用的核心详细信息(例如姓名和出生日期),并且仅在需要时才读入较少使用的详细信息,而急于加载则相反,即您同时加载所有详细信息。

延迟加载的好处通常被认为是效率,但是如果对象不是那么复杂或效率不是问题,则可以使用急切加载


7
考虑一下,延迟加载更多的是在每个函数调用时使用更少的内存和更多的计算,而渴望加载将在创建类时使用更多的内存和更多的计算,而在调用函数时使用更少的计算。
Loki

0

急切的加载也用在Angular 8中。这只是意味着应用程序自动加载到浏览器中后,我们即刻自动获取特定模块内的所有代码,例如,您刚刚使用登录注册创建了Auth模块。导入到App Module中的组件

相比之下,这是延迟加载,这是当我们告诉已向其中加载了Auth模块App Module时,才仅在特定时间点(例如,当用户转到特定路线时)加载Auth Module

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.