1. 简介

说到本地存储数据,首先想到的是 localStorage,应该很多小伙伴都用过,使用很简单。然而,localStorage 却有下面一些缺点:

  • 存储容量限制,大部分浏览器应该最多5M。我就遇到过localStorage存储字符然后尺寸爆掉的情况;
  • 仅支持字符串,如果是存对象还需将使用 JSON.stringify 和 JSON.parse 方法互相转换,有些啰嗦;
  • 读取都是同步的。大多数情况下,还挺好使的。如果存储数据比较大,如一张重要图片base64格式存储了,再读可能会有可感知的延迟时间;

localforage 的作用就是用来规避上面 localStorage 的缺点,同时保留 localStorage 的优点而设计的。
localForage 是一个 JavaScript 库,通过简单类似 localStorage API 的 异步存储 来改进你的 Web 应用程序的离线体验。

它能存储多种类型的数据,而不仅是字符串(包括:Array、ArrayBuffer、Blob、Float32Array、Float64Array、Int8Array、Int16Array、Int32Array、Number、Object、Uint8Array、Uint8ClampedArray、Uint16Array、Uint32Array、String)。

localForage 有一个优雅降级策略,若浏览器不支持 IndexedDB 或 WebSQL,则使用 localStorage。在所有主流浏览器中都可用:Chrome,Firefox,IE 和 Safari(包括 Safari Mobile)。

localForage 提供回调 API 同时也支持 ES6 Promises API,可以自行选择。

传送门:localForage 中文文档

2. 使用方法

安装

npm i localforage

localforage npm 地址
引入

// main.js
import localForage from 'localforage';
Vue.prototype.$forage = localForage;
<template><div><button @click="forageSetVal">forageSetVal</button><button @click="forageGetVal">forageGetVal</button><button @click="forageRemoveVal">forageRemoveVal</button><ul><li v-for="item in userInfos" :key="item.name">{{item.name}} | {{item.city}}</li></ul></div>
</template><script>
export default {data() {return {userInfos:[],};},methods:{// 保存数据forageSetVal(){const userList = [{name:'张三',city:'北京',},{name:'李四',city:'南京',},{name:'王五',city:'深圳',}]/** setItem(key, value, successCallback)* 将数据保存到离线仓库。*/this.$forage.setItem('userList', userList).then((val) => {console.log('setItem',val)}).catch(err => {console.log(err)})},// 获取数据forageGetVal(){/** getItem(key, successCallback)* 从仓库中获取 key 对应的值并将结果提供给回调函数。如果 key 不存在,getItem() 将返回 null。* 当存储 undefined 时, getItem() 也会返回 null。由于 localStorage 限制,同时出于兼容性的原因 localForage 无法存储 undefined。*/this.$forage.getItem('userList').then((val) => {console.log('getItem',val)this.userInfos = val;}).catch(err => {console.log(err)});},// 从离线仓库中删除 key 对应的值forageRemoveVal(){/** removeItem(key, successCallback)* 从离线仓库中删除 key 对应的值。*/this.$forage.removeItem('userList').then(() => {console.log('removeItem');}).catch(function(err) {console.log(err);});},},
};
</script>

先触发 forageSetVal 保存数据

再触发 forageGetVal 获取数据


最后触发 forageRemoveVal 删除数据

3. localforage 和 indexDB 的区别

indexDB 为本地数据库存储,其功能非常强大,再复杂的结构存储都不在话下。localStorage 只是使用了其功能中的一部分,很多功能受限,如:localStorage 一次只能存一个字段。
indexDB几乎空间无限,性能也不错,各种数据结构都支持,为何总感觉在业内不温不火呢?
很重要的原因之一就是上手成本,包括2方面:

  • 前端需要了解数据库的一些基本概念,如:表,游标,事务,锁等。而业界普遍的前端都是与页面打交道的,数据库操作属于后端的后端了,离的有些远,于是,很多前端都不了解,需要从零开始的数据库学习;
  • indexedDB 的 API 又多又长又纷杂,学习成本高,容易记不住,网上好的资源少;

localforage 的出现可谓曲线救国,通常我们的数据存储并不需要特别复杂,只要不是完完全全的离线开发,localforage 足矣。既不浪费 indexDB 的好,又避开了 indexDB 高上手成本的坑。从这个角度看,indexDB 应该要谢谢 localforage。
当然,如果存储的数据是负责的多行多列表结构,还是老老实实花点功夫学习学习 indexDB 的使用。

Vue中 引入使用 localforage 改进本地离线存储(突破5M限制)相关推荐

  1. Uniapp/Vue中引入使用阿里图标

    一.uniapp中引入阿里图标 将图标加入购物车部分省略 1.下载阿里图标到本地,uniapp不支持symbol格式 2. 打开下载的压缩包,只需要inconfont.css ,将其放到我们的项目 s ...

  2. 梳理详细 vue中引入第三方字体图标库iconfont

    最近在项目中需要使用第三方图标库,我选择了阿里的iconfont.记录下学习过程.在网上查阅资料的时候,发现很多教程写的比较模糊,一些博主只是提供一种可实现的方式,但是并没有完全区分iconfont的 ...

  3. Vue中引入swiper插件报错:To install it, you can run: npm install --save swiper/css/swiper.css

    Vue中引入swiper插件报错:To install it, you can run: npm install --save swiper/css/swiper.css 今天在写项目的时候用到了Sw ...

  4. Vue中引入echarts的步骤,折线图、柱状图、饼图的常用配置项

    vue中引入echarts 一.安装echarts 二.引入echarts 1.全局引入 2.局部引入 三.vue中使用echarts 1.准备好函数 2.准备一个容器来放echarts 3.初始化容 ...

  5. Vue 中引入markdown富文本编辑器并根据md格式渲染

    Vue 中引入markdown富文本编辑器 在vue组件中,比较好用的是mavon-editor,github文档地址 https://github.com/hinesboy/mavonEditor ...

  6. Vue中引入并使用动态图标

    Vue中引入并使用动态图标 1.安装依赖 2.在Vue项main.js中引入 3.经过以上操作,已经实现全局引入,在任何地方直接使用即可. 本次选用Font-awesome-animation 1.安 ...

  7. vue中引入高德js

    项目概述: 通过在vue中引入高德js,实现地图的加载呈现,以及在地图中实现设备坐标定位,并在设备列表点击的同时进行定位点的切换和地图视图的切换,在点击坐标点的时候可以弹出相关介绍信息. 第一步:在i ...

  8. 在vue中引入外部的css文件

    在vue中引入外部的css文件 在项目的src文件下,新建一个style文件夹,存放css文件. 1. 全局引入 将外部的css文件放到style文件下,引入外部文件只需在main.js文件中 imp ...

  9. vue中引入全年日历插件calendar.js

    针对依赖amazeui的全年日历插件在vue项目中的问题 cnpm i jquery cnpm i amazeui 在当前vue中引入jquery .amazeui及相关css或这全局引入(看其他是否 ...

最新文章

  1. TCP/IP详解学习笔记(9)-TCP协议概述
  2. 回溯经典(指定位置N皇后问题)
  3. Python–新一代编程语言
  4. strcpy和memcpy的区别?
  5. FileSystemObject (FSO)对象方法总结及应用
  6. Hello Indigo
  7. 打分现场流程策划及排练大致流程-仅参考
  8. PrefTest性能测试解决方案 -- C/S结构应用系统的压力测试
  9. vue仿微博评论回复_vue-微博评论
  10. 架构真经 | 那些年,我们踩过的缓存坑
  11. PPT~PPT修改行间距磅值
  12. 根据仿人人客户端教程,编程实现Demo
  13. html5摄像头手势识别,基于OpenCV的摄像头动态手势轨迹识别及其应用
  14. Nginx网站服务与LNMP架构部署(详解)
  15. React 入门教程【官网文档中文版】
  16. 如何建立ODBC数据源
  17. 旅途——Python流程控制
  18. IDempiere 富文本编辑器优化
  19. 第5次作业+037+吴烨倩
  20. 【资料】wod地城掉落

热门文章

  1. 计算机游戏的利与弊议论文,电脑游戏的利与弊800字作文
  2. 2019年同济大学计算机夏令营游记
  3. Java 全角、半角特殊符号转换
  4. springboot layuiAdmin实现分页
  5. 转:Qt编译 error: ‘std::tr1’ has not been declared
  6. 【调剂】澳门科技大学空间大数据硕士接收调剂研究生
  7. 大数据在职研究生哪个好_大数据在职研究生好考程度与学习方式有关联吗
  8. UFS Compliance测试夹具
  9. 2020年,最全4k , 8k的高清壁纸网站分享
  10. 【2023最新】Nodejs + Webstorm安装教程