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

技术编号:12225876 阅读:129 留言:0更新日期:2015-10-22 02:52
为了解决在前端浏览器环境和后端node.js环境中统一使用Javascript多任务机制的问题,本发明专利技术提供了一种用于实现Javascript多任务机制的方法。该方法包括:在Javascript环境中使用主动对象来模拟需要执行的一个或多个任务;以及使用Javascript自身的事件循环机制对已由所述主动对象模拟的所述一个或多个任务进行执行调度。通过上述方法,可以解决在前端浏览器环境和后端node.js环境中统一使用Javascript多任务机制的问题。

【技术实现步骤摘要】

本专利技术涉及互联网
,并具体地涉及一种用于实现Javascript多任务机制的方法和设备
技术介绍
随着互联网技术的发展,Javascript不但占据了浏览器端的运行环境,而且利用node, js技术开始在服务器后端应用上也得到发展。但无论在浏览器环境还是在后端的node, js运行环境,Javascript都是在单线程里运行,所有的任务都是顺序执行的,这在早期的web网站型应用只利用Javascript处理页面交互还是足够的,并能带来很多便利,但随着互联网富应用(rich internet applicat1n)逐渐普及以及Javascript涉及后台业务实现的情况下,Javascript多任务机制成为必须。目前在浏览器端和node, js后端服务器环境存在一些技术来实现Javascript下的多任务机制。在支持HTML5的前端浏览器环境可以使用Web Worker来实现Javascript的多任务,每个Web Worker在浏览器的单个线程中执行。早期的浏览器使用iFrame技术来模拟多任务机制,浏览器里每个Frame在单独的线程里运行。后端的node, js环境中可以子进程来实现多任务,也可以通过纤程(fiber)来实现多任务。然而使用Web Worker技术必须使用支持HTML5的浏览器,而早期的浏览器如IE6、IE7等并不支持HTML5,而且因为HTML5标准尚未完成,还存在浏览器兼容问题;Web Worker之间的交互还存在一些不便。此技术比较适合实现1和密集计算等性质的多任务。Node, js中使用子进程实现多任务较耗资源,子进程之间的交互不太方便;使用纤程需要扩展node, js,纤程本身使用的是V8系统的线程实现,纤程之间交互不方便。上述技术要不限制在浏览器端,要不限制在node, js环境中,无法在前后两端统一使用。因此,需要能够实现在前后两端统一使用的Javascript多任务机制的方法和设备。
技术实现思路
因此,需要一种能够减轻或解决上述问题的用于实现Javascript多任务机制的方法。根据本专利技术的一个方案,提供了一种用于实现Javascript多任务机制的方法,包括:在Javascript环境中使用主动对象来模拟需要执行的一个或多个任务;以及使用Javascript自身的事件循环机制对已由所述主动对象模拟的所述一个或多个任务进行执行调度。根据本专利技术的另一方案,提供了一种用于实现Javascript多任务机制的设备,该设备包括模拟模块,被配置为在Javascript环境中使用主动对象来模拟需要执行的一个或多个任务;以及调度模块,被配置为使用Javascript自身的事件循环机制对已由该主动对象模拟的该一个或多个任务进行执行调度。本专利技术的上述技术方案通过使用Javascript自身的事件循环机制来实现多任务的执行调度,任务执行的顺序和事件到达的顺序一致,保证操作语义上的稳定性,且可以适用于前后端的运行环境,消除了浏览器兼容问题。【附图说明】通过下面结合附图对专利技术进行的详细描述,将使本专利技术的上述特征和优点更加明显,其中:图1是示出根据本专利技术的实施例的Javascript多任务机制的示意图;图2是示出根据本专利技术的一个实施例的Javascript多任务机制实现方法的示意流程图;图3是示出根据本专利技术的另一实施例的Javascript多任务机制实现方法的示意流程图;以及图4是示出根据本专利技术的一个实施例的Javascript多任务机制实现设备的示意框图。【具体实施方式】下面,参考附图详细说明本专利技术的优选实施方式。在附图中,虽然示于不同的附图中,但相同的附图标记用于表示相同的或相似的组件。为了清楚和简明,对已知功能和结构的详细描述将被省略,以避免使本专利技术的主题不清楚。Javascript运行环境是基于事件循环(Event Loop)机制的,运行时(Runtime)逐步从事件队列中取出事件并调用相应的事件处理程序来执行,如果没有事件,则进入空闲状态。在本专利技术的实施例中,使用主动对象模拟需要执行的任务,每个主动对象都在自己独立的运行环境中运行,主动对象里包含了该对象运行所需要的所有状态信息。主动对象之间通过发送事件进行交互,主动对象里定义了如何处理各种事件的方法。在Javascript环境中所有主动对象都在主线程里运行,但相互不干扰,不共享状态。本专利技术的实施例使用主动对象模拟任务,然后使用Javascript自身的事件循环机制实现分时调度,从而实现多任务机制。图1示出了根据本专利技术的实施例的Javascript多任务机制的示意图。在该示意图中,Javascript事件循环负责运行环境的事件分发处理,UI事件(UIevent)、10 事件(10 event)、系统事件(System event)以及定时器事件(Timer event)都由它来调度分发。框架(Framework)包含了所有主动对象列表,管理业务事件的发布/订阅,管理所有业务任务相关的定时器。在图1的一般性示例的一个实现示例中,其可包括以下属性activeObjects: □,主动对象列表,用于管理所有主动对象的生命周期subscribes: {},主动对象订阅的业务事件的地图,管理业务事件的发布和订阅timeEvents: □,业务相关的定时事件timerld:0,业务定时事件检查的定时器tickRate:50,业务定时事件检查时间间隔,以毫秒为单位tick:funct1n业务定时事件的定时处理函数框架(Framework)可定时(如每隔1ms)检查定时器列表(timer list)中的业务定时器是否触发,若触发则将相应的事件加入到任务的事件队列里。而在使用主动对象来模拟任务时,每当主动对象接收到事件,就会设置Javascript定时任务(将定时时间设置为O),以此来对该任务做执行调度。当Javascript事件循环开始处理该定时事件时,执行对应的任务。任务的执行则是从该任务事件队列中取出第一个事件进行分发,任务对象(即,对应的主动对象)可根据当前状态对事件进行处理。任务对象可按状态机方式实现。框架(Framework)管理所有的主动对象,所有主动对象在使用前可注册到框架中,框架可提供按照名称或ID获取主动对象的接口。框架还实现了一个事件总线(EventBus),主动对象可以订阅一些事件,也可以根据业务需要发布特定事件,事件总线会将相应的事件发送到订阅者(相应主动对象)的事件队列中,以此激活该主动对象的执行调度,来处理此事件。框架也在定时器列表(timer list)中管理所有主动对象的定时器,定时检查定时器是否触发。主动对象类似一个轻量级线程,一直处于运行状态等待事件(例如框架根据该主动对象的订阅发送的事件)的来临。当接收到事件时,该对象加入到Javascript事件循环中等待执行。图1中示出的主动对象的各项属性如下:EventQueue事件队列,用于存储所有收到的业务事件DeferQueue 延迟事件队列,存储所有当前状态不能处理且需要延后处理的事件;Properties可能状态对象,定义主动对象可能出现的状态;State当前状态对象,每个状态对象定义了所有它能处理的事件的处理逻辑和状态迀移前后的处本文档来自技高网
...

【技术保护点】
一种用于实现Javascript多任务机制的方法,包括:在Javascript环境中使用主动对象来模拟需要执行的一个或多个任务;以及使用Javascript自身的事件循环机制对已由所述主动对象模拟的所述一个或多个任务进行执行调度。

【技术特征摘要】

【专利技术属性】
技术研发人员:夏万强
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1