一种前端任务处理的方法及装置与流程

文档序号:17262388发布日期:2019-03-30 09:45阅读:256来源:国知局
一种前端任务处理的方法及装置与流程

本发明实施例涉及任务处理技术领域,尤其涉及一种前端任务处理的方法及装置。



背景技术:

javascript语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。

这种情况下,如果一段javascript语言中出现了while语句的死循环,这时再去点击页面的dom元素,将不会触发事件,事实上这些异步的事件都已经排成了队列,只等页面的javascript渲染完后去执行,而此时渲染进入了死循环,所以出现了用户界面被“冻结”的现象。而实际的开发中,虽然不会出现类似的死循环,但是大量的javascript渲染还是会影响用户体验的。

随着电脑计算能力的增强,尤其是多核cpu的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。



技术实现要素:

本发明实施例提供一种前端任务处理的方法及装置,通多线程来实现计算密集型或高延迟的任务的处理,降低了主线程的处理负担,使得主线程渲染流畅。

本发明实施例提供的一种前端任务处理的方法,包括:

第一线程接收第二线程发送的任务信息,所述任务信息包括待处理任务和待处理任务的身份标识(identity,id);所述第一线程为工作在系统后台的线程,所述第二线程为主线程;

所述第一线程根据所述待处理任务的id,将所述待处理任务存储到任务队列中;

所述第一线程从所述任务队列中获取所述待处理任务进行处理,并在得到处理结果后向所述第二线程发送回调通知,以使所述第二线程对所述处理结果进行回调。

上述技术方案中,通过后台线程对一些计算密集型任务或高延迟任务进行处理,可以减少主线程的处理负担,使得主线程的网页渲染不会被阻塞或拖慢,提高了用户的体验。

可选的,所述第一线程从所述任务队列中获取所述待处理任务进行处理,包括:

所述第一线程在确定所述任务队列中任务的数量大于第一阈值时,从所述任务队列中获取所述待处理任务进行处理。

可选的,所述第一线程在确定所述任务队列中任务的数量大于第一阈值时,从所述任务队列中获取所述待处理任务进行处理,包括:

所述第一线程在确定所述任务队列中任务的数量大于第一阈值时,根据所述待处理任务的id对应的优先级,从所述任务队列中获取所述待处理的任务进行处理。

相应的,本发明实施例还提供了一种前端任务处理的方法,包括:

第二线程接收待处理任务,并生成所述待处理任务的id;所述任务信息包括待处理任务和待处理任务的id;所述第二线程为主线程;

所述第二线程将所述待处理任务和所述待处理任务的id封装后发送给第一线程,以使所述第一线程对所述待处理任务进行处理;所述第一线程为工作在系统后台的线程。

可选的,所述第二线程在将所述待处理任务和所述待处理任务的id封装后发送给第一线程之后,还包括:

所述第二线程接收所述第一线程发送的回调通知;

所述第二线程根据所述待处理任务的id执行回调函数,从所述第一线程回调所述待处理任务的处理结果。

相应的,本发明实施例还提供了一种前端任务处理的装置,包括:

接收单元,用于接收第二线程发送的任务信息,所述任务信息包括待处理任务和待处理任务的id;第一线程为工作在系统后台的线程,所述第二线程为主线程;

处理单元,用于根据所述待处理任务的id,将所述待处理任务存储到任务队列中;以及从所述任务队列中获取所述待处理任务进行处理,并得到处理结果;

发送单元,用于向所述第二线程发送回调通知,以使所述第二线程对所述处理结果进行回调。

可选的,所述处理单元具体用于:

在确定所述任务队列中任务的数量大于第一阈值时,从所述任务队列中获取所述待处理任务进行处理。

可选的,所述处理单元具体用于:

在确定所述任务队列中任务的数量大于第一阈值时,根据所述待处理任务的id对应的优先级,从所述任务队列中获取所述待处理的任务进行处理。

相应的,本发明实施例还提供了一种前端任务处理的装置,包括:

接收单元,用于接收待处理任务,并生成所述待处理任务的id;所述任务信息包括待处理任务和待处理任务的id;

发送单元,用于将所述待处理任务和所述待处理任务的id封装后发送给第一线程,以使所述第一线程对所述待处理任务进行处理;所述第一线程为工作在系统后台的线程;第二线程为主线程。

可选的,所述接收单元还用于:

在将所述待处理任务和所述待处理任务的id封装后发送给第一线程之后,接收所述第一线程发送的回调通知;

根据所述待处理任务的id执行回调函数,从所述第一线程回调所述待处理任务的处理结果。

相应的,本发明实施例还提供了一种计算设备,包括:

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述前端任务处理的方法。

相应的,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述前端任务处理的方法。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种系统架构的示意图;

图2为本发明实施例提供的一种前端任务处理的方法的流程示意图;

图3为本发明实施例提供的一种前端任务处理的装置的结构示意图;

图4为本发明实施例提供的一种前端任务处理的装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1示例性的示出了本发明实施例所适用的一种系统架构,该系统架构可以为服务器100,包括处理器110、通信接口120和存储器130。

其中,通信接口120用于与终端设备进行通信,收发该终端设备传输的信息,实现通信。

处理器110是服务器100的控制中心,利用各种接口和线路连接整个服务器100的各个部分,通过运行或执行存储在存储器130内的软件程序/或模块,以及调用存储在存储器130内的数据,执行服务器100的各种功能和处理数据。可选地,处理器110可以包括一个或多个处理单元。

存储器130可用于存储软件程序以及模块,处理器110通过运行存储在存储器130的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器130可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据业务处理所创建的数据等。此外,存储器130可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。

基于上述描述,图2示例性的示出了本发明实施例提供的一种前端任务处理的方法的流程,该流程可以由前端任务处理的装置执行,例如上述服务器。下面将通过第一线程与第二线程交互的方式来描述该流程。

如图2所示,该流程具体包括:

步骤201,第二线程接收待处理任务,并生成所述待处理任务的id。

在本发明实施例中,第一线程可以为工作在系统后台的线程,第二线程为主线程,该主线程主要用于对网页进行渲染,负责ui交互等方面的事情。该第一线程也可以称为任务接收者线程,第二线程可以称为任务发送者线程。第二线程在运行的同时,第一线程在后台运行,两者互不干扰。该待处理任务可以为计算密集型任务或高延迟任务,其中计算密集型任务是需要进行大量的计算,消耗cpu资源,比如计算圆周率、对视频进行高清解码等等,对cpu的运算能力比较依赖,高延迟任务是指需要延迟处理的任务,例如加载图片、图片过滤等。

第二线程在接收到需要处理的待处理任务后,可以先生成该待处理任务的id,在本发明实施例中该待处理任务的id仅是示例作用,再具体实施例的过程中也可以使用其它用于标识不同待处理任务的字段,不做具体限定。

举例来说,任务的发起者,即发送者线程(后文称作sender);任务的接收(执行者)者,即接收者线程(后文称作receiver)。

sender可以定义成接口,有2个方法:send用于发送任务;onresult用于注册回调函数。

代码如下:

当sender需要发送一个待处理任务时,首先生成一个唯一性的taskid(待处理任务的id),然后将待处理任务的方法名、参数封装称一个对象。接着调用sender接口的send方法。send方法所做的事情就是将待处理任务发送到receiver,然后立即返回(不阻塞)。由于待处理任务是异步并行执行的,sender需要注册一个回调函数,当receiver执行任务完毕时通知sender执行这个回调函数。至此,sender的工作完毕。

步骤202,第二线程向第一线程发送任务信息。

第二线程在生成待处理任务的id后,将该待处理任务以及该待处理任务的id封装后发送给第一线程,以使第一线程对该待处理任务进行处理。

如上述例子,sender在生成taskid之后,就可以直接调用sender接口的send方法。send方法所做的事情就是将任务发送到receiver,然后立即返回(不阻塞)。由于任务是异步并行执行的,因此需要注册一个回调函数,以使当receiver执行任务完毕时通知sender执行这个回调函数。

步骤203,第一线程根据所述待处理任务的id,将所述待处理任务存储到任务队列中。

第一线程在接收到第二线程发送的任务信息后,需要根据该待处理任务的id将待处理任务存储到任务队列中,以等待后续处理。

步骤204,第一线程从所述任务队列中获取所述待处理任务进行处理,并在得到处理结果。

第一线程可以从任务队列中来获取待处理任务进行处理,此时,第一线程可以在确定任务队列中任务的数量大于第一阈值时,才从任务队列中获取待处理任务。可选的,第一线程还可以根据待处理任务的id对应的优先级从任务队列中获取待处理任务,也就是说,优先级高的待处理任务优先进行处理。该第一阈值可以依据经验进行设置。

举例来说,receiver的接口的定义可以如下所述:

其中,queue_size用于定义队列大小(用于排队的任务队列大小),大小可以动态调整。

taskqueue用于存放任务。

receive函数用于接收sender发送的任务,并将其存储在taskqueue中。

execute函数用于执行任务,并将执行结果通知到sender。当队列排满时receive函数会调用execute。

步骤205,第一线程向第二线程发送回调通知。

第一线程在进行任务处理后,获得了处理结果,就可以向第二线程发送回调通知,以通知第二线程执行回调函数。

步骤206,第二线程根据所述待处理任务的id执行回调函数,从所述第一线程回调所述待处理任务的处理结果。

第二线程接收到回调通知后,就知道已经处理完的任务的id,也就是其发送的待处理任务的id,根据该待处理任务的id执行之前注册的回调函数,从第一线程回调该待处理任务的处理结果。

可选的,上述sender和receiver通信采用消息传递的方式,比如:

上述实施例表明,由于系统解耦,任务发送和接收执行分开处理逻辑,也就是第一线程和第二线程分开执行,更易于编码维护。而且充分利用计算机系统多线程的执行能力,不会阻塞主线程的执行,提高了用户体验。

通过本发明实施例提供的前端任务处理的流程,可以使得一些计算密集型或高延迟的任务,被后台线程负担了,主线程(通常负责ui交互)就会很流畅,不会被阻塞或拖慢。后台线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。在具体实施过程中可以同时启用多个后台线程用于处理多个不同的任务,提升执行效率。

需要说明的是,本发明实施例中的前端任务可以用于下述领域:1、预先抓取和/或缓存数据以便稍后使用。2、突出显示代码语法或其他实时文本格式。3、拼写检查程序。4、分析视频或音频数据。5、背景i/o或网络服务轮询。6、处理较大数组或超大json响应。7、<canvas>中的图片过滤。8、大量的数据计算。

下面将在具体的实施场景下描述本发明实施例提供的前端任务的实现过程。

假设网站要加载几百张图片,传统的基于ajax模型加载图片的方式每启动一个xmlhttprequest请求都会消耗资源,导致在交互过程中需要消耗主线程资源,影响了主线程的渲染过程,造成卡顿现象。

而如果采取前端任务队列模型,则在接收者线程中去请求图片资源,不会阻塞主线程的渲染过程。

具体实现过程:

sender线程:

sender.send(‘task1’,getpics);

sender.onresult(‘task1’,function(){

//渲染图片

});

receiver线程:

//具体下载图片过程略

receiver.execute(‘task1’,picurls);

//执行完毕通知sender线程渲染图片。

基于相同的发明构思,图3示例性的示出了本发明实施例提供的一种前端任务处理的装置,该装置可以执行上述第一线程执行的流程。

如图3所示,该装置可以包括:

接收单元301,用于接收第二线程发送的任务信息,所述任务信息包括待处理任务和待处理任务的id;所述待处理任务为计算密集型任务或高延迟任务;第一线程为工作在系统后台的线程,所述第二线程为主线程;

处理单元302,用于根据所述待处理任务的id,将所述待处理任务存储到任务队列中;以及从所述任务队列中获取所述待处理任务进行处理,并得到处理结果;

发送单元303,用于向所述第二线程发送回调通知,以使所述第二线程对所述处理结果进行回调。

可选的,所述处理单元302具体用于:

在确定所述任务队列中任务的数量大于第一阈值时,从所述任务队列中获取所述待处理任务进行处理。

可选的,所述处理单元302具体用于:

在确定所述任务队列中任务的数量大于第一阈值时,根据所述待处理任务的id对应的优先级,从所述任务队列中获取所述待处理的任务进行处理。

基于相同的发明构思,图4示例性的示出了本发明实施例提供的一种前端任务处理的装置,该装置可以执行上述第二线程执行的流程。

如图4所示,该装置包括:

接收单元401,用于接收待处理任务,并生成所述待处理任务的id;所述任务信息包括待处理任务和待处理任务的id;所述待处理任务为计算密集型任务或高延迟任务;

发送单元402,用于将所述待处理任务和所述待处理任务的id封装后发送给第一线程,以使所述第一线程对所述待处理任务进行处理;所述第一线程为工作在系统后台的线程;第二线程为主线程。

可选的,所述接收单元401还用于:

在将所述待处理任务和所述待处理任务的id封装后发送给第一线程之后,接收所述第一线程发送的回调通知;

根据所述待处理任务的id执行回调函数,从所述第一线程回调所述待处理任务的处理结果。

基于相同的技术构思,本发明实施例还提供了一种计算设备,包括:

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述前端任务处理的方法。

基于相同的技术构思,本发明实施例还提供了一种计算机可读非易失性存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行上述前端任务处理的方法。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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