Ajax本地缓存核心是将响应存入localStorage/sessionStorage/IndexedDB,请求前校验缓存有效性;localStorage适合简单静态数据,需配合时间戳控制过期;IndexedDB适用于大数据量、索引查询或离线场景;键设计需统一参数序列化防冲突。

Ajax 请求结果的本地缓存,核心是把响应数据存到浏览器的持久化存储中(如 localStorage、sessionStorage 或 IndexedDB),并在下次请求前先检查缓存是否有效,避免重复发起网络请求。
用 localStorage 实现简单缓存
适合缓存结构简单、体积不大、不需要过期控制的静态数据(比如配置项、用户偏好)。
- 发送请求前,先用
localStorage.getItem(key)查找缓存; - 若存在且未过期(可配合时间戳判断),直接使用缓存值,跳过 Ajax;
- 若无缓存或已过期,则发起请求,成功后用
localStorage.setItem(key, JSON.stringify(data))存入,并记录时间戳; - 示例 key 可设为请求 URL + 参数哈希,避免冲突。
带过期时间的缓存策略
单纯存数据容易 stale,加时间戳可控制有效期。
- 缓存时同时保存数据和时间:
{ data: ..., timestamp: Date.now() }; - 读取时计算差值,比如只允许 5 分钟内缓存:
Date.now() - cached.timestamp ; - 过期则清除并重新请求,保证数据新鲜度。
用 sessionStorage 区分会话级缓存
适用于单次页面会话中重复请求同一资源(如表单校验提示、弹窗文案),关闭标签页即失效。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
立即学习“Java免费学习笔记(深入)”;
- 行为与 localStorage 类似,但生命周期更短,无需手动清理;
- 适合临时性、非关键、不跨页面的数据;
- 注意:不同 tab 间不共享,慎用于需要多窗口同步的场景。
复杂场景推荐 IndexedDB
当缓存数据量大(如列表页 JSON > 10MB)、需索引查询、或要支持离线优先时,localStorage 不够用。
- IndexedDB 支持异步、结构化存储,可建索引、分页、事务;
- 配合 Cache API(用于 HTTP 资源)或自定义封装,能更好管理请求/响应对;
- 学习成本略高,但长期维护性和扩展性更强。
不复杂但容易忽略的是缓存键的设计和过期逻辑——URL 相同但参数顺序不同、空格或编码差异,都可能导致缓存失效或误命中。建议统一序列化参数再生成 key。

















