应用管理方法、装置、电子设备及存储介质与流程

文档序号:32165390发布日期:2022-11-12 04:17阅读:42来源:国知局
应用管理方法、装置、电子设备及存储介质与流程

1.本公开涉及互联网技术领域,尤其涉及一种应用管理方法、装置、电子设备、存储介质及程序产品。


背景技术:

2.微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为把多个小型前端应用聚合为一的应用,具体可转变为一个主应用和多个子应用,其中,主应用一般为常驻,而子应用则根据路由切换等需求来自由启动和退出,由主应用来调度。随着路由的变换和用户的操作行为,可能向不同子应用发出不同的指令,这些指令可能在任意时刻发出,当时的子应用也可能处于任意状态中,那么子应用该如何尽快地响应最新的指令,将影响这个系统的效率。
3.目前,多采用promise队列的方式或加锁的方式来处理所有子应用的指令任务。其中,promise队列是一种按队列处理所用子应用的任务的方式,比如子应用a的load(加载子应用的代码资源)任务在队列中处理时,子应用b的mount(挂载子应用)任务就必须等待;再比如a正在mount过程中,a的unmount(卸载子应用)就必须等待。而加锁方式是设定一个标志位appactivated,如果该标志位为null,则可以执行任意子应用的启动指令,否则,只能先调用appactivated的退出指令,结束后再执行新子应用的启动指令。
4.然而,这两种方式均不可避免无谓的时间等待,使得子应用难以尽快地对最新指令作出反应。


技术实现要素:

5.本公开提供一种应用管理方法、装置、电子设备、存储介质及程序产品,以至少解决相关技术中需要无谓的时间等待,使得子应用难以尽快地对最新指令作出反应的问题。本公开的技术方案如下:
6.根据本公开实施例的第一方面,提供一种应用管理方法,包括:
7.响应于针对目标子应用的目标调用指令,从多个子应用集合中确定出所述目标子应用所属的目标子应用集合;所述多个子应用集合通过各个子应用之间的关联信息分组得到,每个子应用集合中的子应用之间具有关联性;所述目标子应用为各个子应用中的任一子应用,所述目标调用指令为子应用可执行的指令中的任一种指令;
8.在所述目标应用集合中其他子应用的应用状态与所述目标调用指令无冲突的情况下,获取所述目标子应用的指令执行进程信息;所述指令执行进程信息表示所述目标子应用在预设类型的指令下的执行进程,所述预设类型的指令基于所述目标调用指令确定;
9.根据所述目标子应用的指令执行进程信息,确定针对所述目标子应用的调度结果。
10.在一示例性实施例中,所述各个子应用之间的关联信息通过下述方式确定:
11.获取各个子应用的挂载区域;所述挂载区域表示所述子应用在前端页面中的显示
区域;
12.针对任意两个子应用,若所述两个子应用的挂载区域相同,则确定所述两个子应用之间具有关联性。
13.在一示例性实施例中,所述根据所述目标子应用的指令执行进程信息,确定针对所述目标子应用的调度结果,包括:
14.确定所述目标调用指令的指令类型;
15.在所述目标调用指令为第一类调用指令的情况下,若根据所述指令执行进程信息,确定所述目标子应用存在正在执行的指令,则等待所述正在执行的指令执行结束后,获取所述目标子应用的最新调用指令,并将所述最新调用指令与第一预设指令进行匹配;所述第一预设指令基于所述目标调用指令确定,所述第一类调用指令为启动指令、停止指令和更新指令;
16.基于所述最新调用指令与所述第一预设指令的匹配结果,确定针对所述目标子应用的调度结果。
17.在一示例性实施例中,在所述目标调用指令为第一类调用指令的情况下,还包括:
18.若根据所述指令执行进程信息,确定所述目标子应用不存在正在执行的指令,则获取所述目标子应用的应用状态;
19.基于所述目标子应用的应用状态,确定针对所述目标子应用的调度结果。
20.在一示例性实施例中,所述基于所述目标子应用的应用状态,确定针对所述目标子应用的调度结果,包括:
21.若所述目标子应用的应用状态符合所述目标调用指令对应的预设状态,则创建所述目标调用指令的执行进程,并获取所述目标子应用的最新调用指令,将所述最新调用指令与第二预设指令进行匹配;所述第二预设指令基于所述目标调用指令确定;
22.基于所述最新调用指令与第二预设指令的匹配结果,确定针对所述目标子应用的调度结果。
23.在一示例性实施例中,在确定所述目标调用指令的指令类型之后,还包括:
24.在所述目标调用指令为第二类调用指令的情况下,若根据所述指令执行进程信息,确定所述目标子应用存在正在执行的指令,则等待所述正在执行的指令执行结束后,针对所述目标子应用执行所述目标调用指令;所述第二类调用指令为移除指令;
25.或者,若根据所述指令执行进程信息,确定所述目标子应用不存在正在执行的指令,针对所述目标子应用执行所述目标调用指令。
26.在一示例性实施例中,还包括:
27.在所述目标调用指令为启动指令,且所述目标子应用集合中其他子应用的应用状态为停止状态或移除状态的情况下,确定所述其他子应用的应用状态与所述目标调用指令无冲突。
28.在一示例性实施例中,还包括:
29.在所述目标调用指令为其他指令的情况下,确定所述其他子应用的应用状态与所述目标调用指令无冲突;所述其他指令表示除所述启动指令之外的子应用可执行的指令。
30.根据本公开实施例的第二方面,提供一种应用管理装置,包括:
31.集合确定单元,被配置为执行响应于针对目标子应用的目标调用指令,从多个子
应用集合中确定出所述目标子应用所属的目标子应用集合;所述多个子应用集合通过各个子应用之间的关联信息分组得到,每个子应用集合中的子应用之间具有关联性;所述目标子应用为各个子应用中的任一子应用,所述目标调用指令为子应用可执行的指令中的任一种指令;
32.信息获取单元,被配置为执行在所述目标应用集合中其他子应用的应用状态与所述目标调用指令无冲突的情况下,获取所述目标子应用的指令执行进程信息;所述指令执行进程信息表示所述目标子应用在预设类型的指令下的执行进程,所述预设类型的指令基于所述目标调用指令确定;
33.结果确定单元,被配置为执行根据所述目标子应用的指令执行进程信息,确定针对所述目标子应用的调度结果。
34.在一示例性实施例中,所述装置还包括关联信息确定单元,被配置为执行获取各个子应用的挂载区域;所述挂载区域表示所述子应用在前端页面中的显示区域;针对任意两个子应用,若所述两个子应用的挂载区域相同,则确定所述两个子应用之间具有关联性。
35.在一示例性实施例中,所述结果确定单元,还被配置为执行确定所述目标调用指令的指令类型;在所述目标调用指令为第一类调用指令的情况下,若根据所述指令执行进程信息,确定所述目标子应用存在正在执行的指令,则等待所述正在执行的指令执行结束后,获取所述目标子应用的最新调用指令,并将所述最新调用指令与第一预设指令进行匹配;所述第一预设指令基于所述目标调用指令确定,所述第一类调用指令为启动指令、停止指令和更新指令;基于所述最新调用指令与所述第一预设指令的匹配结果,确定针对所述目标子应用的调度结果。
36.在一示例性实施例中,所述结果确定单元,还被配置为执行若根据所述指令执行进程信息,确定所述目标子应用不存在正在执行的指令,则获取所述目标子应用的应用状态;基于所述目标子应用的应用状态,确定针对所述目标子应用的调度结果。
37.在一示例性实施例中,所述结果确定单元,还被配置为执行若所述目标子应用的应用状态符合所述目标调用指令对应的预设状态,则创建所述目标调用指令的执行进程,并获取所述目标子应用的最新调用指令,将所述最新调用指令与第二预设指令进行匹配;所述第二预设指令基于所述目标调用指令确定;基于所述最新调用指令与第二预设指令的匹配结果,确定针对所述目标子应用的调度结果。
38.在一示例性实施例中,所述结果确定单元,还被配置为执行在所述目标调用指令为第二类调用指令的情况下,若根据所述指令执行进程信息,确定所述目标子应用存在正在执行的指令,则等待所述正在执行的指令执行结束后,针对所述目标子应用执行所述目标调用指令;所述第二类调用指令为移除指令;或者,若根据所述指令执行进程信息,确定所述目标子应用不存在正在执行的指令,针对所述目标子应用执行所述目标调用指令。
39.在一示例性实施例中,所述装置还包括冲突确定单元,被配置为执行在所述目标调用指令为启动指令,且所述目标子应用集合中其他子应用的应用状态为停止状态或移除状态的情况下,确定所述其他子应用的应用状态与所述目标调用指令无冲突。
40.在一示例性实施例中,所述冲突确定单元,还被配置为执行在所述目标调用指令为其他指令的情况下,确定所述其他子应用的应用状态与所述目标调用指令无冲突;所述其他指令表示除所述启动指令之外的子应用可执行的指令。
41.根据本公开实施例的第三方面,提供一种电子设备,包括:
42.处理器;
43.用于存储所述处理器可执行指令的存储器;
44.其中,所述处理器被配置为执行所述指令,以实现如上任一项所述的方法。
45.根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如上任一项所述的方法。
46.根据本公开实施例的第五方面,提供一种计算机程序产品,所述计算机程序产品中包括指令,所述指令被电子设备的处理器执行时,使得所述电子设备能够执行如上任一项所述的方法。
47.本公开的实施例提供的技术方案至少带来以下有益效果:
48.通过关联度预先对子应用进行分组,得到多个子应用集合,之后在接收到针对目标子应用的目标调用指令时,只需根据目标子应用所在子应用集合内其他子应用的应用状态和其本身的指令执行进程信息,确定是否对目标调用指令进行响应,避免受无关联的应用的阻塞,进行不必要的时间等待。
49.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
50.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
51.图1是根据一示例性实施例示出的一种应用管理方法的流程示意图。
52.图2是根据一示例性实施例示出的子应用的挂载区域示意图。
53.图3是根据一示例性实施例示出的针对启动指令的处理流程图。
54.图4是根据一示例性实施例示出的针对停止指令的处理流程图。
55.图5是根据一示例性实施例示出的针对更新指令的处理流程图。
56.图6是根据一示例性实施例示出的启动指令和停止指令的关系示意图。
57.图7是根据一示例性实施例示出的另一种应用管理方法的流程示意图。
58.图8是根据一示例性实施例示出的一种应用管理装置的结构框图。
59.图9是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
60.为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
61.需要说明的是,以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
62.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。还需要说明的是,本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
63.微前端系统中的子应用的整个生命周期过程可以分为:load(加载子应用的代码资源)-bootstrap(启动子应用)-mount(挂载子应用)-update(更新子应用)-unmount(卸载子应用)-unload(移除子应用),为了能覆盖更复杂的业务场景,各个生命周期都应该是异步的,如下表1所示,为子应用的各个生命周期的说明。
64.表1子应用的各个生命周期的说明
[0065][0066][0067]
在一示例性实施例中,如图1所示,提供了一种应用管理方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本实施例中,该方法包括以下步骤:
[0068]
在步骤s110中,响应于针对目标子应用的目标调用指令,从多个子应用集合中确定出目标子应用所属的目标子应用集合;多个子应用集合通过各个子应用之间的关联信息分组得到,每个子应用集合中的子应用之间具有关联性;目标子应用为各个子应用中的任一子应用,目标调用指令为子应用可执行的指令中的任一种指令。
[0069]
其中,关联信息表示各个子应用之间的关联情况,关联信息可包括具有关联性和不具有关联性。具有关联性的子应用可能会受其他子应用的应用状态的影响,而不具有关联性的子应用则不会受其他子应用状态的影响。
[0070]
其中,子应用可执行的调用指令包括启动指令(directive start)、停止指令(directive stop)、更新指令(directive update)和移除指令(directive unload)。
[0071]
具体实现中,在将单页面前端应用由单一的单体应用转变为把多个小型前端应用,即转变为一个主应用和多个子应用之后,可先确定各个子应用之间的关联信息,根据该关联信息将各个子应用划分为多个子应用集合。更具体地,可根据各个子应用的挂载区域(即子应用在前端页面中的显示区域)确定各个子应用之间的关联信息。若两个子应用的挂载区域相同,即处于同一显示区域,则确定这两个子应用存在关联性,将具有关联性的子应用划分至一个子应用集合中,由此得到的各个子应用集合中的子应用之间均具有关联性,即对应同一显示区域。
[0072]
进一步地,在接收到针对目标子应用的目标调用指令后,可从预先划分的多个子应用集合中确定出目标子应用所属的目标子应用集合,以便于后续根据目标子应用集合中其他子应用的应用状态以及目标子应用的指令执行进程信息确定针对目标子应用的调度结果。
[0073]
在步骤s120中,在目标应用集合中其他子应用的应用状态与目标调用指令无冲突的情况下,获取目标子应用的指令执行进程信息;指令执行进程信息表示目标子应用在预设类型的指令下的执行进程,预设类型的指令基于目标调用指令确定。
[0074]
其中,应用状态可表征子应用在前端页面的占用情况。
[0075]
其中,指令执行进程信息对应4种指令的进程,设4种指令的执行进程为:开始进程(startingprocess)、停止进程(stoppingprocess)、更新进程(updatingprocess)和移除进程(unloadingprocess),进程信息可通过promise(用于表示一个异步操作的最终完成(或失败)及其结果值)和null(空)表示,如果为null,则表示没有对应的指令在执行。
[0076]
本步骤中,目标应用集合中其他子应用的应用状态与目标调用指令是否冲突,可基于目标调用指令的类型确定。具体地,在目标调用指令为启动指令,且目标子应用集合中其他子应用的应用状态为停止状态或移除状态的情况下,确定其他子应用的应用状态与目标调用指令无冲突。或者,在目标调用指令为其他指令的情况下,确定其他子应用的应用状态与目标调用指令无冲突;其中,其他指令表示除启动指令之外的子应用可执行的指令。除这两种情况外的其他情况下,均可认为目标应用集合中其他子应用的应用状态与目标调用指令存在冲突,需等待其他子应用的进程结束后,再执行目标调用指令。
[0077]
在确定目标应用集合中其他子应用的应用状态与目标调用指令无冲突的情况下,表示针对目标子应用的目标调度指令仅受目标子应用的影响,故可获取目标子应用当前的指令执行进程信息,根据指令执行进程信息,确定针对目标子应用的调度结果。
[0078]
在步骤s130中,根据目标子应用的指令执行进程信息,确定针对目标子应用的调度结果。
[0079]
具体实现中,不同的调用指令功能不同,受其他指令的影响也不同,因此,还需要确定目标子应用的目标调用指令的指令类型,根据目标调用指令的指令类型和目标子应用的指令执行进程信息,确定针对目标子应用的调度结果,即根据目标调用指令的指令类型和目标子应用在启动指令(directive start)、停止指令(directive stop)、更新指令(directive update)和移除指令(directive unload)等4种指令的执行进程信息,确定针对目标子应用的调度结果。
[0080]
上述应用管理方法,响应于针对目标子应用的目标调用指令,从多个子应用集合中确定出目标子应用所属的目标子应用集合;在目标应用集合中其他子应用的应用状态与目标调用指令无冲突的情况下,获取目标子应用的指令执行进程信息;根据目标子应用的指令执行进程信息,确定针对目标子应用的调度结果。该方法通过关联度预先对子应用进行分组,得到多个子应用集合,之后在接收到针对目标子应用的目标调用指令时,只需根据目标子应用所在子应用集合内其他子应用的应用状态和其本身的指令执行进程信息,确定是否对目标调用指令进行响应,避免受无关联的应用的阻塞,进行不必要的时间等待。
[0081]
在一示例性实施例中,各个子应用之间的关联信息的确定方式,包括:获取各个子应用的挂载区域;挂载区域表示子应用在前端页面中的显示区域;针对任意两个子应用,若两个子应用的挂载区域相同,则确定两个子应用之间具有关联性。
[0082]
具体实现中,针对任意两个子应用,若这两个子应用的挂载区域相同,则当一个子应用占用该区域的前端页面时,另一个子应用将无法显示,即这两个子应用之间存在冲突,故可确定这两个子应用之间存在关联性。反之,若这两个子应用的挂载区域不相同,则当一个子应用占用前端页面时,不影响另一个子应用的显示,即这两个子应用之间不存在冲突,故可确定这两个子应用之间不存在。由此可知,基于挂载区域进行子应用集合的划分,即是将挂载于同一个挂载区域内的所有子应用作为一个子应用集合,挂载区域与子应用集合一一对应。
[0083]
参考图2,为一示例性实施例示出的子应用的挂载区域示意图,设有子应用a、b、c可挂载到α区域,而子应用d、e、f可挂载到β区域,则子应用a、b、c和子应用d、e、f之间不冲突,即定子应用a、b、c和子应用d、e、f不存在关联,而子应用a、b、c之间存在关联,子应用d、e、f之间存在关联。因此,可将挂载于α区域的子应用a、b、c构成一个子应用集合,将挂载于β区域的子应用d、e、f构成一个子应用集合,得到两个子应用集合。
[0084]
本实施例中,通过挂载区域确定各个子应用之间的关联信息,进而对各个子应用进行分组,按照分组来处理子应用,能够让无关联的应用之间不需加锁,不会相互掣肘,提高对指令的响应速度。
[0085]
在一示例性实施例中,步骤s130中,根据目标子应用的指令执行进程信息,确定针对目标子应用的调度结果,包括:
[0086]
步骤s1301,确定目标调用指令的指令类型;
[0087]
步骤s1302,在目标调用指令为第一类调用指令的情况下,若根据指令执行进程信息,确定目标子应用存在正在执行的指令,则等待正在执行的指令执行结束后,获取目标子应用的最新调用指令,并将最新调用指令与第一预设指令进行匹配;第一预设指令基于目标调用指令确定,第一类调用指令为启动指令、停止指令和更新指令;
[0088]
步骤s1303,基于最新调用指令与第一预设指令的匹配结果,确定针对目标子应用的调度结果。
[0089]
其中,第一类调用指令可以为启动指令(directive start)、停止指令(directive stop)和更新指令(directive update)。
[0090]
其中,第一预设指令基于目标调用指令确定。
[0091]
例如,若目标调用指令为启动指令(directive start),则第一预设指令可以为停止指令(directive stop)和移除指令(directive unload)。
[0092]
若目标调用指令为停止指令(directive stop),则第一预设指令可以为更新指令(directive update)和启动指令(directive start)。
[0093]
若目标调用指令为更新指令(directive update),则第一预设指令可以为停止指令(directive stop)和移除指令(directive unload)。
[0094]
具体实现中,当目标调用指令为启动指令(directive start)、停止指令(directive stop)和更新指令(directive update)中的任一种指令时,根据目标子应用的指令执行进程信息,确定目标子应用是否存在正在执行的指令,若存在,则等待正在执行的指令执行结束后,获取目标子应用的最新调用指令,并将最新调用指令与第一预设指令进行匹配。根据匹配结果,确定针对目标子应用的调度结果。
[0095]
进一步地,在一示例性实施例中,在目标调用指令为第一类调用指令的情况下,还包括:若根据指令执行进程信息,确定目标子应用不存在正在执行的指令,则获取目标子应用的应用状态;基于目标子应用的应用状态,确定针对目标子应用的调度结果。
[0096]
更进一步地,基于目标子应用的应用状态,确定针对目标子应用的调度结果,包括:若目标子应用的应用状态符合目标调用指令对应的预设状态,则创建目标调用指令的执行进程,并获取目标子应用的最新调用指令,将最新调用指令与第二预设指令进行匹配;基于最新调用指令与第二预设指令的匹配结果,确定针对目标子应用的调度结果;第二预设指令基于目标调用指令确定。
[0097]
其中,应用状态可包括:未加载(not_loaded)、正在加载(loading_source_code)、未启动(not_bootstrapped)、启动中(bootstrapping)、未挂载(not_mounted)、挂载中(mounting)、已挂载(mounted)、更新中(updating)、卸载中(unmounting)、移除中(unloadding)、加载出错load_error,可进一步重试)、发生严重错误(broken,无法再执行有效步骤)等等。
[0098]
其中,第二预设指令基于目标调用指令确定。
[0099]
例如,若目标调用指令为启动指令(directive start),则第二预设指令可以为停止指令(directive stop)和移除指令(directive unload)。
[0100]
若目标调用指令为停止指令(directive stop),则第二预设指令可以为停止指令(directive stop)和移除指令(directive unload)。
[0101]
若目标调用指令为更新指令(directive update),则第二预设指令可以为启动指令(directive start)和更新指令(directive update)。
[0102]
参考图3,为一示例性实施例示出的针对启动指令的处理流程图。当目标调用指令为启动指令(directive start)时,执行以下步骤:
[0103]
a.如果更新进程updatingprocess不等于null,等待updatingprocess结束,转e。
[0104]
b.如果启动进程startingprocess不等于null,等待startingprocess结束,转e。
[0105]
c.如果停止进程stoppingprocess不等于null,等待stoppingprocess结束,转e。
[0106]
d.如果不满足a、b、c,即updatingprocess、startingprocess和stoppingprocess均等于null,则转f。
[0107]
e.如果最新调用指令(last directive)既不等于停止指令directive stop也不等于移除指令directive unload,则重新执行当前启动指令,转a;否则抛出异常:该启动指令被中断;
[0108]
f.获取目标子应用的应用状态appstate。
[0109]
g.若appstate不符合启动指令对应的预设状态,则抛出异常/结束,包括以下情况:
[0110]
g1.appstate等于mounted,过程结束,当前已挂载,无需额外启动操作。
[0111]
g2.appstate等于broken,抛出异常,应用已损坏,无法执行启动。
[0112]
h.若appstate符合启动指令对应的预设状态,则创建启动指令的执行进程startingprocess,并获取最新调用指令(last directive),与第二预设指令:停止指令(directive stop)和移除指令(directive unload)进行匹配,根据匹配结果确定针对目标子应用的调度结果。
[0113]
其中,a、b、c中的不等于null,表示存在正在执行的指令,则等待正在执行的指令执行结束后,获取目标子应用的最新指令,然后执行步骤e,即将最新指令与第一预设指令:停止指令(directive stop)和移除指令(directive unload)进行匹配,若最新指令不等于两个第一预设指令,则重新执行启动指令,转步骤a。否则,抛出异常:该启动指令被中断。若不满足a、b、c,即确定目标子应用不存在正在执行的指令,则进入步骤f获取目标子应用的应用状态,若目标子应用的应用状态不符合目标调用指令对应的预设状态,执行g1和g2中的操作;若目标子应用的应用状态符合目标调用指令对应的预设状态,执行步骤h中的操作。
[0114]
进一步地,步骤h进一步包括:
[0115]
h1.如果appstate等于load_error或not_loaded,创建startingprocess,执行以下操作:
[0116]
1.如果lastdirective既不等于directive stop也不等于directive unload,设置appstate=loading_source_code,调用load生命周期,否则抛出中断异常。
[0117]
2.设置appstate=not_bootstrapped。
[0118]
3.如果last directive既不等于directive stop也不等于directive unload,设置appstate=bootstrapping,调用bootstrap生命周期,否则抛出中断异常。
[0119]
4.设置appstate=not_mounted。
[0120]
5.如果last directive既不等于directive stop也不等于directive unload,设置appstate=mounting,调用mount生命周期,否则抛出中断异常。
[0121]
h2.如果appstate等于not_bootstrapped,创建startingprocess,执行以下操作:
[0122]
1.如果last directive既不等于directive stop也不等于directive unload,设置appstate=bootstrapping,调用bootstrap生命周期,否则抛出中断异常。
[0123]
2.设置appstate=not_mounted。
[0124]
3.如果last directive既不等于directive stop也不等于directive unload,设置appstate=mounting,调用mount生命周期,否则抛出中断异常。
[0125]
h3.如果appstate等于not_mounted,创建startingprocess,执行以下操作:
[0126]
1.如果last directive既不等于directive stop也不等于directive unload,设置appstate=mounting,调用mount生命周期,否则抛出中断异常。
[0127]
h4.等待startingprocess完成,如果结果成功,设置appstate=mounted,否则:
[0128]
1.如果appstate等于loading_source_code,设置appstate=load_error,跳l。
[0129]
2.否则设置appstate=broken。
[0130]
l.设置startingprocess=null。
[0131]
由上述内容可以看出,在执行开始指令directive start的过程中,设计了多个中断点(即上述步骤e、h1-1、h1-3、h1-5、h2-1、h2-3,以及h3-1)来检查最新调用指令last directive是否符合当前任务的意图,来尽可能提前结束任务。
[0132]
上述实施例中,在目标调用指令为第二类调用指令的情况下,通过增加检查点(即获取最新调用指令,与第一/第二预设指令进行匹配,根据匹配结果确定最新调用指令是否符合当前任务的意图)的思路来尽可能缩小加锁的范围,提升指令的并行执行程度,进而提高响应速度。
[0133]
在一示例性实施例中,在确定目标调用指令的指令类型之后,还包括:在目标调用指令为第二类调用指令的情况下,若根据指令执行进程信息,确定目标子应用存在正在执行的指令,则等待正在执行的指令执行结束后,针对目标子应用执行目标调用指令;
[0134]
或者,若根据指令执行进程信息,确定目标子应用不存在正在执行的指令,针对目标子应用执行目标调用指令。
[0135]
其中,第二类调用指令可以为移除指令(directive unload),移除指令与其他指令为互斥关系,不可同时执行。
[0136]
具体实现中,若针对目标子应用的目标调用指令为移除指令(directive unload),则执行以下步骤:
[0137]
a、如果更新进程updatingprocess不等于null,等待updatingprocess结束,转e;
[0138]
b、如果启动进程startingprocess不等于null,等待startingprocess结束,转e;
[0139]
c、如果停止进程stoppingprocess不等于null,等待stoppingprocess结束,转e;
[0140]
d、不满足abc,则执行移除指令;
[0141]
e、执行移除指令。
[0142]
可以理解的是,当updatingprocess、startingprocess和stoppingprocess等执行进程中的任一个不等于null时,表明目标子应用存在正在执行的指令,则需要等待正在执行的指令执行结束后,针对目标子应用执行移除指令。当updatingprocess、startingprocess和stoppingprocess等执行进程均等于null时,表明目标子应用不存在正在执行的指令,可直接针对目标子应用执行移除指令。
[0143]
本实施例中,在目标调用指令为第二类调用指令,即移除指令的情况下,考虑到移除指令为从前端移除子应用,因此无需考虑子应用的当前应用状态,在等待正在执行的指令执行结束后或目标子应用不存在正在执行的指令时,即可执行移除指令,以提高对第二类调用指令的响应速度。
[0144]
在一示例性实施例中,确定目标子应用集合中其他子应用的应用状态与目标调用指令是否冲突的方法,包括:在目标调用指令为启动指令,且目标子应用集合中其他子应用的应用状态为停止状态或移除状态的情况下,确定其他子应用的应用状态与目标调用指令无冲突;或者,在目标调用指令为其他指令的情况下,确定其他子应用的应用状态与目标调用指令无冲突;其他指令表示除启动指令之外的子应用可执行的指令。
[0145]
其中,其他指令为停止指令(directive stop)、更新指令(directive update)和移除指令(directive unload)。
[0146]
具体实现中,当目标调用指令为启动指令(directive start)时,需要要求目标子应用集合中其他子应用的应用状态为停止状态或移除状态,此时目标子应用才可执行启动指令,因此,当目标调用指令为启动指令(directive start)时,若目标子应用集合中其他子应用的应用状态为停止状态或移除状态,则判定其他子应用的应用状态与目标调用指令无冲突。反之,若目标子应用集合中其他子应用的应用状态为除停止状态和移除状态之外的状态,则判定其他子应用的应用状态与目标调用指令存在冲突,需要等待其他子应用完成执行任务后,才可执行目标子应用的目标调用指令。
[0147]
当目标调用指令为除启动指令之外的指令,即为停止指令、更新指令和移除指令中的任一个时,执行目标调用指令不受其他子应用的影响,而是受目标子应用当前是否存在正在执行指令的影响,因此,此时可判定其他子应用的应用状态与目标调用指令无冲突。
[0148]
本实施例中,仅通过目标子应用所属的目标子应用集合中其他子应用的应用状态,确定针对目标子应用的目标调用指令是否会受影响,无需考虑其他子应用集合中与目标子应用无关联的子应用的应用状态,避免了无关联的子应用对目标子应用的阻塞,从而可以提高对用户输入的调用指令的响应速度。
[0149]
在一示例性实施例中,还提供了第一类调用指令中的停止指令(directive stop)和更新指令(directive update)的处理流程说明。
[0150]
参考图4,为一示例性实施例示出的针对停止指令的处理流程图。当目标调用指令为停止指令(directive stop)时,执行以下步骤:
[0151]
a.如果停止进程stoppingprocess不等于null,等待stoppingprocess结束,转d。
[0152]
b.如果更新进程updatingprocess不等于null,等待updatingprocess结束,转d。
[0153]
c.如果不满足a、b、c,即stoppingprocess、updatingprocess均等于null,则转e。
[0154]
d.如果最新调用指令last directive既不等于directive update也不等于directive start,则重新执行当前停止指令,转a;否则抛出异常:该停止指令被中断。
[0155]
e.获取目标子应用的应用状态appstate,如果appstate等于load_error或者broken,直接结束,因为此状态可被认为已经退出(stopped)。
[0156]
f.如果appstate等于not_loaded、not_bootstrapped或者not_mounted,直接结束,因为即便startingprocess不等于null,在这些状态下,新的stop指令也会让startingprocess立即中断。
[0157]
g.如果appstate等于loading_source_code或者bootstrapping,直接结束,因为即便startingprocess不等于null,在这些状态下,新的stop指令也会让startingprocess立即中断;此处如果不直接结束而是等待startingprocess结束,则是无谓的等待。
[0158]
h.如果存在startingprocess,此时appstate应该等于mounting,等待startingprocess结束后,转d。
[0159]
i.此时appstate应该等于mounted,创建stoppingprocess,执行以下操作:
[0160]
i1.如果last directive等于directive stop或者等于directive unload,设置appstate=unmounting,调用unmount生命周期,否则抛出中断异常。
[0161]
j.等待stoppingprocess完成,如果结果成功,设置appstate=not_mounted,否则设置appstate broken。
[0162]
k.设置startingprocess=null。
[0163]
其中,停止指令的检查点为d和i1,停止指令(directive stop)中断点的设计方式和启动指令(directive start)相同,但stop的重点还在于:在特定进行中的状态下,指loading_source_code和bootstrapping下,可以不等待start(这两个状态一定存在于start指令中)指令的结束,提前返回。a应用的提前退出就可能让b应用提前启动,从而加速了整个应用组的响应速度。
[0164]
参考图5,为一示例性实施例示出的针对更新指令的处理流程图。当目标调用指令为更新指令(directive stop)时,执行以下步骤:
[0165]
a.如果更新进程updatingprocess不等于null,等待updatingprocess结束,转e;
[0166]
b.如果启动进程startingprocess不等于null,等待startingprocess结束,转e;
[0167]
c.如果停止进程stoppingprocess不等于null,等待stoppingprocess结束,转e;
[0168]
d.如果不满足a、b、c,转f。
[0169]
e.如果last directive既不等于directive stop也不等于directive unload,则重新执行当前update指令,转a;否则抛出异常:该update指令被中断。
[0170]
f.获取目标子应用的应用状态appstate,如果appstate等于not_loaded、not_bootstrapped、not_mounted、load_error,或者broken,直接抛出异常,在这些状态下无法更新应用。
[0171]
g.创建updatingprocess,执行以下操作:
[0172]
g1.如果last directive等于directive start或者等于directive update,设置appstate=updating,调用update生命周期,否则抛出中断异常。
[0173]
h.等待updatingprocess完成,如果结果成功,设置appstate=mounted,否则设置appstate=broken。
[0174]
i.设置updatingprocess=null。
[0175]
其中,更新指令的检查点为e和g1,更新指令与其他指令是竞争互斥关系,不可以同时执行。
[0176]
上述实施例说明了子应用可执行的4种调用指令的执行逻辑,主要为停止指令和启动指令的竞争关系处理,在一些状态下,停止指令和启动指令并不是完全互斥的。以下来举例说明这种关系:
[0177]
参考图6所示的启动指令和停止指令的关系示意图,左图表示在启动指令directive start执行的第三阶段,即mount过程中,突然接收到停止指令directive stop,则必须等到mount结束,也即启动指令执行结束,停止指令才能开始,这种状态下,停止指令和启动指令为互斥的。中图表示在启动指令directive start执行的第一阶段,即load过程中,突然接收到停止指令directive stop,那么停止指令无需任何等待,即刻完成,甚至连unmount生命周期都不需要调用。右图表示在启动指令directive start执行的第二阶段,即bootstrap过程中,突然接收到停止指令directive stop指令,那么停止指令无需任何等待,即刻完成,甚至连unmount生命周期都不需要调用。由于需要网络请求,往往load是耗时最大的一个阶段,时间损耗甚至可达数秒钟,因此不需要等待其完成,将大大提速停止指令directive stop的执行。
[0178]
以上仅为start/stop并发执行的一个简单示例,事实上,通过上述实施例可以知悉启动过程有较多检查点,都可以被stop或者unload打断,目的就是找到更多机会尽快地
结束。其难点在于即便被打断,下一次重新执行指令时,要从正确的起始点开始,这可以由appstate保证。在有路由切换等因素导致微前端的子应用切换时,最多有一个应用需要被启动,其他全部被退出,那么只需要并行等待其他子应用的停止指令directive stop完成,再等待这唯一一个应用的启动指令directive start完成。停止指令的快速完成也就意味着启动指令能提早开始,从而让整个应用的响应速度得到提升。
[0179]
上述实施例中,一方面以关联度来对子应用进行分组,避免无关联的应用之间相互阻塞;另一方面,在特定状态下允许对不同指令(主要是stop/start)并发执行,从而加快指令的执行速度,本质上是对锁粒度的细化,可以减少加锁的时间。
[0180]
在另一示例性实施例中,如图7所示,是根据一示例性实施例示出的另一种应用管理方法的流程图,本实施例中,该方法包括以下步骤:
[0181]
步骤s710,获取各个子应用的挂载区域;挂载区域表示子应用在前端页面中的显示区域;
[0182]
步骤s720,基于挂载区域之间的一致性,确定各个子应用之间的关联信息,根据关联信息,将各个子应用划分为多个子应用集合;
[0183]
步骤s730,响应于针对目标子应用的目标调用指令,从多个子应用集合中确定出目标子应用所属的目标子应用集合;
[0184]
步骤s740,在目标应用集合中其他子应用的应用状态与目标调用指令无冲突的情况下,获取目标子应用的指令执行进程信息和目标调用指令的指令类型;
[0185]
步骤s750,在目标调用指令为第一类调用指令的情况下,若根据指令执行进程信息,确定目标子应用存在正在执行的指令,则等待正在执行的指令执行结束后,获取目标子应用的最新调用指令,基于最新调用指令与第一预设指令的匹配结果,确定针对目标子应用的调度结果;
[0186]
步骤s760,若根据指令执行进程信息,确定目标子应用不存在正在执行的指令,则获取目标子应用的应用状态;若目标子应用的应用状态符合目标调用指令对应的预设状态,则创建目标调用指令的执行进程,并获取目标子应用的最新调用指令,将最新调用指令与第二预设指令进行匹配;基于最新调用指令与第二预设指令的匹配结果,确定针对目标子应用的调度结果;
[0187]
步骤s770,在目标调用指令为第二类调用指令的情况下,若根据指令执行进程信息,确定目标子应用存在正在执行的指令,则等待正在执行的指令执行结束后,针对目标子应用执行目标调用指令;或者,若根据指令执行进程信息,确定目标子应用不存在正在执行的指令,针对目标子应用执行目标调用指令。
[0188]
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0189]
可以理解的是,本说明书中上述方法的各个实施例之间相同/相似的部分可互相
参见,每个实施例重点说明的是与其他实施例的不同之处,相关之处参见其他方法实施例的说明即可。
[0190]
基于同样的发明构思,本公开实施例还提供了一种用于实现上述所涉及的应用管理方法的应用管理装置。
[0191]
图8是根据一示例性实施例示出的一种应用管理装置的结构框图。参照图8,该装置包括:集合确定单元810、信息获取单元820和结果确定单元830,其中,
[0192]
集合确定单元810,被配置为执行响应于针对目标子应用的目标调用指令,从多个子应用集合中确定出目标子应用所属的目标子应用集合;多个子应用集合通过各个子应用之间的关联信息分组得到,每个子应用集合中的子应用之间具有关联性;目标子应用为各个子应用中的任一子应用,目标调用指令为子应用可执行的指令中的任一种指令;
[0193]
信息获取单元820,被配置为执行在目标应用集合中其他子应用的应用状态与目标调用指令无冲突的情况下,获取目标子应用的指令执行进程信息;指令执行进程信息表示目标子应用在预设类型的指令下的执行进程,预设类型的指令基于目标调用指令确定;
[0194]
结果确定单元830,被配置为执行根据目标子应用的指令执行进程信息,确定针对目标子应用的调度结果。
[0195]
在一示例性实施例中,上述装置还包括关联信息确定单元,被配置为执行获取各个子应用的挂载区域;挂载区域表示子应用在前端页面中的显示区域;针对任意两个子应用,若两个子应用的挂载区域相同,则确定两个子应用之间具有关联性。
[0196]
在一示例性实施例中,结果确定单元830,还被配置为执行确定目标调用指令的指令类型;在目标调用指令为第一类调用指令的情况下,若根据指令执行进程信息,确定目标子应用存在正在执行的指令,则等待正在执行的指令执行结束后,获取目标子应用的最新调用指令,并将最新调用指令与第一预设指令进行匹配;第一预设指令基于目标调用指令确定,第一类调用指令为启动指令、停止指令和更新指令;基于最新调用指令与第一预设指令的匹配结果,确定针对目标子应用的调度结果。
[0197]
在一示例性实施例中,结果确定单元830,还被配置为执行若根据指令执行进程信息,确定目标子应用不存在正在执行的指令,则获取目标子应用的应用状态;基于目标子应用的应用状态,确定针对目标子应用的调度结果。
[0198]
在一示例性实施例中,结果确定单元830,还被配置为执行若目标子应用的应用状态符合目标调用指令对应的预设状态,则创建目标调用指令的执行进程,并获取目标子应用的最新调用指令,将最新调用指令与第二预设指令进行匹配;第二预设指令基于目标调用指令确定;基于最新调用指令与第二预设指令的匹配结果,确定针对目标子应用的调度结果。
[0199]
在一示例性实施例中,结果确定单元830,还被配置为执行在目标调用指令为第二类调用指令的情况下,若根据指令执行进程信息,确定目标子应用存在正在执行的指令,则等待正在执行的指令执行结束后,针对目标子应用执行目标调用指令;第二类调用指令为移除指令;或者,若根据指令执行进程信息,确定目标子应用不存在正在执行的指令,针对目标子应用执行目标调用指令。
[0200]
在一示例性实施例中,上述装置还包括冲突确定单元,被配置为执行在目标调用指令为启动指令,且目标子应用集合中其他子应用的应用状态为停止状态或移除状态的情
况下,确定其他子应用的应用状态与目标调用指令无冲突。
[0201]
在一示例性实施例中,冲突确定单元,还被配置为执行在目标调用指令为其他指令的情况下,确定其他子应用的应用状态与目标调用指令无冲突;其他指令表示除启动指令之外的子应用可执行的指令。
[0202]
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0203]
图9是根据一示例性实施例示出的一种用于实现应用管理方法的电子设备900的框图。例如,电子设备900可以是移动电话、计算机、数字广播终端、消息收发设备、游戏控制台、平板设备、医疗设备、健身设备、个人数字助理等。
[0204]
参照图9,电子设备900可以包括以下一个或多个组件:处理组件902、存储器904、电源组件906、多媒体组件908、音频组件910、输入/输出(i/o)的接口912、传感器组件914以及通信组件916。
[0205]
处理组件902通常控制电子设备900的整体操作,诸如与显示、电话呼叫、数据通信、相机操作和记录操作相关联的操作。处理组件902可以包括一个或多个处理器920来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件902可以包括一个或多个模块,便于处理组件902和其他组件之间的交互。例如,处理组件902可以包括多媒体模块,以方便多媒体组件908和处理组件902之间的交互。
[0206]
存储器904被配置为存储各种类型的数据以支持在电子设备900的操作。这些数据的示例包括用于在电子设备900上操作的任何应用程序或方法的指令、联系人数据、电话簿数据、消息、图片、视频等。存储器904可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram)、电可擦除可编程只读存储器(eeprom)、可擦除可编程只读存储器(eprom)、可编程只读存储器(prom)、只读存储器(rom)、磁存储器、快闪存储器、磁盘、光盘或石墨烯存储器。
[0207]
电源组件906为电子设备900的各种组件提供电力。电源组件906可以包括电源管理系统,一个或多个电源,及其他与为电子设备900生成、管理和分配电力相关联的组件。
[0208]
多媒体组件908包括在所述电子设备900和用户之间的提供输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件908包括前置摄像头和/或后置摄像头。当电子设备900处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是固定的光学透镜系统或具有焦距和光学变焦能力。
[0209]
音频组件910被配置为输出和/或输入音频信号。例如,音频组件910包括麦克风(mic),当电子设备900处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器904或经由通信组件916发送。在一些实施例中,音频组件910还包括扬声器,用于输出音频信号。
[0210]
i/o接口912为处理组件902和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁
定按钮。
[0211]
传感器组件914包括一个或多个传感器,用于为电子设备900提供各个方面的状态评估。例如,传感器组件914可以检测到电子设备900的打开/关闭状态,组件的相对定位,例如所述组件为电子设备900的显示器和小键盘,传感器组件914还可以检测电子设备900或电子设备900组件的位置改变,用户与电子设备900接触的存在或不存在,设备900方位或加速/减速和电子设备900的温度变化。传感器组件914可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件914还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件914还可以包括加速度传感器、陀螺仪传感器、磁传感器、压力传感器或温度传感器。
[0212]
通信组件916被配置为便于电子设备900和其他设备之间有线或无线方式的通信。电子设备900可以接入基于通信标准的无线网络,如wifi,运营商网络(如2g、3g、4g或5g),或它们的组合。在一个示例性实施例中,通信组件916经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件916还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
[0213]
在示例性实施例中,电子设备900可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
[0214]
在一示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器904,上述指令可由电子设备900的处理器920执行以完成上述方法。例如,计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
[0215]
在一示例性实施例中,还提供了一种计算机程序产品,所述计算机程序产品中包括指令,上述指令可由电子设备900的处理器920执行以完成上述方法。
[0216]
需要说明的,上述的装置、电子设备、计算机可读存储介质、计算机程序产品等根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
[0217]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
[0218]
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1