fast-copy 通过内建 WeakMap 缓存实现高性能对象拷贝与循环引用智能复用,零配置、防内存泄漏;支持原型链保留、惰性拷贝及结构化指纹缓存,兼顾安全性与效率。

直接用 fast-copy 搭配内存缓存结构,就能实现高性能对象拷贝+缓存一体化方案。它不是“先拷贝再缓存”,而是把缓存逻辑内建在拷贝过程中——尤其是对循环引用和重复子结构的智能复用,本质就是一种运行时缓存。
利用 fast-copy 的 WeakMap 缓存自动处理循环引用
fast-copy 内部使用 WeakMap 记录已遍历的对象引用,遇到相同对象(包括循环引用)时直接返回已有副本,避免递归爆炸和重复计算。你无需手动管理缓存键或生命周期,这个机制默认启用、零配置。
- 适用于任意含 self-reference 或互相引用的对象图,比如树节点父子双向引用、状态对象嵌套依赖
- WeakMap 特性保证缓存不阻碍垃圾回收,不会引发内存泄漏
- 比手写 Map 缓存更安全,也比 JSON 方案彻底规避了
TypeError: Converting circular structure to JSON
结合 Map 实现业务层对象指纹缓存
当需要按内容缓存(而非引用),比如 API 响应结果去重、计算结果复用,可配合 fast-copy 生成稳定副本后,用 结构化指纹 作为缓存 key:
- 对原始对象先用
copy()得到标准化副本(确保 Date/Map/Set 等类型被正确转换) - 用轻量序列化工具(如
fast-json-stable-stringify)生成确定性字符串 hash - 将 hash 作为 key,存入
Map或LRU cache实例中 - 后续相同输入可跳过拷贝,直接返回缓存副本
保持原型链 + 避免冗余拷贝提升缓存有效性
传统深拷贝常丢失构造器信息,导致缓存后的对象无法通过 instanceof 或调用原型方法。fast-copy 默认保留原型链,这意味着:
立即学习“Java免费学习笔记(深入)”;
- 缓存的 Date 实例仍是
Date类型,能正常调用.toISOString() - 自定义类实例拷贝后仍继承原方法,缓存后可直接使用,无需重新绑定
- 避免因类型降级(如 Date → plain object)导致缓存命中却行为异常
惰性拷贝策略减少无谓缓存压力
fast-copy 对不可拷贝类型(如函数、DOM 节点、window)默认采用 浅层引用传递,不强制深拷贝也不进缓存队列:
- 函数保留原引用,适合事件处理器、回调等无需复制的场景
- 避免为大量函数创建无效缓存项,节省内存与哈希计算开销
- 如需强制拷贝函数,可通过配置开启,但多数业务缓存场景中应主动排除



















