一种开关系统及开关模式实现方法与流程

文档序号:11154677阅读:379来源:国知局
一种开关系统及开关模式实现方法与制造工艺



背景技术:

随着网络技术的不断发展,人们使用网页越来越频繁,对网页的要求也越来越高,为了满足网站的业务发展需求,网页提供的文本、图像、视频等信息,以及交互式服务内容需要不断更新,由此导致网页提供的服务内容日益复杂,因此,前端开发代码的高可维护性和可扩展性成为迫切需要解决的问题。JavaScript是一门广泛用于客户端的脚本语言,被世界上的绝大多数网站采用,也得到主流浏览器支持,例如Chrome、IE、FireFox、Safari和Opera。由于JavaScript是单线程语言,异步的编程模式让JavaScript代码变得很冗余而且难以维护,在大型应用中还要兼容复杂的判断逻辑,让JavaScript的代码更加难以维护和扩展。例如,在网络视频直播的某些业务中,用户必须登录服务器验证成功并获得授权后,才能正常运行这些业务中的逻辑函数,目前前端的方法是在初始化的时候业务先发送请求到服务器,待服务器响应正确的授权信息后再开始执行逻辑函数,按照JavaScript的基本语法必须使用异步的方式编写代码,逻辑函数必须在请求成功后的回调函数里被调用,代码耦合很深。如果业务需求发生变化,例如,发送用户的弹幕数据时,服务器响应正确的授权信息后还需要等待文档对象模型DOM(Document Object Model)的延时操作时,则需要对现有的JavaScript代码进行大幅修改,造成代码的可维护性和可扩展性较差,网页的开发和维护效率低,成本高,对网站的业务造成不良影响,网页更新速度慢,用户平均浏览时间和交易量下降,用户粘性低。



技术实现要素:

针对现有技术中存在的缺陷,本发明的主要目的在于提供一种开关系统,本发明的另一目的在于提供一种开关模式实现方法,不但提高当前业务的执行效率,而且极大地改善了代码的可维护性和可扩展性,提高网页的开发和维护效率,降低成本。

本发明提供一种开关系统,包括控制模块、缓存队列、第一执行模块和第二执行模块;

所述控制模块用于对网页的当前业务设置开关,并根据当前业务的相关业务的执行结果控制开关的状态;

所述第一执行模块用于当开关打开时,依次接收当前业务的逻辑函数,并存入缓存队列中,当开关关闭时,执行正在接收的当前业务的逻辑函数;

所述第二执行模块用于无论开关处于打开或关闭的状态,均按照顺序执行缓存队列中的逻辑函数,并删除已经执行的逻辑函数。

在上述技术方案的基础上,所述缓存队列为数组。

本发明还提供一种开关模式实现方法,包括以下步骤:

控制模块对网页的当前业务设置开关,并将开关设为打开状态,第一执行模块依次接收当前业务的逻辑函数,并存入缓存队列中,控制模块接收到当前业务的相关业务的正确执行结果后,关闭开关,第一执行模块执行正在接收的当前业务的逻辑函数,同时,第二执行模块顺序执行缓存队列中的逻辑函数,并删除已经执行的逻辑函数。

在上述技术方案的基础上,所述缓存队列为数组。

在上述技术方案的基础上,所述当前业务的相关业务的正确执行结果包括当前业务向服务器请求并获取授权。

在上述技术方案的基础上,所述当前业务的相关业务的正确执行结果包括在设定的有效期内执行当前业务。

在上述技术方案的基础上,所述当前业务的相关业务的正确执行结果包括当前业务向服务器请求并获取授权后,在设定的有效期内执行当前业务。

在上述技术方案的基础上,所述方法还包括:当前业务向服务器请求并获取授权,并超过设定的有效期时,控制模块打开开关,第一执行模块依次接收当前业务的逻辑函数,并存入缓存队列中。

在上述技术方案的基础上,所述当前业务的相关业务的正确执行结果包括在执行一个当前业务的逻辑函数前,其它若干个逻辑函数的执行已经完成。

在上述技术方案的基础上,网页的当前业务包括至少两个子业务,每一个所述子业务分别使用一个开关系统。

与现有技术相比,本发明的优点如下:

(1)本发明中的开关系统可以用于多种网页业务,通过开关控制当前业务的逻辑函数的执行顺序,当开关打开时,将逻辑函数存入缓存队列中,当开关关闭时,执行正在接收的以及缓存队列中的逻辑函数,不但提高当前业务的执行效率,而且极大地改善了代码的可维护性和可扩展性,提高网页的开发和维护效率,降低成本,加快网页更新速度,提升用户体验和用户粘性。

(2)本发明使用开关模式通过代码的解耦,可以有效地降低在JavaScript这种单线程语言中的异步代码编写难度,同时可以达到将业务场景中多个核心逻辑函数进行分离或接口,提升了代码的可维护性与可扩展性。

(3)开发者还可以在一个网页业务中使用多个开关系统,每一个开关系统都是独立的,互相不影响,通过对各个开关系统的管理使用,本发明能够处理复杂的网页业务,提高网页的开发和维护效率。

附图说明

图1是本发明实施例开关系统示意图;

图2是本发明实施例开关模式实现方法流程图。

具体实施方式

术语说明:

Javascript:一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的直译语言。它已经由欧洲电脑制造商协会ECMA通过ECMAScript实现语言的标准化。

开关:在本专利中表示一种在Javascript语言中实现函数预执行的设计模式与技术手段,也就是说当代码中的某一个逻辑依赖另外一个逻辑的处理结果时候,使用开关模式可以实现代码的解耦。

下面结合附图及具体实施例对本发明作进一步的详细描述。

参见图1所示,本发明实施例提供一种开关系统,基于JavaScript语言,包括控制模块、缓存队列、第一执行模块和第二执行模块。

控制模块用于对网页的当前业务设置开关,并根据当前业务的相关业务的执行结果控制开关的状态。

第一执行模块用于当开关打开时,依次接收当前业务的逻辑函数,并存入缓存队列中,当开关关闭时,执行正在接收的逻辑函数。

缓存队列为数组,缓存队列缓存逻辑函数。

第二执行模块用于无论开关处于打开或关闭的状态,均按照顺序执行缓存队列中的逻辑函数,并删除已经执行的逻辑函数。

本发明中的开关系统在JavaScript语言中被实现为开关类,开关类用于创建开关实例,开关实例可以直接被业务场景使用,开关类的核心属性如下:

控制模块state是一个函数,用于标示开关的状态,其中state=1表示开关打开,state=0表示开关关闭。

缓存队列queue是一个一维数组,在开关打开的状态下,缓存逻辑函数的数据。

第一执行模块may是一个函数,在开关打开的状态下,将逻辑函数加入到缓存队列queue中,在开关关闭的状态下,直接执行逻辑函数。

第二执行模块release是一个函数,无视开关的状态,按照顺序强制执行缓存队列queue中所有的逻辑函数,并清空缓存队列queue。

本发明中的开关系统可以用于多种网页业务,通过开关控制当前业务的逻辑函数的执行顺序,当开关打开时,将逻辑函数存入缓存队列中,当开关关闭时,执行正在接收的以及缓存队列中的逻辑函数,不但提高当前业务的执行效率,而且极大地改善了代码的可维护性和可扩展性,提高网页的开发和维护效率,降低成本,加快网页更新速度,提升用户体验和用户粘性。

参见图2所示,本发明还提供一种开关模式实现方法,包括以下步骤:

S1.控制模块对网页的当前业务设置开关,并将开关设为打开状态。

S2.第一执行模块依次接收当前业务的逻辑函数,并存入缓存队列中。

S3.控制模块接收到当前业务的相关业务的正确执行结果后,关闭开关,第一执行模块执行正在接收的逻辑函数,同时,第二执行模块顺序执行缓存队列中的逻辑函数,并删除已经执行的逻辑函数。

本发明使用开关模式通过代码的解耦,可以有效地降低在JavaScript这种单线程语言中的异步代码编写难度,同时可以达到将业务场景中多个核心逻辑函数进行分离或接口,提升了代码的可维护性与可扩展性。

缓存队列为数组,缓存队列缓存逻辑函数。

当前业务的相关业务的正确执行结果包括当前业务向服务器请求并获取授权。

当前业务的相关业务的正确执行结果包括在设定的有效期内执行当前业务。

当前业务的相关业务的正确执行结果包括当前业务向服务器请求并获取授权后,在设定的有效期内执行当前业务。

本方法还包括当前业务向服务器请求并获取授权,并超过设定的有效期时,控制模块打开开关,第一执行模块依次接收当前业务的逻辑函数,并存入缓存队列中。

例如,业务场景中的逻辑函数正常运行前,必须要请求服务器并获得授权信息。本发明提供的实现开关模式的方法包括以下步骤:

1.当前业务初始化,并向服务器请求获取授权信息,同时,当前业务调用开关实例的state函数,并传入true参数,将开关实例的状态设置为打开。

具体的,在当前业务的代码中,开发者通过var switcher=newSwitcher()获取开关类Switcher的实例switcher,实例switcher在初始化完成的时候,会生成两个属性:state函数和queue函数,其中,state=true表示开关打开,state=false表示开关关闭。

2.逻辑函数的执行使用may函数进行委托,调用开关实例switcher的may函数,并将逻辑函数作为参数传递给may函数,此操作不用关心授权是否成功。

当前业务通过执行实例switcher的may函数,将当前业务的逻辑函数传递给实例switcher,实例switcher内部会判断,当前属性state的值为true,表示当前开关是打开状态,此时switcher会将当前业务的逻辑函数放入缓存队列queue中。

3.如果当前业务获得了服务器正确的授权信息,此时调用开关实例switcher的state函数,并传入false参数,让后续通过may函数委托的逻辑函数可以直接执行而不进入缓存队列queue。

当前属性state函数的值为false,表示当前开关是关闭状态,此时实例switcher的may函数将直接执行当前业务的逻辑函数。

4.调用开关实例的release函数,强制执行开关实例的缓存队列queue中所有缓存的逻辑函数,由于缓存队列queue是一个一维数组,所有逻辑函数通过may函数加入进来的时候是有顺序的,这样可以保证当前业务的逻辑函数的执行顺序的正确性。

5.如果授权超过设定的有效期时,此时调用开关实例switcher的state函数,并传入true参数,此时当前业务重新进入步骤1执行。

具体代码举例如下:

当前业务的相关业务的正确执行结果包括在执行一个当前业务的逻辑函数前,其它若干个逻辑函数的执行已经完成。

例如,服务器端接收用户的发送弹幕信息请求后,向用户发送要求登录信息,同时,在当前业务的代码中,开发者通过varswitcher=new Switcher()获取开关类Switcher的实例switcher,实例switcher在初始化完成的时候,会生成两个属性:state函数和queue函数,其中,state=true表示开关打开,state=false表示开关关闭。

当前业务通过执行实例switcher的may函数,将当前业务的逻辑函数传递给实例switcher,实例switcher内部会判断,当前属性state的值为true,表示当前开关是打开状态,此时switcher会将当前业务的逻辑函数(如接收弹幕信息)依次放入缓存队列queue中。

文档对象模型DOM准备好后,当前业务获得了执行已经完成信息,此时调用开关实例switcher的state函数,并传入false参数,此时实例switcher的may函数将直接执行当前业务的逻辑函数,即直接发送正在接收的弹幕信息,同时,调用开关实例的release函数,强制执行开关实例的缓存队列queue中所有缓存的逻辑函数,即顺序发送缓存队列中的弹幕信息,并删除已经执行的逻辑函数。

本发明还可以用于当网页的当前业务包括至少两个子业务,每一个子业务分别使用一个开关系统。

开发者还可以在一个网页业务中使用多个开关系统,每一个开关系统都是独立的,互相不影响,通过对各个开关系统的管理使用,本发明能够处理复杂的网页业务,提高网页的开发和维护效率。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1