阿呆localforage使用手册

1,750 阅读4分钟

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

什么是LocalForage?

在现代Web应用程序中,浏览器端数据存储是一个重要的需求。LocalForage是一个简单易用的JavaScript库,它提供了一种跨浏览器的方式来进行本地数据存储。基于IndexedDB、WebSQL和localStorage等浏览器本地存储API的封装库。

l通过简单类似 localStorage API 的异步存储来改进你的 Web 应用程序的离线体验。它能存储多种类型的数据。

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

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

优势和适用场景

  • 跨浏览器支持:LocalForage封装了不同浏览器的本地存储API,使开发者能够以一致的方式进行数据存储,无需关心底层实现细节。
  • 异步操作:LocalForage提供了异步API,可以处理大量数据的存储和检索操作,而不会阻塞主线程。
  • 容量限制:LocalForage可以根据浏览器的容量限制自动选择合适的存储引擎,并提供了一致的API。。

使用LocalForage

  1. 安装和引入LocalForage: 您可以通过npm或yarn等包管理工具安装LocalForage,并在项目中引入它:

npm install localforage

javascript
复制代码import localforage from 'localforage';
  1. 存储数据: 使用setItem方法将数据存储到本地:
javascript
复制代码localforage.setItem('key', 'value')
  .then(() => {
    console.log('Data stored successfully');
  })
  .catch((error) => {
    console.error('Error storing data:', error);
  });
  1. 检索数据: 使用getItem方法从本地检索数据:
javascript
复制代码localforage.getItem('key')
  .then((value) => {
    console.log('Retrieved data:', value);
  })
  .catch((error) => {
    console.error('Error retrieving data:', error);
  });
  1. 删除数据: 使用removeItem方法从本地删除数据:
javascript
复制代码localforage.removeItem('key')
  .then(() => {
    console.log('Data removed successfully');
  })
  .catch((error) => {
    console.error('Error removing data:', error);
  });
  1. 清空数据: 使用clear方法清空所有存储的数据:
javascript
复制代码localforage.clear()
  .then(() => {
    console.log('All data cleared');
  })
  .catch((error) => {
    console.error('Error clearing data:', error);
  });

与localStorage对比

以下是一些LocalForage的特点和与LocalStorage的对比:

  1. 存储容量:LocalStorage通常具有较小的存储容量限制,通常为5MB至10MB,而LocalForage可以根据浏览器的支持情况选择不同的存储引擎,因此可以处理更大量级的数据。
  2. 异步操作:LocalForage提供了异步API,这意味着它可以处理大量数据的存储和检索操作而不会阻塞主线程。LocalStorage是同步操作,可能会导致阻塞用户界面。
  3. 数据类型支持:LocalStorage只能存储字符串类型的数据。如果要存储其他数据类型(如对象或数组),需要进行序列化和反序列化。而LocalForage可以直接存储和检索JavaScript对象、数组等复杂数据类型。
  4. 跨浏览器支持:LocalStorage在大多数现代浏览器中得到广泛支持。然而,在某些旧版本或特定环境下,可能会有一些兼容性问题。LocalForage通过封装不同浏览器的本地存储API来提供一致性和跨浏览器支持。
  5. 存储引擎选择:LocalForage可以根据浏览器的容量限制自动选择合适的存储引擎,如IndexedDB、WebSQL和localStorage。这使得LocalForage能够在不同浏览器和环境中提供一致的数据存储体验。

项目使用方案

目的:活动的每个页面用户访问每次都需要访问接口,随着业务和用户体量上升,服务器负担越来越重。靠累加服务器成本越来越高。

期望:每个用户授权后可以缓存页面配置,在活动内无需重复请求配置接口。

技术难点:

1.数据量大:低代码样式全为请求接口返回。

2.数据格式多:包含数组,对象,数字,字符串,JSON串,null,''以及后续可能的拓展的其他格式。

3.环境复杂: 。

硬件复杂:安卓,苹果,鸿蒙等其他OS。

项目配置

位置:main.js

//定义
localForage.config({
  driver: localForage.LOCALSTORAGE, // 使用localstorage作为存储引擎(存贮位置)
  name: "名称" //名称
});
//引入localForage
Vue.prototype.$local_forage = localForage;

具体实现

缓存获取配置接口

判断是否有缓存判断是否缓存全面,这里借助了Promise.all

分别判断配置缓存

 this.$util._localForageHasKey(this.$local_forage, `某个_config`)

封装hasKey代码 判断是否有某个key的配置,此代码在公共util.js中

/**
 * @param  {Promise} localforage
 * @param {String} keyName 键名
 */
export const _localForageHasKey = async (localforage, keyName) => {
  const value = await localforage.getItem(keyName);
  return value !== null;
};