Web Storage 的存储限制按浏览器和源动态分配,通常为2.5 MB至10 MB;Chrome约5–6.5 MB,Firefox标称10 MB但按一级域名共享,Safari(iOS)低至2.5 MB且可能主动清理,Edge约5–10 MB;按UTF-16字节计算,需用Blob估算大小并捕获QuotaExceededError异常应对超限。

主流浏览器常见配额范围:
- Chrome:约 5–6.5 MB(受磁盘空间和当前 profile 使用情况影响)
- Firefox:标称 10 MB,但按一级域名共享(如 baidu.com 下所有子域共用)
- Safari(iOS):低至 2.5 MB,且空闲时可能主动清理数据
- Edge:与 Chrome 接近,约 5–10 MB
关键细节:按 UTF-16 字节计算,不是字符数
你存一个对象,先 JSON.stringify(),每个中文字符占 2 字节,引号、逗号、缩进空格也都算字节。例如:{"name":"张三","age":25} 实际占用远大于 14 个字符——JSON 序列化后是字符串,长度以字节计。
如何预估是否超限
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function estimateSize(obj) {
return new Blob([JSON.stringify(obj)]).size;
}
调用 estimateSize(myData) < 5_000_000 可提前判断是否可能超出 5MB。
超限时的表现与应对
立即学习“Java免费学习笔记(深入)”;
- 直接抛出
QuotaExceededError异常,不会静默失败 - 建议用 try/catch 包裹 setItem,并准备降级方案:压缩 JSON(
JSON.stringify(obj, null, 0))、删旧键、或切换到 IndexedDB - 避免用
localStorage.length或循环key(i)清空——大数据量下性能极差;改用命名前缀(如myapp:cache:)再精准 remove
别混淆:它和 Cookie 的 4KB 不是一类限制
Cookie 的 4KB 是 HTTP 协议对请求头大小的硬性约束,而 Web Storage 的 5MB 是浏览器为本地磁盘缓存区划出的独立配额,不参与网络传输,也不受请求频率影响。 不复杂但容易忽略。

















