组件加载方法、装置、计算机设备及存储介质与流程

文档序号:25279301发布日期:2021-06-01 17:25阅读:73来源:国知局
组件加载方法、装置、计算机设备及存储介质与流程

本发明涉及计算机技术领域,具体涉及一种组件加载方法、装置、计算机设备及存储介质。



背景技术:

随着网络技术的发展,前端开发逐渐变得重要和复杂,开发人员通常运用javascript脚本语言进行前端开发。在前端开发过程中,会涉及多个模块和组件,由于前端开发脚本语言无法单独运行,需要依赖网页异步加载,因此基于前端的模块和组件的加载方式与其他脚本语言不同。前端模块的加载方式是设置模块名称为全局可访问变量,通过引用模块名称来调用模块,使模块跟随前端浏览器页面的其他文件一起加载。前端组件的加载方式一般分为两种:一种是直接引用所需使用的组件的网络文件地址,使得所需使用的组件跟随页面一起加载;另一种是配置所需使用的组件,利用amd(asynchronousmoduledefinition,异步模块定义)方式和/或cmd(commonmoduledefinition,通用模块定义)方式的组件加载器从网络中加载相应的组件。

当需要更新组件的版本时,在第一种方式中,需要修改所需使用的组件对应的网络文件地址,若多个项目都同时引用了相同的组件,则需要同时修改多个项目中涉及的组件文件地址,而在第二种方式中,需要更新每个项目中所有组件的配置,因此无论在哪种组件加载方式下,开发人员都需要花费较多的时间和精力,并且容易发生错误,导致项目无法运行。



技术实现要素:

本发明实施例提供一种组件加载方法、装置、计算机设备及存储介质,统一了组件的加载方式,当组件更新时,引用组件的项目会实时更新组件,避免逐个修改每个项目中的组件配置。

本发明实施例提供一种组件加载方法,包括:

设置组件加载器,所述组件加载器包括组件集合中各个组件的定义函数和组件版本号,所述定义函数包括组件名称和组件功能函数;

获取所述组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址;

根据所述组件地址下载所述组件集合中未下载的组件,存储所述组件集合中已下载组件的组件名称和组件功能函数的映射关系;

根据所述映射关系,调用所需引用的组件。

相应的,本发明实施例还提供一种组件加载装置,包括:

设置单元,用于设置组件加载器,所述组件加载器包括组件集合中各个组件的定义函数和组件版本号,所述定义函数包括组件名称和组件功能函数;

获取单元,用于获取所述组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址;

下载单元,用于根据所述组件地址下载所述组件集合中未下载的组件,存储所述组件集合中已下载组件的组件名称和组件功能函数的映射关系;

调用单元,用于根据所述映射关系,调用所需引用的组件。

可选的,所述获取单元还用于按照所述定义函数确定所述组件集合中未下载的组件;

根据所述组件加载器获取所述未下载的组件对应的组件名称和组件版本号;

将所述未下载的组件对应的组件名称按照预设规则排序,得到组件名称序列;

将所述未下载的组件对应的组件版本号相加得到组合版本号;

拼接所述组件名称序列和所述组合版本号形成所述组件地址。

可选的,所述组件功能函数包括引用所述组件集合中的组件,所述获取单元还用于获取所述定义函数的字符串形式;

利用正则表达式在所述字符串形式中查找所述定义函数引用的模块和组件;

将所述定义函数引用的模块和/或组件保存至引用数组;

根据所述引用数组确定所述组件集合中未下载的组件。

可选的,所述定义函数引用的模块和组件的命名规范不同,所述获取单元还用于若所述引用数组的长度为零,则判断所述定义函数对应的组件是否为所述组件集合中未下载的组件;

若所述引用数组的长度不为零,则遍历所述引用数组,根据所述命名规范识别出所述引用数组中所述定义函数引用的模块,在存储的组件中识别出所述引用数组中已下载的组件,去除所述引用数组中所述模块、所述已下载的组件和重复的组件,形成更新引用数组,确定所述更新引用数组中的组件为所述组件集合中未下载的组件。

可选的,所述下载单元还用于若根据所述组件地址下载所述组件集合中未下载的组件,则将所述组件集合中未下载的组件划分为第一组件,所述第一组件包括所述组件集合中已下载组件;

获取所述第一组件对应的组件名称和组件功能函数;

利用一全局哈希变量保存所述第一组件对应的组件名称和组件功能函数的映射关系。

可选的,所述调用单元还用于根据所述全局哈希变量,从所述第一组件中查找第二组件,所述第二组件包括所述所需引用的组件;

获取所述第二组件的组件名称;

根据所述映射关系获取所述第二组件的组件名称对应的组件功能函数;

通过调用所述第二组件的组件功能函数,以执行调用所述所需引用的组件。

可选的,所述装置还用于若更新所述组件集合中的组件对应的组件版本号,形成第一组件版本号,则更新包括所述第一组件版本号的组件地址,形成第一组件地址;

根据所述第一组件地址下载所述第一组件版本号对应的更新后组件,存储所述第一组件版本号对应的更新后组件的组件名称和组件功能函数的映射关系。

可选的,所述下载单元还用于设置组件下载跟踪函数;

若所述组件集合中未下载的组件下载完成,则调用所述组件下载跟踪函数发出通知。

同样的,本发明实施例还提供一种计算机设备,包括:

存储器,用于存储计算机程序;

处理器,用于在执行所述组件加载方法任一项的步骤。

此外,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现组件加载方法任一项的步骤。

本发明实施例提供一种组件加载方法、装置、计算机设备及存储介质,设置组件加载器,每次利用组件加载器下载包括的组件集合中未下载的组件,使得组件集合中的各个组件只下载一次,并存储组件集合中已下载组件的组件名称和组件功能函数的映射关系。各个不同的软件项目不必单独配置组件加载功能,可以直接在存储的组件中调用所需引用的组件,统一了所有软件项目调用组件的方法。当组件更新时,只需在设置的组件加载器中更新组件的版本号,使得组件加载器重新获取更新后的组件,所有软件项目可以实时获取更新后的组件,不需要在每个软件项目中修改组件配置,减少开发人员花费的时间和精力,提升了软件项目的运行效率。

附图说明

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

图1是本发明实施例提供的组件加载装置的系统示意图;

图2是本发明实施例提供的组件加载方法的流程示意图;

图3是本发明实施例提供的组件加载方法的另一流程示意图;

图4是本发明实施例提供的组件加载装置的结构示意图;

图5是本发明实施例提供的计算机设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种组件加载方法、装置、计算机设备及存储介质。具体地,本发明实施例的组件加载方法可以由计算机设备执行,其中,该计算机设备可以为终端或者服务器等设备。该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(personalcomputer,pc)、个人数字助理(personaldigitalassistant,pda)等终端设备。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络服务、以及大数据和人工智能平台等基础云计算服务的云服务器。

请参阅图1,图1为本发明实施例提供的组件加载装置的系统示意图。该系统可以包括至少一个终端和至少一个服务器。用户持有的终端可以通过不同的网络连接到服务器,例如,网络可以为无线网络或者有线网络,无线网络可以为无线局域网(wlan)、局域网(lan)、蜂窝网络、2g网络、3g网络、3g网络、4g网络、5g网络等,终端用于设置组件加载器,组件加载器包括组件集合中各个组件的定义函数和组件版本号,定义函数包括组件名称和组件功能函数;然后,获取组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址;接着,根据组件地址从服务器中下载组件集合中未下载的组件,存储组件集合中已下载组件的组件名称和组件功能函数的映射关系;最后,根据映射关系,在不同的项目中调用所需引用的组件。服务器用于存储各个组件的相关文件。

以下分别进行详细说明。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。

本实施例将从组件加载装置的角度进行描述,该组件加载装置具体可以集成在终端中,该终端可以包括智能手机、笔记本电脑、平板电脑以及个人计算机等设备。

本发明实施例提供的一种组件加载方法,该方法可以由终端的处理器执行,如图2所示,该组件加载方法的具体流程可以如下:

步骤201、设置组件加载器,其中,组件加载器包括组件集合中各个组件的定义函数和组件版本号,定义函数包括组件名称和组件功能函数。

在本申请实施例中,组件加载器用于从服务器中下载前端页面加载过程中所需要的组件,从而统一所有软件项目调用组件的方法,即软件项目可以在组件加载器下载的组件中直接调用所需引用的组件,各个不同的软件项目不必单独配置组件加载功能。可以参照cmd方式,在组件加载器中配置多个组件的定义函数和组件版本号,组件加载器中包括两个核心函数,分别为组件的定义函数和组件加载函数,组件的定义函数通常使用nie.define(p1,p2,…,pn)命名,其中,p1,p2,…,pn为参数,组件加载函数通常使用nie.require(q1,q2,…,qn)命名,其中,q1,q2,…,qn为参数。

其中,组件的定义函数可以为各个组件命名,组件集合中各个组件的组件名称互不相同,使得开发人员可以根据组件集合中各个组件的组件名称来区分不同的组件,当在不同的软件项目中调用所需的组件时,可以引用所需组件对应的组件名称对该所需组件进行调用,从而避免调用错误的问题。组件的定义函数还可以包括组件功能函数,组件功能函数可以包括组件加载函数,组件功能函数利用组件加载函数引用组件集合中的组件,被引用组件辅助引用组件实现相应的功能,使得多个组件相互结合共同产生作用。组件功能函数通常用function(t1,t2,…,tn),其中,t1,t2,…,tn为参数。

在本申请实施例中,前端页面加载可以是对模块和/或组件的加载,模块一般指的是前端开发中一段能实现一个基础功能或者逻辑的代码片段和/或函数。组件(component)是对数据和方法的简单封装,是一个特定对象,一般是基于多个模块实现,以及配合前端开发计算机语言中css(cascadingstylesheets,层叠样式表)和html(hypertextmarkuplanguage,超级文本标记语言)等的一个复杂、完整的功能实现。在前端开发过程中,可以将重复使用率高的功能封装成为一个组件,从而提供给软件项目直接使用,开发人员在进行软件项目开发时,只需要根据需要引用相关的组件,不需要关注所引用组件内部的实现过程,按照组件说明调用即可完成组件的使用,在软件项目中实现所引用组件的功能,因此大大提升开发效率,减少在软件项目中对组件不必要的重复开发与测试。

在一些实施例中,组件通常用javascript脚本语言编写,因此,组件最终会以javascript文件形式存在于服务器中,在前端页面加载的同时,会利用组件加载器加载所引用的组件,即利用组件加载器在服务器中下载组件的javascript文件,并缓存至前端浏览器中,以供软件项目调用。

在一实施例中,组件集合中包括前端页面加载所用的全部组件,例如,用户界面组件,图表组件,和/或扩展组件等。

在一种实施方式中,组件版本号为组件每个版本的标识号,当组件更新时,例如组件的功能和/或结构等发生改变,组件的版本号根据预设的更新规则也随之发生改变,组件版本号的设置格式和更新规则不受限制,可以根据实际情况灵活设置,例如,组件版本号可以为0、1、…、n的自然数,组件版本号的更新规则可以是逐渐递增,例如,设置组件的初始版本号为0,当组件发生更新时,组件的版本号在原先的基础上增加1。

步骤202、获取组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址。

在一种实施例中,组件通常以javascript文件形式存在于服务器中,利用组件加载器在服务器中下载组件的javascript文件时,需要获取未下载组件的组件地址,即未下载组件的javascript文件的网络地址,每个组件都具有一个唯一的网络地址,用于标识组件在网络中的位置。

在本申请的一个或多个实施例中,上述步骤202中“获取组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址”可通过如下步骤s2021至步骤s2025实现:

步骤s2021:按照定义函数确定组件集合中未下载的组件。

在本申请实施例中,组件加载器设置了组件集合中各个组件的定义函数和组件版本号,每个组件的定义函数中可能包含引用的其他组件,为了确保组件集合中所有的组件只下载一遍,并且不重复向服务器发出下载请求,从而提高组件的下载效率,所以按照每个组件的定义函数为查找单位,依次确定每个定义函数对应的组件以及每个定义函数中引用的其他组件是否属于未下载组件,直至组件加载器所包括的组件集合中不存在未下载组件。

在一种实施方式中,若组件加载器中存在多个定义函数,对多个定义函数的查找顺序不受限制,可以根据实际情况灵活设置,例如,可以按照组件加载器中多个定义函数的编写顺序来查找,也可以按照每个定义函数所引用的其他组件的数量的大小顺序来查找。

步骤s2022:根据组件加载器获取未下载的组件对应的组件名称和组件版本号。

在本申请实施例中,确定组件集合中未下载的组件之后,根据定义函数获取未下载的组件对应的组件名称,然后获取各个组件名称对应的组件版本号。

步骤s2023:将未下载的组件对应的组件名称按照预设规则排序,得到组件名称序列。

在本申请实施例中,若组件集合中存在多个未下载的组件,则将获取的多个未下载组件的组件名称按照预设规则排序,得到组件名称序列,从而避免利用生成的组件地址向服务器请求相同的内容。其中,预设规则的设定不受限制,可以根据实际情况灵活设定,比如,可以对未下载组件的组件名称的首字母进行升序排序。需要说明是的,利用不同预设规则形成的名称序列,其组成的组件地址不同,因而根据不同的组件地址从服务器中下载的组件也不同。

步骤s2024:将未下载的组件对应的组件版本号相加得到组合版本号。

例如,若未下载的组件a的组件版本号为1,未下载的组件b的组件版本号为3,未下载的组件c的组件版本号为4,则组合版本号为8。

步骤s2025:拼接组件名称序列和组合版本号形成组件地址。

在本申请实施例中,用拼接符号连接获取的组件名称序列和组合版本号,其中,拼接符号可以为等号、问号和/或感叹号等符号。

在一些实施例中,组件地址还可以包括域名,可以获取该终端所属域名,将域名和组件名称序列以及组合版本号拼接起来,形成组件地址。其中,域名、组件名称序列以及组合版本号的拼接顺序不受限制,可以根据实际情况灵活设置。

在本申请实施例中,上述步骤s2021中“按照定义函数确定组件集合中未下载的组件”可通过如下步骤s20211至步骤s20214实现:

步骤s20211:获取定义函数的字符串形式。

在本申请实施例中,为了确定组件加载器中的定义函数对应的组件是否为未下载的组件,以及每个定义函数的组件功能函数所引用的组件是否为未下载的组件,需要获取每个定义函数的内容,可以通过字符串获取方法获取每个定义函数的字符串形式,从而实现不执行每个定义函数但简单有效地获取每个定义函数的内容,提升组件加载器的运行效率。其中,常用的字符串获取方法可以为tostring(r1,r2,…,rn),r1,r2,…,rn为参数。

步骤s20212:利用正则表达式在字符串形式中查找定义函数引用的模块和组件。

在本申请实施例中,正则表达式是对字符串和特殊字符操作的一种逻辑公式,即用事先定义好的一些特定字符以及这些特定字符的组合,组成一个“规则字符串”,根据预设的过滤逻辑,利用这个“规则字符串”表达,对字符串形式的文本进行过滤查找,从而得出过滤查找结果。比如,当获取定义函数的字符串形式后,可以利用正则表达式(/nie\.require\([^\)]+\)/g)查找定义函数的字符串文本,从而获取定义函数具体引用的组件和/或模块。

步骤s20213:将定义函数引用的模块和/或组件保存至引用数组。

在本申请实施例中,可以将组件和/或模块的名称保存至引用数组,也可以将组件和/或模块的功能函数保存至引用数组。

步骤s20214:根据引用数组确定组件集合中未下载的组件。

在一实施例中,将定义函数对应的组件以及定义函数引用的组件和/或模块保存至引用数组之后,遍历引用数组,从而在引用数组中查找组件集合中未下载的组件。

在本申请的一种实施方式中,上述步骤s20214中“根据引用数组确定组件集合中未下载的组件”可通过如下步骤s202141至步骤s202142实现:

步骤s202141:若引用数组的长度为零,则判断定义函数对应的组件是否为组件集合中未下载的组件。

在本申请实施例中,利用引用数组的长度为零,则表明定义函数对应的组件没有引用其他的组件,根据存储的已下载组件判断定义函数对应的组件是否为未下载的组件。

步骤s202142:若引用数组的长度不为零,则遍历引用数组,根据命名规范识别出引用数组中定义函数引用的模块,在存储的组件中识别出引用数组中已下载的组件,去除引用数组中模块、已下载的组件和重复的组件,形成更新引用数组,确定更新引用数组中的组件为组件集合中未下载的组件。

在本申请实施例中,若引用数组的长度不为零,则表明定义函数对应的组件引用了其他组件或模块。由于模块不需要从服务器中下载,为了避免组件加载器向服务器发起模块下载请求,以及向服务器发起重复的组件下载请求,则需要遍历引用数组,根据前端模块和前端组件命名规范的不同识别出引用数组中定义函数引用的模块,去除引用数组中模块、已下载的组件和重复的组件,形成更新引用数组。

在一实施例中,首先判断更新引用数组的长度是否为零,若更新引用数组的长度为零,则确定定义函数对应的组件及其引用的组件都不是未下载的组件;若更新引用数组的长度不为零,则可以确定更新引用数组中的组件为组件集合中未下载的组件。

步骤203、根据组件地址下载组件集合中未下载的组件,存储组件集合中已下载组件的组件名称和组件功能函数的映射关系。

在本申请实施例中,获取组件地址之后,可以利用html中的script标签,设置src属性为组件地址,向服务器发送包括组件地址的下载请求链接,存储组件javascript文件的服务器具有线上文件合并功能,即该服务器支持动态多个文件名在同一个链接中出现,当该服务器接收具有多个文件名的下载请求链接时,可以返回多个文件名对应的javascript文件合并后的结构。例如,若该服务器接收到http://a.com/a.js,b.js,c.js的下载请求链接,则服务器返回a、b、和c三个javascript文件合并后的内容。

在本申请的一个或多个实施例中,步骤203中“根据组件地址下载组件集合中未下载的组件,存储组件集合中已下载组件的组件名称和组件功能函数的映射关系”可通过如下步骤s2031至步骤s2033实现:

步骤s2031:若根据组件地址下载组件集合中未下载的组件,则将组件集合中未下载的组件划分为第一组件,第一组件包括组件集合中已下载组件。

步骤s2032:获取第一组件对应的组件名称和组件功能函数。

步骤s2033:利用一全局哈希变量保存第一组件对应的组件名称和组件功能函数的映射关系。

在本申请实施例中,为了使软件项目更好的查找所需引用的组件,并调用所需引用的组件对应的组件功能函数,从而将组件集合中已下载组件的组件名称、组件功能函数及其映射关系存储起来,使得软件项目可以根据组件名称获取对应的组件功能函数。

在本申请的一种实施方式中,全局哈希变量通常是一种关联数组,数组中的元素结构是key-value对,即通过一个唯一的键(key)来存取对应的值(value),键(key)与存取的值(value)是一对一映射关系。比如,可以将组件名称作为键(key)来存储,组件名称对应的组件功能函数作为值(value)来存储。

在一些实施例中,步骤203中“存储组件集合中已下载组件的组件名称和组件功能函数的映射关系”之前,需要发出未下载的组件已经完成下载的提醒或通知,使得存储组件所包含的映射关系的进程可以获取并执行开始存储的指令,存储组件集合中已下载组件的组件名称和组件功能函数的映射关系,通知功能可通过以下步骤s2034至步骤s2035实现:

步骤s2034:设置组件下载跟踪函数。

步骤s2035:若组件集合中未下载的组件下载完成,则调用组件下载跟踪函数发出通知。

在本申请实施例中,组件下载跟踪函数可以为onload函数。当未下载的组件下载完成后,前端浏览器会自发调用onload函数,告知组件的javascript文件下载完毕。

步骤204、根据映射关系,调用所需引用的组件。

在本申请的一个或多个实施例中,步骤204中“根据映射关系,调用所需引用的组件”可通过如下步骤2041至步骤2044实现:

步骤2041:根据全局哈希变量,从第一组件中查找第二组件,第二组件包括所需引用的组件。

步骤2042:获取第二组件的组件名称。

步骤2043:根据映射关系获取第二组件的组件名称对应的组件功能函数。

步骤2044:通过调用第二组件的组件功能函数,以执行调用所需引用的组件。

在本申请实施例中,当软件项目执行调用所需引用的组件的相关代码时,获取代码设置参数中的组件名称,从存储的已下载组件中查找组件名称对应的组件功能函数,利用调用函数执行所需引用组件的组件功能函数,返回执行结构,实现对所需引用组件的调用。其中,调用函数可以为eval函数,eval函数用于将括号内的字符串视为语句并运行。

上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。

本发明实施例提供的组件加载方法,设置组件加载器,每次利用组件加载器下载包括的组件集合中未下载的组件,使得组件集合中的各个组件只下载一次,并存储组件集合中已下载组件的组件名称和组件功能函数的映射关系。各个不同的项目不必单独配置组件加载功能,可以直接在存储的组件中调用所需引用的组件,统一了所有项目调用组件的方法。当组件更新时,只需在设置的组件加载器中更新组件的版本号,使得组件加载器重新获取更新后的组件,所有项目可以实时获取更新后的组件,不需要在每个项目中修改组件配置,减少开发人员的花费的时间和精力,提升了项目的运行效率。

请参阅图3,图3为本发明实施例提供的组件加载方法的另一流程示意图。该方法的具体流程可以如下:

步骤301、设置组件加载器,组件加载器包括组件集合中各个组件的定义函数。

例如,可以参照cmd方式设置组件加载器,在组件加载器中配置多个组件的定义函数nie.define(p1,p2,…,pn),并且利用自然数设置组件版本号。组件的定义函数可以包括组件功能函数function(t1,t2,…,tn),组件功能函数中可以设置组件加载函数nie.require(q1,q2,…,qn),组件功能函数可以利用组件加载函数引用组件集合中的组件。

步骤302、获取各个定义函数的字符串形式,在字符串形式中查找定义函数引用的模块和/或组件。

例如,利用tostring(r1,r2,…,rn)方法获取组件加载器中每个定义函数的字符串形式,利用正则表达式(/nie\.require\([^\)]+\)/g)查找定义函数的字符串文本,从而获取定义函数具体引用的组件和/或模块。

步骤303、将定义函数引用的模块和/或组件保存至引用数组。

在本申请实施例中,将定义函数引用的模块对应的模块名称和/或引用的组件对应的组件名称保存至引用数组中。

步骤304、判断引用数组的长度是否为零。

步骤305、若是,则执行步骤313,若否,则执行步骤306。

步骤306、遍历引用数组,去除引用数组中的模块、已下载的组件和重复的组件,形成更新引用数组。

在本申请实施例中,若引用数组的长度为零,则表明定义函数对应的组件没有引用其他组件和/或模块,不需要下载其他组件便可以调用该定义函数对应的组件。若引用数组的长度不为零,则表明定义函数对应的组件具有引用的模块和/或组件,则遍历引用数组,根据模块和组件的命名规范的不同,识别出引用数组中的模块,同时查找出引用数组中已下载的组件和重复的组件,去除引用数组中的模块、已下载的组件和重复的组件,形成更新引用数组,确定更新引用数组中的组件为未下载组件。

步骤307、判断更新引用数组的长度是否为零。

步骤308、若是,则执行步骤313,若否,则执行步骤309。

在本申请实施例中,若更新引用数组的长度为零,则表明定义函数对应的组件所引用的其他组件都已经下载完成,不需要在重复下载,可以直接调用该定义函数对应的组件。若更新引用数组的长度不为零,则表明定义函数对应的组件所引用的其他组件还有未下载的,则确定更新引用数组中的组件为未下载组件。

步骤309、获取未下载的组件对应的组件名称和组件版本号,形成组件地址。

在本申请实施例中,获取未下载组件的组件名称,将所有未下载组件的组件名称按照首字母进行升序排序,形成组件名称序列,获取未下载组件的组件版本号,将所有未下载组件的组件版本号相加,得到组合版本号,获取终端所属域名,然后,按照先后顺序将域名、未下载组件的组件名称序列和组件版本号之间利用拼接符号连接,形成组件地址。

步骤310、根据组件地址下载未下载的组件,若下载完成,则调用组件下载跟踪函数发出通知,存储组件集合中已下载组件的组件名称和组件功能函数的映射关系。

在本申请实施例中,利用html中的script标签,设置src属性为组件地址,向服务器发送包括组件地址的下载请求链接,当该服务器接收具有多个文件名的下载请求链接时,返回多个文件名对应的javascript文件合并后的结构。设置onload函数为组件下载跟踪函数,若终端接收到服务器发送的javascript合并文件,调用onload函数发出下载完成通知,使得终端利用一全局哈希变量保存下载完成组件的组件名称和组件功能函数的映射关系。

步骤312、从存储的已下载组件中获取所需引用的组件名称。

步骤313、根据映射关系,调用所需引用的组件。

在本申请实施例中,不同软件项目在存储的已下载组件中查找各自所引用的组件名称,根据组件名称和组件功能函数的映射关系,获取组件名称对应的组件功能函数,利用eval函数调用所需引用组件的组件功能函数,返回执行结构,实现对所需引用组件的调用。

上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。

本发明实施例提供的组件加载方法,设置组件加载器,每次利用组件加载器下载包括的组件集合中未下载的组件,使得组件集合中的各个组件只下载一次,并存储组件集合中已下载组件的组件名称和组件功能函数的映射关系。各个不同的项目不必单独配置组件加载功能,可以直接在存储的组件中调用所需引用的组件,统一了所有项目调用组件的方法。当组件更新时,只需在设置的组件加载器中更新组件的版本号,使得组件加载器重新获取更新后的组件,所有项目可以实时获取更新后的组件,不需要在每个项目中修改组件配置,减少开发人员的花费的时间和精力,提升了项目的运行效率。

为便于更好的实施本发明实施例的组件加载方法,本发明实施例还提供一种组件加载装置。请参阅图4,图4为本发明实施例提供的组件加载装置的结构示意图。该组件加载装置可以包括设置单元401、获取单元402、下载单元403和调用单元404。

其中,设置单元401,用于设置组件加载器,所述组件加载器包括组件集合中各个组件的定义函数和组件版本号,所述定义函数包括组件名称和组件功能函数;

获取单元402,用于获取所述组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址;

下载单元403,用于根据所述组件地址下载所述组件集合中未下载的组件,存储所述组件集合中已下载组件的组件名称和组件功能函数的映射关系;

调用单元404,用于根据所述映射关系,调用所需引用的组件。

可选的,获取单元402还用于按照所述定义函数确定所述组件集合中未下载的组件;

根据所述组件加载器获取所述未下载的组件对应的组件名称和组件版本号;

将所述未下载的组件对应的组件名称按照预设规则排序,得到组件名称序列;

将所述未下载的组件对应的组件版本号相加得到组合版本号;

拼接所述组件名称序列和所述组合版本号形成所述组件地址。

可选的,组件功能函数包括引用所述组件集合中的组件,获取单元402还用于获取所述定义函数的字符串形式;

利用正则表达式在所述字符串形式中查找所述定义函数引用的模块和组件;

将所述定义函数引用的模块和/或组件保存至引用数组;

根据所述引用数组确定所述组件集合中未下载的组件。

可选的,定义函数引用的模块和组件的命名规范不同,获取单元402还用于若所述引用数组的长度为零,则判断所述定义函数对应的组件是否为所述组件集合中未下载的组件;

若所述引用数组的长度不为零,则遍历所述引用数组,根据所述命名规范识别出所述引用数组中所述定义函数引用的模块,在存储的组件中识别出所述引用数组中已下载的组件,去除所述引用数组中所述模块、所述已下载的组件和重复的组件,形成更新引用数组,确定所述更新引用数组中的组件为所述组件集合中未下载的组件。

可选的,下载单元403还用于若根据所述组件地址下载所述组件集合中未下载的组件,则将所述组件集合中未下载的组件划分为第一组件,所述第一组件包括所述组件集合中已下载组件;

获取所述第一组件对应的组件名称和组件功能函数;

利用一全局哈希变量保存所述第一组件对应的组件名称和组件功能函数的映射关系。

可选的,调用单元404还用于根据所述全局哈希变量,从所述第一组件中查找第二组件,所述第二组件包括所述所需引用的组件;

获取所述第二组件的组件名称;

根据所述映射关系获取所述第二组件的组件名称对应的组件功能函数;

通过调用所述第二组件的组件功能函数,以执行调用所述所需引用的组件。

可选的,所述装置还用于若更新所述组件集合中的组件对应的组件版本号,形成第一组件版本号,则更新包括所述第一组件版本号的组件地址,形成第一组件地址;

根据所述第一组件地址下载所述第一组件版本号对应的更新后组件,存储所述第一组件版本号对应的更新后组件的组件名称和组件功能函数的映射关系。

可选的,下载单元403还用于设置组件下载跟踪函数;

若所述组件集合中未下载的组件下载完成,则调用所述组件下载跟踪函数发出通知。

上述所有的技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。

本发明实施例提供的组件加载装置,通过设置单元401设置组件加载器,然后,利用获取单元402获取组件加载器包括的组件集合中未下载的组件,之后,通过下载单元403利用组件加载器下载组件集合中未下载的组件,使得组件集合中的各个组件只下载一次,并存储组件集合中已下载组件的组件名称和组件功能函数的映射关系。各个不同的项目不必单独配置组件加载功能,可以直接利用调用单元404在存储的组件中调用所需引用的组件,统一了所有项目调用组件的方法。当组件更新时,只需在设置的组件加载器中更新组件的版本号,使得组件加载器重新获取更新后的组件,所有项目可以实时获取更新后的组件,不需要在每个项目中修改组件配置,减少开发人员的花费的时间和精力,提升了项目的运行效率。

相应的,本发明实施例还提供一种计算机设备,该计算机设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机、个人数字助理等终端设备。如图5所示,图5为本发明实施例提供的计算机设备的结构示意图。该计算机设备500包括有一个或者一个以上处理核心的处理器501、有一个或一个以上计算机可读存储介质的存储器502及存储在存储器502上并可在处理器上运行的计算机程序。其中,处理器501与存储器502电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

处理器501是计算机设备500的控制中心,利用各种接口和线路连接整个计算机设备500的各个部分,通过运行或加载存储在存储器502内的软件程序和/或模块,以及调用存储在存储器502内的数据,执行计算机设备500的各种功能和处理数据,从而对计算机设备500进行整体监控。

在本发明实施例中,计算机设备500中的处理器501会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能:

设置组件加载器,组件加载器包括组件集合中各个组件的定义函数和组件版本号,定义函数包括组件名称和组件功能函数;

获取组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址;

根据组件地址下载组件集合中未下载的组件,存储组件集合中已下载组件的组件名称和组件功能函数的映射关系;

根据映射关系,调用所需引用的组件。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

可选的,如图5所示,计算机设备500还包括:触控显示屏503、射频电路504、音频电路505、输入单元506以及电源507。其中,处理器501分别与触控显示屏503、射频电路504、音频电路505、输入单元506以及电源507电性连接。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

触控显示屏503可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏503可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器501,并能接收处理器501发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器501以确定触摸事件的类型,随后处理器501根据触摸事件的类型在显示面板上提供相应的视觉输出。在本发明实施例中,可以将触控面板与显示面板集成到触控显示屏503而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏503也可以作为输入单元506的一部分实现输入功能。

在本发明实施例中,通过处理器501执行组件加载器,下载组件加载器包括组件集合中各个组件在网络中的文件,并且利用处理器501存储组件集合中已下载组件的组件名称和组件功能函数的映射关系。当在不同的项目中配置组件调用函数时,利用处理器501执行不同项目中的组件调用函数,根据存储的映射关系,调用不同项目所需引用的组件。

射频电路504可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。

音频电路505可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路505可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路505接收后转换为音频数据,再将音频数据输出处理器501处理后,经射频电路504以发送给比如另一计算机设备,或者将音频数据输出至存储器502以便进一步处理。音频电路505还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。

输入单元506可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

电源507用于给计算机设备1000的各个部件供电。可选的,电源507可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源507还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

尽管图5中未示出,计算机设备500还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

由上可知,本实施例提供的计算机设备,可以设置具有组件下载功能的组件加载器,该组件加载器以包括的各个组件的定义函数为查找基础,确定组件加载器包括的组件集合中未下载的组件,并下载组件加载器中配置的未下载组件版本号对应的文件,利用一全局哈希变量存储已下载组件的组件名称和组件功能函数的映射关系,使得不同的软件项目都可以直接调用组件加载器下载的组件,不再在各个软件项目中配置组件加载函数,使得各个软件项目各自去下载所需引用的组件。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本发明实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本发明实施例所提供的任一种组件加载方法中的步骤。例如,该计算机程序可以执行如下步骤:

设置组件加载器,组件加载器包括组件集合中各个组件的定义函数和组件版本号,定义函数包括组件名称和组件功能函数;

获取组件集合中未下载的组件对应的组件名称和组件版本号,形成组件地址;

根据组件地址下载组件集合中未下载的组件,存储组件集合中已下载组件的组件名称和组件功能函数的映射关系;

根据映射关系,调用所需引用的组件。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

其中,该存储介质可以包括:只读存储器(readonlymemory,rom)、随机存取记忆体(randomaccessmemory,ram)、磁盘或光盘等。

由于该存储介质中所存储的计算机程序,可以执行本发明实施例所提供的任一种组件加载方法中的步骤,因此,可以实现本发明实施例所提供的任一种组件加载方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

以上对本发明实施例所提供的一种组件加载方法、装置、计算机设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想;本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的范围。

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