HTML5 - Web Storage API

杨旭 bio photo By 杨旭

使用Web Storage API,有效的在请求之间持久化数据,避免cookie技术的各种限制安全问题以及带宽消耗

历史

在此之前,如果希望在客户端持久化一些数据,常常借助cookie技术,但是:

  • cookie存在大小限制,每个cookie不超过4k
  • 只要使用了cookie,每个http请求和响应都会带着cookie信息,无谓的消耗网络带宽
  • 因为cookie在请求中不停传递,带来了很大的安全风险

localStorage 和 sessionStorage

sessionStorage 与 localStorage 的接口类似,但保存数据的生命周期与 localStorage 不同。sessionStorage只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在。但当页面关闭后,sessionStorage 中的数据就会被清空。

使用本地存储

检测浏览器兼容情况

if (window.localStorage) {}
if (window.sessionStorage) {}

API

localStorage 和 sessionStorage 的API非常简单而且易于理解。

存储事件

监听storage事件,当存储发生变更时触发

事件是在跨页面修改时触发,不会在本页面内触发

window.addEventListener('storage', function(e) {
    console.log(e)
}, true)

调试工具的支持

使用Chrome的开发者工具,可以很方便的查看和编辑存储信息。

浏览器数据库存储

Web SQL Database

基于JavaScript异步接口访问SQLit数据库,该方案未获取浏览器厂商的一致支持,已被放弃。

IndexedDB

IndexedDB is a low-level API for client-side storage of significant amounts of structured data, including files/blobs. This API uses indexes to enable high-performance searches of this data. While Web Storage is useful for storing smaller amounts of data, it is less useful for storing larger amounts of structured data.

  • 相对与storage,用于处理大数据量场景
  • 对数据建立索引提供高性能对搜索
  • IndexedDB API
  • 基本功能已经获得浏览器对广泛支持