Web:浏览器 LocalStorage 缓存存储 5M 限制

当使用 localStorage 时,浏览器对每个域的存储限制通常是 5MB 左右(不同浏览器可能略有差异)。
当超过限制时,会抛出 QuotaExceededError 错误。

突破 5MB 限制的替代方案

1、使用 IndexedDB

IndexedDB 是浏览器内置的异步数据库,存储容量通常为 250MB 以上(具体取决于浏览器和用户设置)。

const request = indexedDB.open('myDatabase', 1);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  const store = db.createObjectStore('dataStore', { keyPath: 'id' });
};

request.onsuccess = (event) => {
  const db = event.target.result;
  const transaction = db.transaction('dataStore', 'readwrite');
  const store = transaction.objectStore('dataStore');
  
  // 存储数据
  store.put({ id: 'largeData', value: largeData });
};

2. 使用 Web Storage API 的扩展(如 localForage)👍推荐

引用

引用非常简单,只需要引入 js 文件即可直接使用

<script src="localforage/dist/localforage.js"></script>
<script>localforage.getItem('something', myCallback);</script>

存储

// 通过 localForage 存储大数据
localforage.setItem('largeData', bigData).then(() => {
  console.log('Data saved!');
});

// localForage 同样支持回调函数
localforage.setItem('key', 'value', doSomethingElse);

获取

localforage.getItem('somekey').then(function(value) {
    // 当离线仓库中的值被载入时,此处代码运行
    console.log(value);
}).catch(function(err) {
    // 当出错时,此处代码运行
    console.log(err);
});

// 回调版本:
localforage.getItem('somekey', function(err, value) {
    // 当离线仓库中的值被载入时,此处代码运行
    console.log(value);
});

移除

localforage.removeItem('somekey').then(function() {
    // 当值被移除后,此处代码运行
    console.log('Key is cleared!');
}).catch(function(err) {
    // 当出错时,此处代码运行
    console.log(err);
});

3、其它方案

  • 数据压缩
  • 清理不必要的数据
  • 分片存储(Sharding)
  • 利用浏览器缓存(Cache API)
  • 终极方案:服务端存储
最后修改:2025 年 05 月 01 日 09 : 59 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论