【前端面试】浏览器:持久化技术

117 阅读2分钟

博客:pionpill

浏览器持久化技术,包括:cookie,sessionStorage,localStorage。还有一种较为前卫的 indexDB。这些技术方案的特点如下:

特征cookiesessionStoragelocalStorageindexedDB
来源一般由服务端生成浏览器存储浏览器存储浏览器存储
有效期持有有效,但存在过期时间仅当前会话(页面)有效始终有效始终有效
数据大小4K5M5M无限制
服务器通信携带在请求的 header 中不参与不参与不参与
主要用途身份验证会话存储本地持久化大数据本地持久化

cookie

cookie 有一个重要特性:每次请求都存被存储在 header 中,因此它常用户存储用户状态,进行一些鉴权操作。他有过期时间,比如自动登录功能就可以根据 cookie 中的信息来判断。

cookie 理论上也可以存储一些配置信息,例如主题偏好,搜索历史。但由于 cookie 最多存储 4KB 数据,因此这些非关键数据应该优先考虑 localStorage。

由于 cookie 会存储鉴权相关的信息,如果是 http 请求,这些身份相关的信息很可能被捕获并解析出来。

localStorage/sessionStorage

localStorage/sessionStorage 都是数据持久化技术,唯一的不同是 sessionStorage 只在当前对话有效,localStorage 则会对数据进行持久化,存到用户本地电脑中。

sessionStorage 存储会话相关的临时数据:表单数据,用户状态,临时操作历史等。 localStorage 存储持久化数据:用户偏好,搜索历史,离线数据。

indexedDB

indexedDB 从名字就知道是数据库,它是一种非关系型数据库(NoSQL),有如下特点:

  • 使用键值对存储数据
  • 支持异步操作,相对的 localStorage 是同步操作。
  • 支持事务,一系列操作中只要一个步骤失败,就回退到之前的状态。
  • 受同源策略影响,不能访问跨域数据库(localStorage 也受到同源策略影响)
  • 可以存储二进制对象
  • 理论上没有存储上限(受用户硬盘大小限制)

emm,看起来像浏览器自带的 mongoDB?

// 打开一个数据库,两个参数分别表示:数据库名,版本
const db = globalThis.indexedDB.open('db1', 1)

具体操作不演示了。可以参考这篇文章