json缓存需先序列化再存储,对比须用深度比对而非引用或字符串化;推荐lodash isequal,结合时间戳和版本控制实现智能更新。

JSON 数据在前端缓存中常用于存储接口响应、用户配置或表单状态,但直接缓存对象会变成 "[object Object]",必须序列化;而后续做“缓存对比”时,不能只比引用,得比内容是否一致——这正是 JSON 缓存对比的核心难点。
缓存前必须序列化,否则存的是字符串占位符
localStorage 和 sessionStorage 只接受字符串值。如果直接传入对象,JavaScript 会隐式调用 toString(),结果是 "[object Object]",完全丢失原始数据。
- ✅ 正确做法:存之前用
JSON.stringify(data) - ✅ 取之后用
JSON.parse(str)还原为对象 - ⚠️ 注意:
undefined、函数、Date、RegExp 等非标准 JSON 类型会被忽略或转成null,缓存前需清洗或换用其他方案(如 IndexedDB)
对比两个 JSON 缓存是否相同,不能用 ===
因为即使内容一样,两个 JSON.parse() 出来的对象也是不同引用,obj1 === obj2 永远为 false。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ❌ 避免
JSON.stringify(a) === JSON.stringify(b):属性顺序不一致、undefined被丢弃、0和false无法区分 - ✅ 推荐递归深度比对:逐层检查类型、键名、值(含数组索引、嵌套对象)
- ✅ 或使用成熟工具:如 Lodash 的
_.isEqual(a, b),它已处理 NaN、Date、RegExp、循环引用等边界情况
带时间戳的缓存对比:判断是否该更新
真实场景中,缓存对比不只是“相等与否”,更关注“是否过期+是否变更”。常见模式是存数据时附带时间戳和版本标识:
- 存储结构示例:
{ data: {...}, timestamp: Date.now(), version: "v2.1" } - 读取后先校验
timestamp是否超时(比如 5 分钟),再用深度比对判断内容是否变化 - 若服务端返回 ETag 或 last-modified 头,可与本地缓存比对,避免无谓的全量更新
内存缓存 + JSON 对比:提升高频操作效率
对计算密集型 JSON 处理(如筛选、格式化),可在内存中缓存中间结果,并用参数哈希 + 深度比对结果来决定是否复用:
- 用
JSON.stringify(args)生成 key,查 Map 缓存 - 命中后,用
_.isEqual(cachedResult, newResult)确保输出一致性(尤其当输入含动态字段时) - 适合场景:搜索过滤器、图表数据聚合、表单校验规则生成
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










