前端存储方案

WEB项目因为HTTP无状态,前端性能,SPA应用页面跳转数据共享等原因需要考虑前端存储方案,各个方案都有其特点,清楚才能合理选择及使用,这里总结下。

存储方案

  • cookie
  • sessionStorage
  • localStorage
  • indexedDB

Web SQL

在Chrome浏览器开发工具中还会看到Web SQL,但并不是HTML5规范的一部分,且Firefox不支持,因此不推荐使用

方案区别

针对以上几个方案,这里从各个维度来列出下区别。

存储大小

  • cookie为4kb
  • sessionStorage为2.5-10MB,因浏览器而异
  • localStorage为2.5-10MB,因浏览器而异
  • indexedDB 为> 250MB,因浏览器而异

失效时间

  • 设定过期时间的cookie到期自动清除
  • sessionStorage浏览器关闭清除
    • 注意不同Tab,不同Window session不同,但假如浏览器直接操作A页面复制的A页面,会发现sessionStorage默认值会是之前页面,但依然是独立的会话存储。
  • localStorage永久保存
  • indexedDB永久保存

与服务端交互

  • cookie有交互,sessionStorage,localStorage,indexedDB没有
    • cookie会在每个请求【除了跨域异步请求】中携带,因此不要让cookie数据变的很重,进而造成请求数据包过大

同步异步

  • indexedDB操作为异步,cookie,sessionStorage,localStorage均为同步

访问策略

  • cookie,sessionStorage,indexedDB,localStorage符合同源策略可以访问。
  • cookie可以通过设定domain做到不同源共享cookie

适用场景

  • cookie:登陆令牌等,短期存储
  • sessionStorage:短期存储,但请求时不需要与后端通讯,且大小有要求
  • localStorage:长期存储
  • indexedDB:大量结构化数据,长期存储