localStorage 在不同平台和浏览器中的大小限制

345 阅读3分钟

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 限制的建议

面对存储限制,可以考虑以下策略:

  1. 压缩数据:使用如 lz-string 等库对存入的数据进行压缩。

  2. 分片存储:将大数据对象拆分,用多个键存储,并在读取时组装。

  3. 定期清理:设置有效机制清理不再需要的数据。

  4. 考虑替代方案

    • 对于结构更复杂或量更大的数据,可以考虑 IndexedDB(浏览器端),它提供异步API和更大的存储空间(通常远大于5MB)。
    • 在App端(如uni-app),若需存储大量数据,也可考虑本地文件读写。
  5. 错误处理:在进行 setItem 操作时,使用 try...catch 捕获可能的 QuotaExceededError 异常。

📌 重要提醒

  • 域名隔离localStorage 遵循同源策略(协议+主机名+端口号均相同),不同源之间的数据完全隔离,无法互相访问。
  • 非永久性localStorage 的数据不是绝对永久的。用户可能手动清除浏览器数据,或在移动设备上,浏览器或WebView中的 localStorage 可能因退出App、网络切换、内存不足等原因被清空。
  • 清理的影响:在某些平台(如uni-app的非App平台),清除Storage可能会导致一些系统信息(如deviceId)改变。
  • 存储的是字符串localStorage 只能存储字符串。存储对象需 JSON.stringify,读取需 JSON.parse