关于前端IndexedDB的使用且和Cookie、Web Storage 的区别

19 篇文章 0 订阅
本文探讨了IndexedDB与Cookie、Web Storage在数据存储上的差异,强调IndexedDB的大容量、对象存储优势及原生API的复杂性。通过升级数据库版本和实际操作演示了IndexedDB的使用和特点。
摘要由CSDN通过智能技术生成
// 打开了名为 pku 的数据库,如果不存在,浏览器会自动创建
			const request = window.indexedDB.open('pku');
			var db; // 全局 IndexedDB 数据库实例
			// 在版本改变时触发 首次连接数据库时,版本从 0 变成 1,因此也会触发,且先于 onsuccess
			request.onupgradeneeded = function(event) {
				db = event.target.result;
				console.log('version change');
				if (!db.objectStoreNames.contains('student')) {
					db.createObjectStore('student', {
						keyPath: 'id', // 主键
						autoIncrement: true // 自增
					});
					
					
				}else{
					console.log(db)
				}
			};
			// 在连接成功后触发
			request.onsuccess = function(event) {
				db = request.result;
				
				// 异步事件  
				const adding = db.transaction(['student'], 'readwrite') // 创建事务
					.objectStore('student') // 指定 student 表
					// 添加数据
					.add({name: 'HSH',age: 27});
				// 添加成功的返回
				adding.onsuccess = function(event) {
					console.log('write success');
				};
				// 添加失败的返回
				adding.onerror = function(event) {
					console.log('write failed');
				}
				// 如果要获取数据,需要一个 readonly 的 Transaction
				const requestss = db.transaction('student', 'readonly')
				  .objectStore('student')
				  .get(1); // 获取 id 为 2 的数据
				// 获取的返回
				requestss.onsuccess = function (event) {
				  console.log(event.target.result) // { id: 2, name: 'elaine', age: 23 }
				}
			};
			// 在连接失败时触发
			request.onblocked = function(event) {
				console.log('db request blocked!')
			}
			// 在连接被阻止的时候触发,比如打开版本低于当前存在的版本
			request.onerror = function(event) {
				console.log('error!');
			};
  • Cookie

    • 能被服务器指定,浏览器会自动在请求中带上

    • 大小只有 4kb

    • 大规模应用于广告商定位用户

    • 配合 session 也是一个可行的登录鉴权方案

  • Web Storage

    • 大小有 10MB,使用极其简单

    • 但是只能存字符串,需要转义才能存 JS 对象

    • 大部分情况下能完全替代 Cookie,且更安全

    • 配合 token 可以实现更安全的登录鉴权

  • IndexedDB

    • 储存空间无上限,功能极其强大

    • 原生支持 JS 对象,能更好的储存数据

    • 以数据库的形式储存数据,数据管理更规范

    • 但是,原生 API 操作很繁琐,且有一定使用门槛

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值