DataLoader工厂模式:批量解析器的动态注册与缓存失效策略
超越简单DataLoader用法,设计一个可动态注册批处理函数的工厂,支持按请求生命周期自动清除缓存,以及处理嵌套N+1查询的最佳实践。 · 难度:入门 · +10XP
DataLoader工厂模式:批量解析器的动态注册与缓存失效策略
DataLoader解决了GraphQL常见的N+1问题,但在大型应用中每个Loader的注册、绑定数据源、缓存失效都是重复劳动。本教程设计一个DataLoaderFactory,它根据Schema中的@batchable指令自动扫描需要批量加载的字段,按请求生命周期生成DataLoader实例,并支持指定缓存键的TTL或手动invalidate。你还会学到如何用AsyncLocalStorage在任意深度Resolver中安全获取当前请求的Loader实例,彻底避免内存泄漏。
class LoaderFactory {
loaders = new Map()
create(context, type, field) {
const key = ${type}.${field}
if (!this.loaders.has(key)) {
this.loaders.set(key, new DataLoader(keys => batchFn(keys, type, field)))
}
return this.loaders.get(key)
}
clear() { this.loaders.clear() }
}