今天来聊聊浏览器的四大存储方式,LocalStorage、SessionStorage、Cookies以及IndexedDB
不同特点
LocalStorage:
持久存储,在页面/浏览器关闭后数据仍然存在
每个域名下存储空间为 5MB
只支持字符串类型的键值对
受同源策略限制,无法跨域访问
SessionStorage:
会话存储,在页面/浏览器关闭后数据会被清除
每个域名下存储空间为 5MB
只支持字符串类型的键值对
受同源策略限制,无法跨域访问
Cookies:
小容量存储,单个 cookie 大小不超过 4KB
会随每次 HTTP 请求发送到服务器
可设置过期时间和作用域
只支持字符串类型的键值对
IndexedDB:
大容量 NoSQL 数据库,没有固定存储上限
支持复杂的数据结构,如数组和对象
需要通过复杂的 API 进行操作
受同源策略限制,无法跨域访问
共同点
这四种存储方式都是基于 Web 技术实现的客户端数据存储方案
存储位置:
它们都是在客户端(浏览器)中进行数据存储,而非服务器端。
键值对结构:
除了 IndexedDB,其他三种方式(LocalStorage、SessionStorage、Cookies)都采用键值对的形式来存储数据。
数据隔离:
数据存储在不同的域名或路径下是相互隔离的,互不干扰。
异步操作:
除了 Cookies 会随请求发送到服务器,其他三种方式都是在客户端异步操作的。
容量限制:
除了 IndexedDB 没有固定上限,其他三种方式都有一定的存储容量限制。
数据持久性:
LocalStorage 和 IndexedDB 的数据是持久存储的,除非主动删除;而 SessionStorage 和 Cookies 则有生命周期限制。
区别
主要区别如下:
数据生命周期:
LocalStorage 和 IndexedDB 数据是持久存储的,除非主动清除。
SessionStorage 数据在会话结束(如页面关闭)时会被清除。
Cookies 可以设置过期时间,过期后会被浏览器删除。
数据大小限制:
LocalStorage 和 SessionStorage 每个域名下的存储容量通常为 5MB。
Cookies 容量较小,通常不超过 4KB。
IndexedDB 没有固定的存储上限。
传输机制:
Cookies 会随每次 HTTP 请求发送到服务器,其他三种方式不会。
数据结构:
LocalStorage、SessionStorage 和 Cookies 只支持字符串类型的键值对。
IndexedDB 支持更复杂的数据结构,如数组和对象。
操作复杂度:
LocalStorage、SessionStorage 和 Cookies 使用简单,可通过 JavaScript 直接操作。
IndexedDB 需要通过复杂的 API 进行各种数据库操作,使用起来较为复杂。
跨域限制:
LocalStorage 和 SessionStorage 受同源策略限制,无法跨域访问。
Cookies 可以设置作用域,限制其在特定路径或域名下可用。
IndexedDB 也受同源策略限制