本发明涉及数据库领域,特别涉及一种基于mvvm模式的操作indexeddb的javascript库。
背景技术:
随着公司业务的不断发展,客户数据量越来越大,某一些页面的查询会变得很慢,尤其是在做分页查询等使用率极高的操作的时候。为了缓解服务端压力并且增强用户体验,我们使用浏览器数据库缓存数据的方案解决这一问题。indexeddb作为w3c标准提案已经被许多现代化浏览器实现了。但是其本身提供的对数据库的操作及其简单,难以满足实际工作中的应用场景。
为了能将indexeddb与业务逻辑完全剥离,需满足以下要求:
简单化:对数据库和对视图的操作尽量简单,一个操作一个函数即可;
黑盒化:使用者无需关心本方案的实现,只需根据接口约定传入数据即可;
高耦合:只关心数据本身,与具体的业务逻辑完全无关;
高可用性:需要有严格的错误处理和抛出机制,力求不会出现未知错误的情况,帮助使用者快速定位问题所在。
indexeddb作为浏览器数据库能缓存大量数据,帮助改善服务端性能。但是其本身提供的api仅能针对数据做简单的查询操作,无法做出类似于模糊匹配,多条件查询的操作。
技术实现要素:
本发明的目的在于:提供了一种基于mvvm模式的操作indexeddb的javascript库,实现许多浏览器本身api无法实现或者实现困难的操作,简化了从视图数据到数据、数据再存储到数据库的操作流程,提升了开发者在日常工作中的开发效率,并且本方案还会对数据库本身事务的一些操作提供优化,使开发者无需关心与自身业务逻辑无关的代码。
本发明采用的技术方案如下:
一种基于mvvm模式的操作indexeddb的javascript库,包括初始化模块、控制模块、错误处理模块、webworker模块和mv程序模块,所述控制模块分别和初始化模块、错误处理模块、webworker模块、mv程序模块连接;
所述初始化模块用于初始化javascript库,在javascript库加载的时候运行一次,初始化模块在运行时首先检测当前环境是否支持indexeddb数据库,若支持,则通过参数新建或代开数据库,若不支持,则由错误处理模块反馈错误,然后初始化模块和控制模块通信;
所述控制模块用于统一调度除初始化模块外的其他模块并管理数据流,并在外部数据流入程序时,触发控制模块中的拦截命令,由拦截命令拦截后,mv程序模块新建视图数据监听对象,监听视图中数据的变化,并由webworker模块执行插入操作;
所述错误处理模块用于反馈错误:在操作出现错误或模块中出现错误时,由错误处理模块反馈错误到控制模块;
所述webworker模块用于javascript库与外部的消息收发,并将消息的收发情况通知控制模块,所述webworker模块还用于提供promise化的操作接口;
所述mv程序模块用于建立视图数据与内存数据的通信关系:建立视图数据监听对象,监听视图中数据的变化,获取页面传回的回调函数,建立用于修改内存数据的函数队列。mv程序模块在数据监听对象发生改变的时候通过回调函数更新页面展示。在页面数据变动即用户手动修改数据之后,需要由具体的业务代码主动调用数据和更新api以通知控制程序,再由控制程序控制webworker模块进行数据更新。
为了更好地实现本方案,进一步地,所述webworker模块包括线程通信模块和db操作模块,所述线程通信模块用于javascript库与外部的消息收发,并将消息的收发情况通知到控制模块;所述db操作模块用于提供promise化的操作接口。
为了更好地实现本方案,进一步地,所述db操作模块提供模糊匹配、多条件联查、排序和分页功能。db操作模块是对indexeddb本身api的重写,使得可以提供给用户更加便利和更加丰富的操作。
为了更好地实现本方案,进一步地,所述db操作模块中的模糊匹配通过indexeddb本身的api快速获取全部数据,然后根据用户传入的参数基于数组的filter函数实现数据的匹配。
为了更好地实现本方案,进一步地,所述db操作模块中的多条件联查,是将多个条件基于条件的顺序分解成数组,然后先根据第一个条件进行一次数据库查询得到一次查询结果,如果和后面的条件的连接词是“且”,则对一次查询结果进行二次筛选得到二次筛选结果,如果和后面的条件的连接词是“或”,则进行第二次数据库查询得到二次查询结果,直到所有的条件执行完毕,最后对所有查询结果和筛选结果进行合并去重得到最终的联查结果。
为了更好地实现本方案,进一步地,所述db操作模块中的排序是根据用户传入的参数对获取的数据使用sort函数进行排序。所述db操作模块中的分页是基于排序使用截断数组的方式进行分页。
在本方案中,主要用到indexeddb,indexeddb作为w3c标准提案已经被许多现代化浏览器实现了,但是其本身提供的对数据库的操作比较简单,难以满足实际工作中的应用场景,本方案的javascript库,包括初始化模块、控制模块、错误处理模块、webworker模块和mv程序模块,控制模块分别和初始化模块、错误处理模块、webworker模块、mv程序模块连接。主要是简化了从视图数据转化为内存数据最后存储到数据库的操作流程。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1.本发明所述的一种基于mvvm模式的操作indexeddb的javascript库,封装了indexeddb的所有api,提供简单的调用接口,加快开发效率;
2.本发明所述的一种基于mvvm模式的操作indexeddb的javascript库,整个库黑盒化封装,仅以数据与外部程序沟通,实现了与业务逻辑完全解耦;
3.本发明所述的一种基于mvvm模式的操作indexeddb的javascript库,基于浏览器多线程开发,保障在进行大量数据的同时,浏览器主线程不会因为数据量过大而造成卡顿,白屏等不利于用户交互的现象;
4.本发明所述的一种基于mvvm模式的操作indexeddb的javascript库,基于promise封装,解决了由异步回调函数造成的开发调试困难的问题。
附图说明
为了更清楚地说明本技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图,其中:
图1是本发明的结构框图。
具体实施方式
为了更清楚地说明本发明实施例的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,应当理解,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例,因此不应被看作是对保护范围的限定。基于本发明中的实施例,本领域普通技术工作人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“设置”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;也可以是直接相连,也可以是通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
下面结合图1对本发明作详细说明。
实施例1:
一种基于mvvm模式的操作indexeddb的javascript库,包括初始化模块、控制模块、错误处理模块、webworker模块和mv程序模块,所述控制模块分别和初始化模块、错误处理模块、webworker模块、mv程序模块连接;
所述初始化模块用于初始化javascript库,在javascript库加载的时候运行一次,初始化模块在运行时首先检测当前环境是否支持indexeddb数据库,若支持,则通过参数新建或代开数据库,若不支持,则由错误处理模块反馈错误,然后初始化模块和控制模块通信;
所述控制模块用于统一调度除初始化模块外的其他模块并管理数据流,并在外部数据流入程序时,触发控制模块中的拦截命令,由拦截命令拦截后,mv程序模块新建视图数据监听对象,监听视图中数据的变化,并由webworker模块执行插入操作;
所述错误处理模块用于反馈错误:在操作出现错误或模块中出现错误时,由错误处理模块反馈错误到控制模块;
所述webworker模块用于javascript库与外部的消息收发,并将消息的收发情况通知控制模块,所述webworker模块还用于提供promise化的操作接口;
所述mv程序模块用于建立视图数据与内存数据的通信关系:建立视图数据监听对象,监听视图中数据的变化,获取页面传回的回调函数,建立用于修改内存数据的函数队列。
工作原理,本系统的运行步骤为:1、在加载javascript库的时候初始化模块对javascript库进行初始化,初始化主要是检测当前环境是否支持indexeddb数据库,若支持则通过参数新建或代开数据库;
2、控制模块开始工作,当外部数据流入程序时,触发控制模块中的拦截命令;
3、webworker模块开始工作,webworker的线程通信模块接收消息后,通过db操作模块执行插入操作,并通过线程通信模块将消息通知给控制模块;
4、控制模块工作时,同时通知mv程序模块工作,mv程序模块新建视图数据监听对象,监听视图中的变化,当视图数据发生变化时,mv程序模块通知控制模块,进行第3步的操作。
实施例2:
本方案在实施例1的基础上作进一步补充,所述webworker模块包括线程通信模块和db操作模块,所述线程通信模块用于javascript库与外部的消息收发,并将消息的收发情况通知到控制模块;所述db操作模块用于提供promise化的操作接口。
所述db操作模块提供模糊匹配、多条件联查、排序和分页功能。db操作模块是对indexeddb本身api的重写,使得可以提供给用户更加便利和更加丰富的操作。
所述db操作模块中的模糊匹配通过indexeddb本身的api快速获取全部数据,然后根据用户传入的参数基于数组的filter函数实现数据的匹配。
所述db操作模块中的多条件联查,是将多个条件基于条件的顺序分解成数组,然后先根据第一个条件进行一次数据库查询得到一次查询结果,如果和后面的条件的连接词是“且”,则对一次查询结果进行二次筛选得到二次筛选结果,如果和后面的条件的连接词是“或”,则进行第二次数据库查询得到二次查询结果,直到所有的条件执行完毕,最后对所有查询结果和筛选结果进行合并去重得到最终的联查结果。
所述db操作模块中的排序是根据用户传入的参数对获取的数据使用sort函数进行排序。所述db操作模块中的分页是基于排序使用截断数组的方式进行分页。
本实施例的其他部分与上述实施例1相同,故不再赘述。
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。