闭包实现带ttl的局部缓存:工厂函数返回{set,get,clear},用map存值与过期时间,惰性清理+定时扫描防内存泄漏,键需稳定,值注意深拷贝,可按需叠加lru容量控制。

用闭包实现带过期时间的局部缓存,核心是把缓存数据、过期时间戳和清理逻辑全封在函数作用域里,外部只能通过 set/get 接口操作,既安全又轻量。它不依赖任何库,适合高频调用但结果不常变的计算场景,比如格式化长字符串、解析 URL 参数、生成唯一 ID 前缀等。
封装私有状态,避免时间判断泄漏
闭包能天然隔离 expiresAt、cache Map 等内部变量,防止被误改或意外读取。推荐写成工厂函数:
- 接收 ttlMs(毫秒),返回 { set, get, clear } 对象
- 内部用 Map 存值,用另一个 Map(或直接存在 value 对象里)记每个 key 的过期时间点
- 所有时间比对(Date.now() > expiresAt)只在闭包内发生,外界看不到时间戳
get 时惰性清理 + 定时主动扫描
只靠 get 检查会漏掉长期不用的过期项,内存持续增长。双模式更稳妥:
前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。
- 惰性清理:每次 get 先判断是否过期,过期就 delete(key),不返回值
- 主动扫描:用 setInterval 每 30 秒遍历一次所有 key,批量删除已过期项;记得在 clear 时 clearTimeout/clearInterval,防内存泄漏
键要稳定,值要注意引用
缓存效果好坏,很大部分取决于 key 是否可复用:
- key 必须是 string/number/symbol,或用 JSON.stringify({ a, b }) 生成稳定字符串——别用 {} 或 () => {} 这类对象/函数作 key
- 如果缓存的是大数组或深层嵌套对象,set 时注意深拷贝(如 structuredClone),避免外部修改影响缓存一致性
- 在 React 中,把缓存实例放在模块顶层或 useRef 初始化一次,别写在组件函数体里反复重建
按需叠加容量控制
TTL 解决时效性,但不控内存上限。若缓存项可能上千,建议加 LRU:
- 用一个数组记录 key 的访问顺序,每次 set/get 都把对应 key 移到末尾
- set 前检查 size,超限时 pop 最前的 key 并 delete
- 淘汰逻辑放在 TTL 判断之后:先清过期项,再按 LRU 控制数量
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










