vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue使用localforage改进本地离线存储

Vue引入使用localforage改进本地离线存储方式(突破5M限制)

作者:明天也要努力

这篇文章主要介绍了Vue引入使用localforage改进本地离线存储方式(突破5M限制),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. 简介

说到本地存储数据,首先想到的是 localStorage,应该很多小伙伴都用过,使用很简单。

然而,localStorage 却有下面一些缺点:

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方面:

localforage 的出现可谓 曲 线 救 国,通常我们的数据存储并不需要特别复杂,只要不是完完全全的离线开发,localforage 足矣。

既不浪费 indexDB 的好,又避开了 indexDB 高上手成本的坑。

从这个角度看,indexDB 应该要谢谢 localforage。

当然,如果存储的数据是负责的多行多列表结构,还是老老实实花点功夫学习学习 indexDB 的使用。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文