浏览器数据库——IndexedDB的使用

本文介绍了前端开发中IndexedDB的作用,一种用于在浏览器中存储大量结构化数据的WebAPI,对比了Cookie和WebStorage的局限性,并详细讲解了IndexedDB的基础API、存储空间、持久性和使用示例。
摘要由CSDN通过智能技术生成

谈论到前端的数据缓存,大多数人第一想到的就是Web Storage 或 Cookie,也是开发过程中常用的。可当我们有一个缓存超大数据的时候,以上两个就完全无法帮助我们了,而此时为何不试试IndexedDB?

什么是IndexedDB?

IndexedDB(Indexed Database)是一种用于在浏览器中存储和管理结构化数据的Web API。它提供了一种持久性的客户端存储解决方案,允许Web应用程序在浏览器中存储大量的数据,以便在不同的浏览会话之间保持状态、离线使用数据以及缓存数据。

储存空间大小

IndexedDB 存储空间的大小通常在几十兆字节到几百兆字节之间,但请注意,浏览器可能会对每个域名或源设置不同的存储配额,并且用户可能会手动设置存储空间限制。

储存时间

IndexedDB 数据是持久性的,它不会随着页面关闭或浏览器重启而丢失。

IndexedDB使用

IndexedDB 是一个事务型数据库系统,类似于基于 SQL 的 RDBMS。然而,不像 RDBMS 使用固定列表,IndexedDB 是一个基于 JavaScript 的面向对象数据库。

IndexedDB 允许存储和检索用键索引的对象;可以存储结构化克隆算法支持的任何对象。只需要指定数据库模式,打开与数据库的连接,然后检索和更新一系列事务。

基础API

// 打开一个名为 "myDB" 的数据库,第一参数为名称,第二参数为版本号,没有可打开的数据库会自动创建
let request = indexedDB.open("myDB", 1);

// 当数据库创建和升级时触发 onupgradeneeded 事件
request.onupgradeneeded = function(event) {
  let db = event.target.result;
  
  // 创建一个名为 "myStore" 的对象存储空间,也可理解为创建一张表,名称,配置
  let store = db.createObjectStore("myStore", { keyPath: "id" });
  
  // 创建一个索引,用于按照姓名(name)进行检索
  // createIndex还有第三个入参,指定其他索引的选项,比如createIndex("nameIndex", "name", { unique: false });索引中允许存在重复的值(非唯一)
  store.createIndex("nameIndex", "name");
};
 
// 当数据库打开成功时触发 onsuccess 事件
request.onsuccess = function(event) {
  let db = event.target.result;
  
  // 创建一个事务,并指定要操作的对象存储空间(类似于表)
  // readonly - 增查; readwrite - 增删改查
  let transaction = db.transaction(["myStore"], "readwrite");
  
  // 获取指定名称的对象存储空间
  let store = transaction.objectStore("myStore");
  
  // 存储一条数据到对象存储空间
  // 还能执行诸如 add、put、get、delete 等操作来操作数据库中的数据。
  store.add({ id: 1, name: "John" });
  
  // 提交事务
  transaction.oncomplete = function() {
    console.log("数据已存储成功!");
  };
};

request.onerror = function(event) {
  console.error("打开数据库失败:", event.target.error);
};

// 删除数据库
indexedDB.deleteDatabase('myDB')

request.onblocked = function() {
  console.log("数据库删除操作被阻止,可能有其他连接正在使用该数据库");
};

当然根据上面所提到的各种api和变量,其实都可以封装起来,做成一个单独的hooks之类的,比如db和store都已提出去。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值