SimpleIDB
痛点分析
- GM缓存方法只能存放文本数据
- 同域名跨脚本难以共享数据
- 多线程大量数据使用GM函数存取可能造成卡顿
indexedDB介绍
以下内容来自AI
IndexedDB 是一种在浏览器中运行的非关系型数据库,它允许网页应用存储大量结构化数据。这种数据库由键值对组成,可以进行高效的查找和索引。IndexedDB 提供了一种异步API,允许网页应用在不阻塞主线程的情况下进行数据库操作,这对于提升网页应用的性能和用户体验非常重要。
以下是IndexedDB的一些关键特性:
- 异步API:IndexedDB 的操作不会阻塞浏览器的主线程,这意味着即使在执行数据库操作时,用户界面也能保持响应。
- 大数据存储:IndexedDB 可以存储比传统Web存储(如LocalStorage)更多的数据,通常可以达到数GB。
- 事务管理:IndexedDB 支持事务,这意味着你可以将一系列操作作为一个整体进行提交或回滚,这对于保持数据的一致性非常重要。
- 键值对存储:IndexedDB 以对象存储的形式存储数据,每个对象存储为一个键值对,其中键用于索引和检索数据。
- 索引:IndexedDB 允许创建索引,这使得根据对象的属性快速检索数据成为可能。
- 支持二进制数据:IndexedDB 可以存储二进制数据,这对于存储图像、视频或其他大型文件非常有用。
- 浏览器支持:大多数现代浏览器都支持IndexedDB,包括Chrome、Firefox、Safari和Edge。
- 离线应用:IndexedDB 使得开发离线应用成为可能,因为数据可以存储在用户的设备上,即使没有网络连接也能访问。
IndexedDB 是构建复杂、数据密集型Web应用的重要工具,它提供了一种在客户端存储和管理大量数据的有效方式。
脚本目前虽然支持链式调用但尚未支持在链式调用的同时统一事务。因为这个库是用作某个其他项目的工具库,我看大家都没做我就干脆做一个了反正我要用。但我也得以我自己的项目为重。有时间我会继续完善功能。且开发初期本库可能更新的较为频繁。
使用说明
主类名SimpleDB,实例化一个对象代表一个DB连接。建议保留该对象,不要创建太多连接。
使用get(key),set(key,value),remove(key)进行增删改查。clear()清空全部数据,useTable('tableName')指定需要使用的数据表(类比Redis的数据库,多套一层,因为它也有自己的“dbName”)
何为链式调用?即如下用法:
return new SimpleDB()
.set('k',1)
.get('k')
.execute()
此时会返回数组:[1]。也就是说您执行了几次有返回值的执行函数,就会按顺序添加返回值元素。如果本次执行没有返回值,则会返回[]。
务必执行execute函数,否则相当于构建好命令没有发送
补个方法列表:
- useTable(storeName:可理解为表名):未指定表名用默认表名,每次execute前只能声明一次,否则后来的覆盖
- set(k,v):没啥好说的,和GM_setValue一致
- getKeys():取当前表全部key
- getNextKey():使用游标取得第一个key,目前版本只能取第一个key,后面我会让他成为名副其实的“下一个key”
- get(key):取得key对应的value
- remove(key):删除key对应的值,之后get得到undefined
- clear():清空当前表所有值
- execute():再次强调,最后必须提供这个,否则返回的是simpleDB对象自身。错误示范:
let value = get('key');
,正确示范:let value = get('key').execute()[0]
理论上IDB是进去啥类型出来啥类型,不需要转换,这也是这玩意最大的优点。
IDB不可跨域,子域名也跨不了。
你们用的时候出错,很正常,我自己在写这文档之前也没实际用过这玩意。出错及时反馈就行,我自己测好估计还得改几版。
脚本评分
还没有人来给脚本打分,快来成为第一个打分的人吧