实现Javascript多任务机制的方法和设备的制造方法

文档序号:9274598阅读:316来源:国知局
实现Javascript多任务机制的方法和设备的制造方法
【技术领域】
[0001]本发明涉及互联网技术领域,并具体地涉及一种用于实现Javascript多任务机制的方法和设备。
【背景技术】
[0002]随着互联网技术的发展,Javascript不但占据了浏览器端的运行环境,而且利用node, js技术开始在服务器后端应用上也得到发展。但无论在浏览器环境还是在后端的node, js运行环境,Javascript都是在单线程里运行,所有的任务都是顺序执行的,这在早期的web网站型应用只利用Javascript处理页面交互还是足够的,并能带来很多便利,但随着互联网富应用(rich internet applicat1n)逐渐普及以及Javascript涉及后台业务实现的情况下,Javascript多任务机制成为必须。
[0003]目前在浏览器端和node, js后端服务器环境存在一些技术来实现Javascript下的多任务机制。
[0004]在支持HTML5的前端浏览器环境可以使用Web Worker来实现Javascript的多任务,每个Web Worker在浏览器的单个线程中执行。早期的浏览器使用iFrame技术来模拟多任务机制,浏览器里每个Frame在单独的线程里运行。后端的node, js环境中可以子进程来实现多任务,也可以通过纤程(fiber)来实现多任务。
[0005]然而使用Web Worker技术必须使用支持HTML5的浏览器,而早期的浏览器如IE6、IE7等并不支持HTML5,而且因为HTML5标准尚未完成,还存在浏览器兼容问题;Web Worker之间的交互还存在一些不便。此技术比较适合实现1和密集计算等性质的多任务。
[0006]Node, js中使用子进程实现多任务较耗资源,子进程之间的交互不太方便;使用纤程需要扩展node, js,纤程本身使用的是V8系统的线程实现,纤程之间交互不方便。
[0007]上述技术要不限制在浏览器端,要不限制在node, js环境中,无法在前后两端统一使用。
[0008]因此,需要能够实现在前后两端统一使用的Javascript多任务机制的方法和设备。

【发明内容】

[0009]因此,需要一种能够减轻或解决上述问题的用于实现Javascript多任务机制的方法。
[0010]根据本发明的一个方案,提供了一种用于实现Javascript多任务机制的方法,包括:在Javascript环境中使用主动对象来模拟需要执行的一个或多个任务;以及使用Javascript自身的事件循环机制对已由所述主动对象模拟的所述一个或多个任务进行执行调度。
[0011]根据本发明的另一方案,提供了一种用于实现Javascript多任务机制的设备,该设备包括模拟模块,被配置为在Javascript环境中使用主动对象来模拟需要执行的一个或多个任务;以及调度模块,被配置为使用Javascript自身的事件循环机制对已由该主动对象模拟的该一个或多个任务进行执行调度。
[0012]本发明的上述技术方案通过使用Javascript自身的事件循环机制来实现多任务的执行调度,任务执行的顺序和事件到达的顺序一致,保证操作语义上的稳定性,且可以适用于前后端的运行环境,消除了浏览器兼容问题。
【附图说明】
[0013]通过下面结合附图对发明进行的详细描述,将使本发明的上述特征和优点更加明显,其中:
[0014]图1是示出根据本发明的实施例的Javascript多任务机制的示意图;
[0015]图2是示出根据本发明的一个实施例的Javascript多任务机制实现方法的示意流程图;
[0016]图3是示出根据本发明的另一实施例的Javascript多任务机制实现方法的示意流程图;以及
[0017]图4是示出根据本发明的一个实施例的Javascript多任务机制实现设备的示意框图。
【具体实施方式】
[0018]下面,参考附图详细说明本发明的优选实施方式。在附图中,虽然示于不同的附图中,但相同的附图标记用于表示相同的或相似的组件。为了清楚和简明,对已知功能和结构的详细描述将被省略,以避免使本发明的主题不清楚。
[0019]Javascript运行环境是基于事件循环(Event Loop)机制的,运行时(Runtime)逐步从事件队列中取出事件并调用相应的事件处理程序来执行,如果没有事件,则进入空闲状态。
[0020]在本发明的实施例中,使用主动对象模拟需要执行的任务,每个主动对象都在自己独立的运行环境中运行,主动对象里包含了该对象运行所需要的所有状态信息。主动对象之间通过发送事件进行交互,主动对象里定义了如何处理各种事件的方法。
[0021]在Javascript环境中所有主动对象都在主线程里运行,但相互不干扰,不共享状态。本发明的实施例使用主动对象模拟任务,然后使用Javascript自身的事件循环机制实现分时调度,从而实现多任务机制。
[0022]图1示出了根据本发明的实施例的Javascript多任务机制的示意图。
[0023]在该示意图中,Javascript事件循环负责运行环境的事件分发处理,UI事件(UIevent)、10 事件(10 event)、系统事件(System event)以及定时器事件(Timer event)都由它来调度分发。
[0024]框架(Framework)包含了所有主动对象列表,管理业务事件的发布/订阅,管理所有业务任务相关的定时器。在图1的一般性示例的一个实现示例中,其可包括以下属性
[0025]activeObjects: □,主动对象列表,用于管理所有主动对象的生命周期
[0026]subscribes: {},主动对象订阅的业务事件的地图,管理业务事件的发布和订阅
[0027]timeEvents: □,业务相关的定时事件
[0028]timerld:0,业务定时事件检查的定时器
[0029]tickRate:50,业务定时事件检查时间间隔,以毫秒为单位
[0030]tick:funct1n业务定时事件的定时处理函数
[0031]框架(Framework)可定时(如每隔1ms)检查定时器列表(timer list)中的业务定时器是否触发,若触发则将相应的事件加入到任务的事件队列里。而在使用主动对象来模拟任务时,每当主动对象接收到事件,就会设置Javascript定时任务(将定时时间设置为O),以此来对该任务做执行调度。当Javascript事件循环开始处理该定时事件时,执行对应的任务。任务的执行则是从该任务事件队列中取出第一个事件进行分发,任务对象(即,对应的主动对象)可根据当前状态对事件进行处理。任务对象可按状态机方式实现。
[0032]框架(Framework)管理所有的主动对象,所有主动对象在使用前可注册到框架中,框架可提供按照名称或ID获取主动对象的接口。框架还实现了一个事件总线(EventBus),主动对象可以订阅一些事件,也可以根据业务需要发布特定事件,事件总线会将相应的事件发送到订阅者(相应主动对象)的事件队列中,以此激活该主动对象的执行调度,来处理此事件。框架也在定时器列表(timer list)中管理所有主动对象的定时器,定时检查定时器是否触发。
[0033]主动对象类似一个轻量级线程,一直处于运行状态等待事件(例如框架根据该主动对象的订阅发送的事件)的来临。当接收到事件时,该对象加入到Javascript事件循环中等待执行。图1中示出的主动对象的各项属性如下:
[0034]EventQueue事件队列,用于存储所有收到的业务事件
[0035]DeferQueue 延迟事件队列,存储所有当前状态不能处理且需要延后处理的事件;
[0036]Properties可能状态对象,定义主动对象可能出现的状态;
[0037]State当前状态对象,每个状态对象定义了所有它能处理的事件的处理逻辑和状态迀移前后的处理逻辑
[0038]Dispatch 事件分发处理,取出事件队列中的一个事件交给当前状态进行事件处理
[0039]事件的发送和处理是异步的,主动对象的一个执行周期,就是从自己的事件队列中取出一个事件,将该事件分发,根据主动对象当前状态和事件类型作相应的业务处理。处理事件过程中也会发生对象状态的迀移。主动对象的内部可采用状态机的机制。当主动对象的当前状态不适合处理所分发的事件时,可以忽略该事件,或者将该事件加入延迟事件队列,当对象处于合适的状态时再召回这些事件,这就是事件的延迟和召回机制。主动对象之间可以有父子关系,父对象负责管理子对象的生命周期,这对应于任务和子任务之间的关系。主动对象之间通过事件传递进行交互,相互间不共享任何状态,整个交互机制是基于事件驱动的异步交互方式。
[0040]每个事件包含了事件类型信息、发送者信息和相关数据。事件的各项属性如下:
[0041]type 定义事件类型
[0042]sender定义事件发送对象
[0043]data 定义事件的数据
[0044]事件的处理和发送是异步的,事件发送只是将该事件加入到目标任务的事件队列中,只有到下次调度时,事件才执行。
[0045]基于上述的实现机制,下面参考图2和图3描述根据本发明实施例的Javascript多任务机制实现方法的示意流程图。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1