首页 > 数据库 >IndexedDB:前端存储新宠,数据库的“特种兵”

IndexedDB:前端存储新宠,数据库的“特种兵”

时间:2024-12-24 11:54:19浏览次数:3  
标签:IndexedDB transaction const database 数据库 request 新宠 特种兵

indexedDB是不可靠存储,会在c盘空间不足时,自动清空,极易丢失数据。

web的离线功能,就是能存一些数据,包括图片到本地,等可以上网的时候再把这些数据更新到服务器的数据库。

IndexedDB 具有以下特点

  1. IndexedDB 数据库是存储键值对的非关系型数据库。 IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括 JavaScript 对象(不用像localStorage等需要存入json字符串)。库中,数据都是以"键值对"的形式保存,每一个数据记录都有对应的主键,主键是独一无二的,不能有重复,否则会抛出一个错误。
  2. IndexedDB API主要是异步的。 IndexedDB 操作时不会锁死浏览器,用户依然可以进行其他操作,这与 LocalStorage 形成对比,后者的操作是同步的。异步设计是为了防止大量数据的读写,拖慢网页的表现。
  3. IndexedDB 构建在事务数据库模型上。 IndexedDB 支持事务(transaction),这意味着一系列操作步骤之中,只要有一步失败,整个事务就都取消,数据库回滚到事务发生之前的状态,不存在只改写一部分数据的情况。
  4. 同源限制 IndexedDB 受到同源限制,每一个数据库对应创建它的域名。网页只能访问自身域名下的数据库,而不能访问跨域的数据库和跨浏览器访问。
  5. 储存空间大 IndexedDB 的储存空间比 LocalStorage 大得多,通常限制在 50MB 到 250MB,具体取决于浏览器和用户设置。
  6. 支持二进制储存。 IndexedDB 不仅可以储存字符串,还可以储存二进制数据(ArrayBuffer 对象和 Blob 对象)。

IndexedDB 虽好但是用法没有LocalStorage 简单,我们先来看下步骤与写法。

const database = {
  name: 'myDatabase',
  version: 1,
  request: null,
};

// 打开数据库的请求
database.request = indexedDB.open(database.name, database.version);

// 监听数据库打开事件
database.request.onerror = (event) => {
  console.error('Database error:', event.target.error);
};
// 监听数据库成功打开事件
database.request.onsuccess = (event) => {
  console.log('打开数据库');
  database.db = event.target.result;
  // 你可以在这里执行其他操作,比如读取数据
  readData();
};

function addData() {
  // 确保数据库已打开
  if (!database.db) {
    console.log('数据库暂未打开');
    return;
  }

  // 打开一个事务来添加数据
  const transaction = database.db.transaction(['products'], 'readwrite');
  const objectStore = transaction.objectStore('products');

  // 添加数据到对象仓库
  const product = {
    id: '2',
    name: 'Product 1',
    price: 100,
  };

  const request.onsuccess和rqu = objectStore.add(product);
  // request.onsuccess和request.onerror 处理成功失败事件
}
function readData() {
  // 确保数据库已打开
  if (!database.db) {
    console.log('数据库暂未打开');
    return;
  }

  // 打开一个事务来读取数据
  const transaction = database.db.transaction(['products'], 'readonly');
  const objectStore = transaction.objectStore('products');
  objectStore.openCursor().onsuccess = (event) => {
    var cursor = event.target.result
    if (cursor) {
      console.log('ID: ', cursor.value)
      cursor.continue()
    }
  }
  const request = objectStore.get('3');

  transaction.oncomplete = function (event) {
    console.log('Transaction completed');
    // 这里可以执行一些事务完成后的清理工作
  };
}

缺点

  • 获取objectStrore去实现数据的存储和调用太麻烦了
  • 并且还是异步的

IndexedDB API 是强大的,但对于简单的情况可能看起来太复杂。如果你更喜欢一个简单的 API,请尝试 localForagedexie.jsPouchDBidbidb-keyvalJsStore 或者 lovefield 之类的库,这些库使 IndexedDB 对我们来说更加友好。
● 如果你的数据复杂且量大,IndexedDB 是不二之选。
● 如果你怕麻烦,直接用 上方提到的三方库(开发效率 +1)。
● 如果只是存个颜色偏好啥的,用 localStorage 够了。

标签:IndexedDB,transaction,const,database,数据库,request,新宠,特种兵
From: https://www.cnblogs.com/Huskie-/p/18627089

相关文章

  • 前端本地存储指南:从 localStorage 到 IndexedDB,技术优缺点与示例代码
    作为一名前端程序员,总会面临一个问题:“用户的数据该往哪里放?”这就好比一个咖啡店老板,想着咖啡豆要放仓库、柜台还是直接丢客户兜里。今天我们就来聊聊前端常用的本地存储技术,各自的优缺点,以及到底该选哪一个!1.localStorage—傻白甜的代名词localStorage是前端开发者最......
  • UniApp 使用 IndexedDB
    UniApp支持IndexedDB。UniApp是一个使用Vue.js开发所有前端应用的框架,它允许你编写一次代码,然后发布到多个平台,包括Web、iOS、Android、微信小程序等。在UniApp中使用IndexedDB的方式与在普通的Web应用中使用IndexedDB的方式相同。你可以直接使用原生的IndexedDB......
  • js 如何操作IndexedDB 存储
    IndexedDB是一种在用户浏览器中存储大量结构化数据的方式。它是一个低级API,用于在客户端存储大量数据,并使用索引来进行高性能搜索。以下是如何在前端JavaScript中使用IndexedDB的基本步骤:1.打开数据库首先,你需要打开一个数据库。如果数据库不存在,它会自动创建。letdb;......
  • 先不要管indexedDB的部分,这个模块我只想提供三个方法, 1、put(key, strValue) 2、get(k
    明白了,如果这个模块只需要提供三个简单的方法put(key,strValue)、get(key)和remove(key),可以按照以下的方式实现:代码实现:importReact,{useState,useEffect}from'react';//提供三个方法用于对IndexedDB进行基本操作constIndexedDB=()=>{//put方法:将数......
  • indexedDB的具体使用方法
    IndexedDB简介IndexedDB是浏览器提供的一种本地存储解决方案,用于存储大量的结构化数据。它支持异步操作,允许你存储对象、数组、甚至是二进制数据,并为它们提供索引以提高查询效率。它的设计目的是用于处理大规模数据存储,适合离线应用和大数据处理。IndexedDB的特点存储大数据:......
  • 介绍一下IndexedDB以及封装IndexedDB的模块代码
    IndexedDB简介IndexedDB是一种浏览器内置的低层次的API,用于在客户端存储大量结构化数据。它是一个浏览器端的数据库,允许你存储各种类型的对象,包括文件、二进制数据等,并通过键值对的方式进行快速查询。与WebStorage(如localStorage和sessionStorage)不同,IndexedDB可以存储......
  • 介绍一下IndexedDB以及封装IndexedDB的模块代码
    1.IndexedDB简介IndexedDB是一种在浏览器中存储结构化数据的方式,类似于关系数据库,但它具有更高的存储容量和灵活性。相比于localStorage,IndexedDB适合存储大量数据,能够处理更复杂的数据结构,并且支持异步操作。它是浏览器端持久化存储的一种常用方式。IndexedDB的特点:异步:I......
  • DiT(Diffusion Transformer)详解——AIGC时代的新宠儿
    扩散模型​相关知识点参考:小白也能读懂的AIGC扩散(Diffusion)模型系列讲解文章目录论文定义架构与传统(U-Net)扩散模型区别架构噪声调度策略与传统扩散的相同输入图像的Patch化(Patchify)和位置编码Patch化位置编码DiTBlock模块详细信息上下文条件化交叉注意力模块ada......
  • IndexedDB
    IndexedDB简介MDN官网是这样解释IndexedDB的:IndexedDB是一种底层API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该API使用索引实现对数据的高性能搜索。虽然WebStorage在存储较少量的数据很有用,但对于存储更大量的结构化数据来说力不从心。而I......
  • 气膜场馆为何成为现代场馆建设新宠—轻空间
    在场馆建设领域,气膜场馆凭借其独特的技术优势和高效的实用性,迅速赢得市场青睐。无论是体育赛事、文化活动还是工业应用,气膜场馆都能以其独有的特点满足多样化需求。无梁无柱设计:营造开阔空间气膜场馆采用无梁无柱结构,内部空间极为开阔。这种设计突破了传统建筑的空间限制,实现......