localStorage大小限制,对于前端开发和数据存储设计很重要。下面是一个详细的表格汇总,方便你快速了解主要平台和浏览器的限制情况。
| 平台/浏览器 | 常规大小限制 (字符数/字节估算) | 备注 |
|---|---|---|
| Web浏览器 (桌面) | ||
| Chrome | 约 5MB (约 2.5M UTF-16字符) | 不同版本或情况下可能达到10MB |
| Firefox | 约 10MB (约 5M UTF-16字符) | |
| Safari | 约 5MB (约 2.5M UTF-16字符) | 有测试提到某些版本限制可能为2.5MB |
| IE | 约 10MB (约 5M UTF-16字符) | IE 9/10 测试约 7MB |
| Web浏览器 (移动) | ||
| iOS Safari | 约 5MB | |
| Android Browser | 约 2MB | |
| Chrome Mobile | 约 10MB | |
| Firefox Mobile | 约 10MB | |
| 小程序平台 | ||
| 微信小程序 | 单个 key 1MB,所有数据总上限 10MB | 数据存储生命周期与小程序本身一致 |
| 支付宝小程序 | 单条数据字符串长度最大 200KB,总上限 10MB | |
| 百度、字节跳动小程序 | 文档未明确说明大小限制 | |
| App端 (uni-app) | ||
| App端 | 无大小限制 (使用原生的 plus.storage) | 非缓存,是持久化的 |
| H5端 (uni-app) | ||
| H5端 | 约 5MB (使用浏览器的 localStorage) | 是缓存概念,可能会被清理 |
🧠 关于字符与字节的说明 表格中的限制通常指字符数(特别是UTF-16编码的字符)。JavaScript字符串使用UTF-16编码,一个字符通常占用2个字节3。因此,若浏览器声称限制为5MB,则大约可存储2.5M个字符(5 * 1024 * 1024 / 2 ≈ 2,621,440字符)。
⚡ 超出限制的后果
尝试存储超过限制的数据会抛出 QuotaExceededError 异常。务必在用 setItem 时进行错误处理。
💡 处理 localStorage 限制的建议
面对存储限制,可以考虑以下策略:
-
压缩数据:使用如
lz-string等库对存入的数据进行压缩。 -
分片存储:将大数据对象拆分,用多个键存储,并在读取时组装。
-
定期清理:设置有效机制清理不再需要的数据。
-
考虑替代方案:
- 对于结构更复杂或量更大的数据,可以考虑 IndexedDB(浏览器端),它提供异步API和更大的存储空间(通常远大于5MB)。
- 在App端(如uni-app),若需存储大量数据,也可考虑本地文件读写。
-
错误处理:在进行
setItem操作时,使用try...catch捕获可能的QuotaExceededError异常。
📌 重要提醒
- 域名隔离:
localStorage遵循同源策略(协议+主机名+端口号均相同),不同源之间的数据完全隔离,无法互相访问。 - 非永久性:
localStorage的数据不是绝对永久的。用户可能手动清除浏览器数据,或在移动设备上,浏览器或WebView中的localStorage可能因退出App、网络切换、内存不足等原因被清空。 - 清理的影响:在某些平台(如uni-app的非App平台),清除Storage可能会导致一些系统信息(如
deviceId)改变。 - 存储的是字符串:
localStorage只能存储字符串。存储对象需JSON.stringify,读取需JSON.parse。