【浏览器】端数据库存储方案----indexDB、localForage

localStorage

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

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

localforage

官网文档

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

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

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

使用

npm install localforage
-----------------
import localforage from "localforage";
localforage.config({
  name: 'db_name'
});

Vue.prototype.$localForage = localforage;

// 存储数据
let res = {
    data: {
        username: 'wahaha'
    }
}
this.$forage.setItem('userInfo', res.data).then(() => {
     // 当值被存储后,可执行其他操作
}).catch(err => {
    // 当出错时,此处代码运行
    console.log(err)
})
 
// 获取数据
this.$forage.getItem('userInfo').then((val) => {
     // 获取到值后,可执行其他操作
     console.log(value)
}).catch(err => {
    // 当出错时,此处代码运行
    console.log(err)


在这里插入图片描述

IndexDB

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要向浏览器IndexedDB 存储数据,可以使用以下步骤: 1. 打开 IndexedDB 数据库:使用 `window.indexedDB.open()` 方法打开一个数据库,如果数据库不存在,则会创建一个新的数据库。例如: ```javascript let request = window.indexedDB.open('myDatabase', 1); ``` 2. 创建对象存储空间:使用 `IDBDatabase.createObjectStore()` 方法创建一个对象存储空间,可以在其中存储数据。例如: ```javascript request.onupgradeneeded = function(event) { let db = event.target.result; let objectStore = db.createObjectStore('myObjectStore', { keyPath: 'id' }); objectStore.createIndex('name', 'name', { unique: false }); }; ``` 3. 存储数据:使用 `IDBObjectStore.put()` 方法向对象存储空间中存储数据。例如: ```javascript let transaction = db.transaction(['myObjectStore'], 'readwrite'); let objectStore = transaction.objectStore('myObjectStore'); let data = { id: 1, name: 'John Doe', age: 30 }; let request = objectStore.put(data); ``` 要从 IndexedDB 中获取数据,可以使用以下步骤: 1. 打开 IndexedDB 数据库:同样使用 `window.indexedDB.open()` 方法打开数据库。例如: ```javascript let request = window.indexedDB.open('myDatabase', 1); ``` 2. 获取对象存储空间:使用 `IDBTransaction.objectStore()` 方法获取对象存储空间。例如: ```javascript let transaction = db.transaction(['myObjectStore'], 'readonly'); let objectStore = transaction.objectStore('myObjectStore'); ``` 3. 获取数据:使用 `IDBObjectStore.get()` 方法从对象存储空间中获取数据。例如: ```javascript let request = objectStore.get(1); request.onsuccess = function(event) { let data = event.target.result; console.log(data); }; ``` 以上就是向 IndexedDB 存储数据和获取数据的基本步骤。需要注意的是,IndexedDB 是异步的,需要使用回调函数来处理操作结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值