何时使用延迟初始化,以及何时使用Eager(即使我们进行延迟),我们将使用的变量仍将包含一些与以下任务关联的数据。那么我们如何在两者之间进行选择?两者之间在性能和内存效率上有什么区别吗?
请解释任何最佳用例,因为某些线程支持渴望而有些懒惰。
答案 0 :(得分:1)
通常,延迟加载的优点是:
缺点是:
在其他语言中,另一个缺点是需要额外的代码来实现最后一点,但是Kotlin的by lazy
使其非常容易!
显然,总体收益取决于您根本需要多少价值,以及与以后相比,启动延迟的影响。
答案 1 :(得分:0)
我们应该在这里讨论的第一件事是什么是延迟加载和渴望加载:
快速加载是一种设计模式,其中的数据初始化在现场进行 延迟加载是一种设计模式,用于尽可能延迟对象的初始化 让我们来看一些示例的实际效果:
UserLazy类:
const [{ fetching, data, error }, reExecute] = useQuery({
query: INITIAL_CONFIG_QUERY,
pause: true
});
React.useEffect(() => {
reExecute();
}, []);
OrderDetail类:
@Entity
@Table(name = "USER")
public class UserLazy implements Serializable {
@Id
@GeneratedValue
@Column(name = "USER_ID")
private Long userId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private Set<OrderDetail> orderDetail = new HashSet();
// standard setters and getters
// also override equals and hashcode
}
一个用户可以拥有多个OrderDetails。在急切的加载策略中,如果加载用户数据,它还将加载与其关联的所有订单,并将其存储在内存中。
但是,当启用延迟加载时,如果我们拉起UserLazy,则在未显式调用之前,OrderDetail数据不会被初始化并加载到内存中。
在下一部分中,我们将看到如何在Hibernate中实现上述示例。
在此处查找文章: https://www.baeldung.com/hibernate-lazy-eager-loading
还请阅读以下内容: https://www.imperva.com/learn/performance/lazy-loading/