跳至主内容区

惰性加载与积极加载

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

TypeORM 提供两种主要的数据关系加载方式:惰性加载(Lazy Loading)和积极加载(Eager Loading),每种方式对应用性能的影响各不相同。

惰性加载

惰性加载仅在需要时加载关联数据,当并非总是需要所有关联数据时,可降低数据库负载。

@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { lazy: true })
posts: Promise<Post[]>
}

当需要获取数据时,只需调用

const user = await userRepository.findOne(userId)
const posts = await user.posts

优势:

  • 资源高效:仅在确实需要时加载必要数据,可降低查询成本和内存使用。

  • 适用于选择性数据使用场景:适合不需要所有关联数据的情况。

劣势:

  • 增加查询复杂性:每次访问关联数据都会触发一次额外的数据库查询,若管理不当可能增加延迟。

  • 难以追踪:若使用不慎,可能导致 n+1 查询问题。

积极加载

积极加载在执行主查询时会自动获取所有关联数据。这种方式虽然方便,但如果存在过多复杂关联,则可能导致性能问题。

@Entity()
export class User {
@OneToMany(() => Post, (post) => post.user, { eager: true })
posts: Post[]
}

在这种情况下,一旦检索到用户数据,其关联的文章也会立即加载。

优势:

  • 自动加载关联数据,无需额外查询即可轻松访问关联关系。

  • 避免 n+1 查询问题:由于所有数据都在单次查询中获取,因此不会产生不必要的多次查询风险。

劣势:

  • 一次性获取所有关联数据可能导致查询量过大,即使并非所有数据都是必需的。

  • 不适合仅需部分关联数据的场景,因为这可能导致数据使用效率低下。

要了解如何配置和使用惰性加载与积极加载关系的更多细节和示例,请访问官方 TypeORM 文档:积极加载与惰性加载