sessionstorage适合缓存临时图表数据,但仅限当前标签页生命周期;应只存json序列化的基础数据(如配置对象、原始数组),避免实例、dom、date等不可序列化值;key需含业务标识防冲突;读取须容错降级;敏感数据须脱敏或不缓存。

SessionStorage 适合缓存临时图表数据,但要注意它只在当前浏览器标签页生命周期内有效,关闭标签即清空。关键不是“怎么存”,而是“存什么、怎么用、怎么避免踩坑”。
只存序列化后的基础数据,别存图表实例或 DOM 对象
SessionStorage 只支持字符串,任何对象都得先 JSON.stringify()。图表库(如 ECharts、Chart.js)的配置对象、原始数据数组、时间范围参数这些可以存;但千万不能存 chart 实例、canvas 元素、回调函数或包含 Date/RegExp 等无法序列化的值。
- ✅ 推荐存:
{ labels: ["Jan", "Feb"], datasets: [{ data: [12, 19] }] } - ❌ 禁止存:
{ chart: echarts.init(dom), lastUpdate: new Date() }(会报错或丢失)
给数据加业务标识,避免 key 冲突
不要用通用 key 如 "chartData",不同图表容易覆盖。按页面路径 + 图表类型 + 参数哈希组合 key,比如:
sessionStorage.setItem("dashboard-sales-bar-2024Q3", JSON.stringify(data))sessionStorage.setItem(`report-user-pie-${userId}`, JSON.stringify(pieData))
这样切换页面或刷新后,能精准读取对应图表的数据,不干扰其他模块。
读取时做容错处理,不依赖缓存一定存在
用户可能新开标签、清空缓存、或首次访问,所以读取必须判空并降级处理:
- 先
const raw = sessionStorage.getItem(key) - 再
if (raw) { try { data = JSON.parse(raw); } catch(e) { data = null; } } - 如果 data 为空,就走正常接口请求流程,拿到后再写入 sessionStorage
敏感数据别乱放,图表数据也需评估风险
SessionStorage 同源可读,XSS 攻击下易泄露。如果图表含用户 ID、金额明细、行为轨迹等敏感字段,要么脱敏后再存(如聚合后只存总数、百分比),要么干脆不缓存,每次拉取服务端脱敏后的结果。
不复杂但容易忽略:缓存是优化手段,不是数据来源。始终以接口响应为准,SessionStorage 只是提升体验的“快照”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











