localStorage可作轻量级KV存储,需封装JSON序列化/反序列化、异常捕获、命名空间隔离、storage事件同步、容量预估与降级策略。

localStorage 本身不是数据库,但能当作轻量级本地 KV 数据库存来用——关键在于封装读写逻辑、处理类型与异常、补充缺失能力。
基础能力要补全:对象存取与错误防护
原生 localStorage 只接受字符串,直接存对象会变成 [object Object]。必须封装 JSON 序列化/反序列化,并捕获解析失败:
- 写入时用
JSON.stringify()转换,包裹try...catch捕获QuotaExceededError等异常 - 读取时先判断是否为
null,再尝试JSON.parse();失败则退回到原始字符串,避免崩溃 - 删除和清空保持原 API 不变,但可统一加日志或触发事件通知
数据组织需分层:命名空间与结构隔离
所有键共享同一平面,容易冲突。建议按业务域划分前缀,比如:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
-
user:profile、user:preferences -
cache:api/v1/products、cache:search:recent - 封装工具函数时支持传入 namespace 参数,自动拼接键名,避免手动拼错
状态同步不能靠猜:storage 事件 + 主动校验
同源多标签页间,localStorage 不自动同步视图。要靠 storage 事件联动:
- 每个页面提前监听
window.addEventListener('storage', handler) - 注意:当前页调用
setItem不会触发自身事件,只通知其他页 - 事件只带 key、oldValue、newValue,不含业务含义,建议在值中嵌入
type和ts字段辅助判断 - 首次加载仍需主动读取 localStorage 渲染界面,再发起轻量请求校验有效性
容量与降级要有预案:别等爆了才处理
5–10MB 是常见上限,但实际可用受浏览器和已有数据影响:
- 写入前可用
new Blob([JSON.stringify(data)]).size预估体积 - 捕获异常后,可降级到内存对象(
const fallback = {})暂存,提示用户“数据暂存在本页” - 对非关键数据,考虑定期清理过期项(例如加
expiresAt字段)或按 LRU 策略淘汰

















