localStorage容量太小?使用localforage进行大容量的存储
admin
2024-01-21 11:24:40
0

localStorage是前端存储数据的一种方式,,但是其容量一般在5M-10M左右,用来缓存一些间的数据基本够用,但毕竟定位也不是大数据量的存储

浏览器其实有提供大数据量的本地存储的,比如: IndexedDB,IndexDB存储数据大小一般在250M以上,弥补了localStorage容量的缺陷,我们可以通过localforage来进行大数据量的本地存储,使用起来也很方便,其中的API和localStorage基本类似,几乎没有学习成本

1. 简述 

npm官方:https://www.npmjs.com/package/localforage 

localforage中文文档:https://localforage.docschina.org/#api-config 

localforage 拥有类似 localStorage API,使用也很方便,几乎没有学习成本,它能存储多种类型的数据如 Array、 ArrayBuffer、 Blob、 Number、 Object、 String,而不仅仅是字符串。

这意味着我们可以直接存 对象、数组类型的数据避免了 JSON.stringify 转换数据的一些问题。

存储其他数据类型时需要转换成上边对应的类型,比如vue3中使用 reactive 定义的数据需要使用toRaw 转换成原始数据进行保存, ref 则直接保存 xxx.value 数据即可。

2. 安装 

npm i localforage
or
pnpm add localforage

3. 使用 

提供了与 localStorage 相同的api,不同的是它是异步的调用返回一个 Promise 对象 

可以按需引入,也可以引入之后挂载到全局使用 

import localforage from 'localforage'

① 存储数据 

 方式一:异步调用返回Promise(then)

localforage.setItem(key, value).then(val => {console.log(val, '存储成功')
}).catch(e => {console.error(e, '出错')
})

方式二:回调版本

localforage.setItem(key, value, (err, val) => {if(!err) {console.log(val, '存储成功')} else {console.log(err, '出错')}
})

方式三:可以使用 async/await 的方式

try {let val = await localforage.setItem(key, value)
} catch(e) {console.log(e, '出错')
}

② 获取数据 

 同样的也是和上面方式差不多,将setItem 换成 getItem就可以了

// 根据数据的 key 获取数据 没有则返回 null
localforage.getItem(key).then(value => {// 当离线仓库中的值被载入时,此处代码运行obj.value = value  // value就是取出来的值
}).catch(err => {console.error(err, '取值出错')
})// 回调版本:
localforage.getItem(key, (err, value) => {// 当离线仓库中的值被载入时,此处代码运行if(!err) {obj.value = value  // value就是取出来的值}
})

③ 删除数据 

 也是同样的

localforage.removeItem('obj').then(() => {console.log('删除成功');
}).catch(err => {console.error(err, '删除失败')
})// 回调版本:
localforage.removeItem('obj', (err) => {if(!err) {console.log('删除成功')} else {console.error(err, '删除失败')}
})

④  其他方法

  • length 获取key的数量
  • key 根据key的索引获取其名
  • keys 获取数据仓库中所有的key
  • iterate 迭代数据仓库中的所有的 value/key 键值对

4. 配置 

localforage.config({ name: 'My-localStorage' }); 设置仓库的名字,不同的名字代表不同的仓库,当一个应用需要多个本地仓库隔离数据的时候就很有用。 

const store = localforage.createInstance({name: "nameHere"
});const otherStore = localforage.createInstance({name: "otherName"
});// 设置某个数据仓库 key 的值不会影响到另一个数据仓库
store.setItem("key", "value");
otherStore.setItem("key", "value2");

同时也支持删除仓库 

// 调用时,若不传参,将删除当前实例的 “数据仓库” 。
localforage.dropInstance().then(function() {console.log('Dropped the store of the current instance').
});// 调用时,若参数为一个指定了 name 和 storeName 属性的对象,会删除指定的 “数据仓库”。
localforage.dropInstance({name: "otherName",storeName: "otherStore"
}).then(function() {console.log('Dropped otherStore').
});// 调用时,若参数为一个仅指定了 name 属性的对象,将删除指定的 “数据库”(及其所有数据仓库)。
localforage.dropInstance({name: "otherName"
}).then(function() {console.log('Dropped otherName database').
});

除了本文介绍的localforage外还有idb-keyval(idb-keyval是用IndexedDB实现的一个超级简单的基于 promise 的键值存储。)等库也是可以的

但是我更喜欢本文的 localforage 毕竟学习成本更低一些,跟localStorage中的API 很是类似。

 学习于:https://juejin.cn/post/7163075131261059086

相关内容

热门资讯

怎么写软文 怎么写软文多看书,多看报,多看小说多看动漫,多看电视节目(相关),最重要的一点——多写!根据人的心理...
韶关北江监狱大概有多少个人 韶关北江监狱大概有多少个人 大概有七千五百人。韶关北江监狱有十五个监区,按照规定,监狱的监区可按...
红袖添香网上面的短篇小说和长篇... 红袖添香网上面的短篇小说和长篇小说的字数要求是什么呢?请说的详细一点,谢谢。还有,在红袖上发表小说好...
教育学原理的同学们吗 教育学原理的同学们吗1、现在恐怕晚了,大部分学校已经完成一次调剂筛选工作了,但也可能有机会,够了二区...
李乐衡爸爸是谁 李乐衡爸爸是谁 李乐衡爸爸是张建新。李乐衡是《武林外传》中邱小冬的扮演者,他是著名演员张建新的儿...
女主姓凤,女尊紫眸有风,火,木... 女主姓凤,女尊紫眸有风,火,木三星种异能特工傻后、女主天下、绝代凤华、倾世皇妃、歌尽桃花
盗墓笔记电视剧出藏海花了吗 盗墓笔记电视剧出藏海花了吗没有吧,只有沙海和盗墓笔记。没有 藏海花很久很久之前断更了 恐怕不会被拍成...
苏柏斗的介绍 苏柏斗的介绍 苏柏斗,生于1971年,1997年毕业于解放军艺术学院美术系;2008年毕业于中国艺术...
一切法无我。得成于忍。不取于相... 一切法无我。得成于忍。不取于相。如如不动。是什么意思?你若不动,别人也动。一切皆空,存在是一种相,色...
男人会在夜晚想念暗恋的人吗? 男人会在夜晚想念暗恋的人吗?当然会啦,如果喜欢一个人的话日思梦想都会有的,有时候睡不着吃不下饭,满脑...
推理(墓地死者) 推理(墓地死者)有个人 接到一封信 信上让他半夜12点去 墓地 结果 那个人去了墓地,第2天就死在墓...
十诫诗在仓央嘉措的哪本书里 十诫诗在仓央嘉措的哪本书里不能说是仓央嘉措的哪本书,这本来是藏文,被宇道泉译成中文后才成诗,而且所谓...
失眠是怎么回事 失眠是怎么回事我周岁12岁,刚上初一,累了一天后,为什么睡着后在床上反过来折过去的翻身还老是醒睡眠的...
慕容复要复哪个燕国 慕容复要复哪个燕国 慕容复要复东晋时我国北方出现的多个燕国其中一个。慕容氏是鲜卑姓氏,而鲜卑人是...
誓约用英语怎么说 誓约用英语怎么说誓约用英语怎么说promise1.a vow; a pledge; an oath;...
4399皮卡堂过家家收铜色藏宝... 4399皮卡堂过家家收铜色藏宝图,我拿2金色藏宝图换5个铜色藏宝图,或500收一个4399皮卡堂过家...
排骨一般炖多长时间最好,及做法 排骨一般炖多长时间最好,及做法排骨汤做法大火炖开,中小火炖40 - 50分钟为宜,时间过长,营养损...
贝克汉姆一共写过几本书,都叫什... 贝克汉姆一共写过几本书,都叫什么名字还有日期,越详细越好你们说的都不对!!小贝的第一本自传是《我的天...
黑曜石灵摆消磁的问题 黑曜石灵摆消磁的问题有个100克的晶簇,要消磁多久?还有,用矿泉水的话是那种矿泉水,市面上买的农夫山...
每当夜幕降临,八角楼上的灯光就... 每当夜幕降临,八角楼上的灯光就亮了起来。缩句答案‘每当夜幕降临,八角楼上的灯光就亮了起来。(缩句)灯...