cache
函数可以让你缓存数据获取或计算的结果,相比整页渲染缓存,它提供了更精细的数据粒度控制,并且适用于客户端渲染(CSR)、服务端渲染(SSR)、API 服务(BFF)等多种场景。
需要 x.65.5 及以上版本
如果在 BFF 中使用 cache
函数,应该从 @modern-js/server-runtime/cache
导入相关函数
import { cache } from '@modern-js/server-runtime/cache'
fn
: 需要缓存的数据获取或计算的函数options
(可选): 缓存配置
tag
: 用于标识缓存的标签,可以基于这个标签使缓存失效maxAge
: 缓存的有效期 (毫秒)revalidate
: 重新验证缓存的时间窗口(毫秒),与 HTTP Cache-Control 的 stale-while-revalidate 功能一致getKey
: 简化的缓存键生成函数,根据函数参数生成缓存键customKey
: 自定义缓存键生成函数,用于在函数引用变化时保持缓存options
参数的类型如下:
cache
函数会返回一个新的函数,该函数有缓存的能力,多次 调用该函数,不会重复执行 fn
函数。
与 react 的 cache 函数只能在 server component 组件中使用不同,
EdenX 提供的 cache
函数可以在任意的前端或服务端的代码中使用。
options
参数当无 options
参数传入时,主要可以用于 SSR 项目,缓存的生命周期是单次 ssr 渲染的请求,如可以在多个 data loader 中调用同一个 cachedFn 时,不会重复执行 cachedFn 函数。这样可以在不同的 data loader 中共享数据,同时避免重复的请求,EdenX 会在每次收到服务端请求时,重新执行 fn
函数。
无 options
参数时,可以看作是 react cache
函数的替代品,可以在任意服务端代码中使用(比如可以在 SSR 项目的 data loader 中),不局限于 server component。