一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

检测方法、代码包处理方法、运行控制方法及计算设备与流程

2021-11-05 19:20:00 来源:中国专利 TAG:


1.本技术实施例涉及计算机技术领域,尤其涉及一种检测方法、代码包处理方法、运行控制方法及计算设备。


背景技术:

2.如何优化程序运行速度是本领域技术人员普通需要解决的技术问题之一。
3.而发明人在实现本发明的过程中发现,依赖运行时系统(runtime system)开发或运行的程序,如依赖java运行环境开发或运行的java程序,依赖node.js(node.javascript,一种javascript的运行环境)开发或运行的javascript程序等,常会涉及模块之间的互相调用,意即在一个模块中会请求加载另一个模块,以引入和使用另一个模块。
4.作为程序的基本组成部分,模块用以提供相应功能。模块加载主要包括以下几个操作:首先,基于请求加载的模块的模块标识进行寻址,查找请求加载的模块是否存在,并确定其绝对路径;之后,基于绝对路径查找缓存确定是否已加载该模块,若是,则从缓存中读取保存的文件源代码,否则从绝对路径索引文件位置处读取文件源代码,并将其保存至缓存;之后,编译并执行文件源代码即可以完成模块加载。
5.由于模块加载需要经过寻址、查找缓存、以及编译并执行等操作,发明人发现这些操作花费时间较长,是影响程序运行速度的原因之一。


技术实现要素:

6.本技术实施例提供一种检测方法、代码包处理方法、运行控制方法及计算设备,用以解决现有技术中影响程序运行速度的技术问题。
7.第一方面,本技术实施例中提供了一种检测方法,包括:
8.根据所述模块标识的寻址结果,确定所述第二模块的第二文件路径;
9.建立所述第一模块的第一文件路径、所述第二文件路径及所述模块标识的对应关系,并保存所述对应关系至所述目标程序的目标文件;
10.其中,所述目标文件用于在所述第一模块请求加载所述第二模块的情况下,基于所述第一文件路径及所述模块标识查找所述目标文件以确定对应的所述第二文件路径。
11.第二方面,本技术实施例中提供了一种代码包处理方法,包括:
12.获取目标程序的初始代码包;
13.执行所述代码包以运行所述目标程序,并检测所述目标程序的第一模块请求加载的第二模块的模块标识;
14.根据所述模块标识的寻址结果,确定所述第二模块的第二文件路径;
15.建立所述第一模块的第一文件路径、所述第二文件路径及所述模块标识的对应关系,并保存所述对应关系至所述目标程序的目标文件;
16.根据所述目标文件更新所述代码包。
17.第三方面,本技术实施例中提供了一种运行控制方法,包括:
18.在目标程序的第一模块请求加载第二模块的情况下,确定所述第二模块的模块标识以及所述第一模块的第一文件路径;
19.根据所述模块标识以及所述第一文件路径,从目标文件查找对应的第二文件路径;所述目标文件存储所述第一文件路径、所述模块标识及所述第二文件路径的对应关系;所述第二文件路径预先寻址获得;
20.根据所述第二文件路径获取文件源代码;
21.编译并执行所述文件源代码。
22.第四方面,本技术实施例中提供了一种计算设备,包括处理组件以及存储组件;
23.所述存储组件存储一个或多个计算机指令;所述一个或多个计算机指令用以被所述处理组件调用执行,以实现如上述第一方面所述的检测方法,或者实现如上述第二方面所述的代码处理方法,或者实现如上述第三方面所述的所述的运行控制方法。
24.本技术实施例中,运行目标程序并检测目标程序中的第一模块请求加载的第二模块的模块标识,并根据所述模块标识的寻址结果,获得第二模块的第二文件路径;之后建立第一模块的第一文件路径、所述第二文件路径以及所述模块标识的对应关系,并保存所述对应关系至所述目标程序的目标文件中;从而在目标程序中的该第一模块请求加载该第二模块时,可以首先查找目标文件,从该目标文件保存的对应关系中确定第二模块的第二文件路径,基于该第二文件路径可以获取文件源代码并编译执行,通过在目标文件中保存对应关系,目标程序运行时即无需执行寻址操作即可以确定文件路径并获得文件源代码,优化了模块寻址时间,可以提高目标程序的运行速度,且仅将目标程序运行时命中的对应关系进行保存,可以降低目标文件的保存容量。
25.本技术的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
26.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
27.图1示出了本技术提供的一种检测方法一个实施例的流程图;
28.图2示出了本技术提供的一种检测方法又一个实施例的信令图;
29.图3示出了本技术提供的一种代码包处理方法一个实施例的流程图;
30.图4示出了本技术提供的一种运行控制方法一个实施例的流程图;
31.图5示出了本技术实施例在一个实际应用中的应用场景交互示意图;
32.图6示出了本技术提供的一种检测装置一个实施例的结构示意图;
33.图7示出了本技术提供的一种计算设备一个实施例的结构示意图;
34.图8示出了本技术提供的一种代码包处理装置一个实施例的结构示意图;
35.图9示出了本技术提供的一种计算设备又一个实施例的结构示意图;
36.图10示出了本技术提供的一种运行控制装置一个实施例的结构示意图;
37.图11示出了本技术提供的一种目标程序一个实施例的结构示意图;
38.图12示出了本技术提供的一种计算设备又一个实施例的结构示意图。
具体实施方式
39.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。
40.在本技术的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
41.本技术实施例的技术方案可以适用于依赖运行时系统开发或运行的程序,应用于在一个模块中请求加载另一个模块的使用场景。
42.为了方便理解本技术的技术方案,下面首先对本技术实施例中可能涉及的技术术语进行解释说明:
43.运行时系统(runtime system):又称为运行环境(runtime environment),是指一种把半编译的运行码在目标机器上运行的环境,运行时系统向下封装操作系统的资源接口,向上提供编程框架的运行时支持,包括优化调度、内存管理、进程管理、错误处理等,进行程序开发或运行时,需要首先安装运行时系统,运行时系统比如包括常见的java运行环境、node.js等。
44.node.js:一种基于chrome v8(也简称为v8,一种开源的javascript引擎)引擎的javascript运行环境。
45.模块:程序的基本组成部分,用于提供相应功能。在node.js中,一个模块即是指一个node.js文件,这个文件可能是javascript代码、json或者编译过的c/c 扩展。
46.核心模块:官方提供模块,内置于运行时系统中,核心模块直接使用模块名称进行加载。
47.文件模块:包括用户自定义模块以及第三方提供的第三方模块。用户自定义模块使用路径进行加载,路径可以是文件绝对路径或者基于当前模块的文件相对路径,通常是以“/”、“./”或“../”开头的字符串,文件绝对路径以“/”开头,文件相对路径以“./”或“../”开头,其中,“./”表示上级目录,“../”表示上上级目录;第三方模块由第三方提供,需要下载安装。以node.js为例,node.js中是由npm(node package manager node,包管理工具)管理第三方模块,第三方面模块下载安装于node_modules(存放包管理工具下载安装的包的文件夹)。第三方模块使用模块名称加载,加载时会首先在当前文件目录的node_modules目录下查找是否存在,若否,则继续从当前文件目录的上级目录的node_modules目录下查找,如果还没找到就继续向上层文件目录查找,直到找到对应的模块或者到达根目录。
48.require():node.js中的加载函数,用以在一个模块中引入并使用另一个模块。
49.结合背景技术的描述可知,由于模块加载时,需要执行寻址、查找缓存、以及编译并执行的操作,耗费时间较长,从而会影响程序运行速度。那么如何优化模块加载过程就称为解决程序运行速度的主要技术问题。发明人在实现本技术的过程中研究发现,尽管原生
缓存机制会将模块加载的文件源代码进行缓存,使得不一定每次都重新读取文件源代码,但是每一次模块加载仍需要首先进行寻址来确定请求加载模块的绝对路径,从而才能基于绝对路径去缓存中查找,因此,模块加载耗费时间较长其中一个原因是因为寻址时间较长,特别是对于第三方模块的加载,需要不断从不同目录中递归查找并判断模块是否存在,每一次判断模块是否存在,都需要进出一次操作系统的内核调用,导致一次模块加载的耗时较长。
50.发明人进一步发现,在一个模块中加载另一个模块时,比如对于在a模块中请求加载c模块,以及在b模块中请求加载c模块,最终寻址得到的c模块的绝对路径是不同。
51.据此,经过上述一系列研究提出了本技术的技术方案,在本技术实施例中,通过运行目标程序,以检测目标程序中的第一模块请求加载的第二模块的模块标识;根据模块标识对应的寻址结果,可以确定第二模块的第二文件路径;建立第一模块的第一文件路径、第二文件路径及模块标识的对应关系,并保存对应关系至目标程序的目标文件中;从而目标程序运行过程中,当第一模块请求加载第二模块,可以基于第一模块第一文件路径及第二模块的模块标识,查找目标文件以确定对应的第二文件路径,基于该第二文件路径即可以获取文件源代码并编译执行,从而可以无需进行寻址即可以获得第二模块的第二文件路径,基于该第二文件路径可以获取文件源代码并编译执行,本技术实施例通过在目标文件中保存对应关系,目标程序运行时无需执行寻址操作即可以确定文件路径,优化了模块寻址时间,可以提高目标程序的运行速度,且通过运行目标程序获得对应关系,可以仅将程序运行命中的对应关系进行保存,减少目标文件的存储容量。
52.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
53.图1为本技术实施例提供的一种检测方法一个实施例的流程图,该方法可以包括以下几个步骤:
54.101:检测目标程序的第一模块请求加载的第二模块的模块标识。
55.其中,第一模块可以是指目标程序中的任意一个模块,对于请求加载模块的任意一个模块均可以按照本技术技术方案执行。
56.可选地,实际应用中,往往对于程序启动速度要求较高,本技术技术方案可以具体用于优化程序启动速度,因此,该第一模块可以是指目标程序启动阶段所运行的任意一个模块。
57.该目标程序可以是指依赖运行时系统开发并运行的程序,其可以是指客户端程序或者服务端程序等。
58.第一模块请求加载的模块标识可以从第一模块调用的加载函数的请求参数中确定。模块标识可以包括模块名称、文件绝对路径或文件相对路径。
59.其中,确定目标程序中的第一模块请求加载的模块标识可以通过对目标程序的代码包进行分析确定。
60.此外,由于目标程序运行时并非所有模块均会加载,因此,可选地,也可以是通过运行目标程序,通过对目标程序运行过程中涉及的模块加载操作进行检测获得第一模块请
求加载的模块标识,使得可以仅对目标程序运行时需要加载的模块进行处理,以降低目标文件的保存容量。因此,可选地,检测目标程序的第一模块请求加载的第二模块的模块标识可以是:
61.运行目标程序,检测目标程序的第一模块请求加载的第二模块的模块标识。
62.其中,可以是在实际运行环境中运行目标程序的情况下执行本实施例的技术方案,具体可以是在目标程序首次在实际运行环境中运行时执行,实际运行环境可以是指目标程序发布之后的线上环境。当然,也可以是在仿真运行环境中预先运行目标程序的情况下执行本实施例的技术方案,仿真运行环境可以是单独搭建或者为目标程序的预发环境、测试环境等。
63.102:根据模块标识的寻址结果,确定第二模块的第二文件路径。
64.原生的模块加载操作中,会基于模块标识执行寻址操作,获得模块标识的寻址结果,因此根据模块标识的寻址结果,可以确定模块标识对应的第二模块的第二文件路径。该第二模块即是第一模块请求加载的模块,第一模块相对于第二模块即为当前模块。
65.103:建立第一模块的第一文件路径、第二文件路径及模块标识的对应关系,并保存对应关系至目标程序的目标文件。
66.由于是在第一模块中进行模块加载,第一模块的第一文件路径可以确定,获得第二文件路径之后,即可以将第一文件路径、第二文件路径以及模块标识对应保存至目标文件夹中。
67.该对应关系可以采用如下方式表述:在第一文件路径中请求加载模块标识对应模块的加载结果为第二文件路径。从而通过模块标识以及第一文件路径可以唯一确定第二文件路径。
68.其中,该目标文件用于在目标程序中的第一模块请求加载第二模块的情况下,基于第一文件路径以及第二模块的模块标识查找目标文件以确定对应的第二文件路径。从而基于第二文件路径可以获取文件源代码,并编译执行完成模块加载。
69.目标程序启动时首先加载该目标文件,从而每一次模块加载时,只需从该目标文件中查询请求加载的模块的文件路径,从而可以无需寻址操作即可以确定请求加载的模块的文件路径,可以节省模块加载时间,提升程序运行速度。
70.此外,发明人进一步发现,由于文件源代码每一次读取也需要耗费较长时间,为了降低读取文件的io(input/output,输入/输出)操作,作为又一个实施例,该方法还可以包括:
71.获取第二模块对应的文件源代码;
72.将文件源代码对应第二文件路径保存至目标文件。
73.则目标文件还用于从目标文件确定第二文件路径之后,根据第二文件路径获取对应保存的文件源代码,从而无需对文件存储位置读取文件源代码,可以降低读物文件的io操作。
74.通过保存文件源代码可以减少目标程序运行过程中的文件读取次数,以进一步降低时间消耗,提高目标程序的运行速度。
75.此外,由于文件源代码需要编译并执行,为了进一步提高程序运行速度,在某些实施例中,基于第二文件路径,获取文件源代码之后,该方法还可以包括:
76.获取文件源代码编译生成的字节代码(byte

code);
77.将字节代码对应第二文件路径保存至目标文件;目标文件还用于根据第二文件路径获取对应保存的字节代码。
78.文件源代码也即第二模块的源代码;字节代码是利用编译器将源代码编译获得,是一种中间状态的二进制代码。
79.将文件源代码编译生成的字节代码保存至目标文件,从而目标程序运行时,可以从目标文件获得源代码及对应的字节代码,基于源代码及该字节代码再解析为机器码,节省了源代码编译为字节代码的编译时间,可以进一步提高程序运行速度。
80.可选地,可以是将文件源代码编译生成的无状态字节代码保存至目标文件,无状态字节代码具体是指字节代码中的方法(意即函数)为无状态方法。
81.本技术实施例中,可以对目标程序中的模块加载过程进行分析,根据寻址结果可以确定目标程序中的第一模块请求加载的第二模块的第二文件路径,以及可以读取对应的文件源代码,并可以将文件源代码编译为字节代码,从而可以构建第一文件路径、模块标识及第二文件路径的对应关系,基于该对应关系、第二模块的文件源代码及字节代码可以生成一份目标文件,并将目标文件保存至目标程序中,使得目标程序每一次进行模块加载时,可以首先询问该目标文件,查找请求加载的第二模块的第二文件路径,进而无需寻址即可以确定第二文件路径,节省了模块加载时间,有助于提升程序运行速度。
82.在一个可选实现方式中,第一文件路径、第二文件路径可以是指相应模块的文件绝对路径。
83.而由于实际应用中,同一个文件可能会存在多个备份,且某些模块独立与目标程序的文件系统之外,因此导致目录结构较为复杂,比如,某个文件位于/code/app.js,也可能位于/runtime/code/app.js,在不同文件中被加载时得到的文件绝对路径可能是不一样的。此外,目标程序运行在不同机器上时的目录结构可能也会发生变化,比如,app.js文件在机器1上位于/home/admin/release/lib/app.js,在机器2上可能位于/home/bdmin/release/lib/app.js,目录项发生了变化。
84.综上,若文件路径若采用绝对路径形式可能会导致出现错误,而无法从目标文件中查询获得第二模块的文件路径。
85.因此,在目录结构复杂或变化的情况下,在某些实施例中,可以预先配置目录标识与文件目录项的匹配关系,在文件目录项发生变化的情况下,再对应更新该匹配关系,该方法还可以包括:
86.确定第一模块的第一绝对路径;
87.根据文件目录项与目录标识的匹配关系,将第一绝对路径中的第一文件目录项替换为对应的第一目录标识,获得基于第一目录标识的第一文件路径;
88.若模块标识为文件绝对路径,根据匹配关系,将文件绝对路径中的第三文件目录项替换为对应的第三目录标识以更新模块标识;
89.根据模块标识的寻址结果,确定对应的第二模块的第二文件路径包括:
90.根据模块标识的寻址结果,获得对应的第二模块的第二绝对路径;
91.根据匹配关系,将第二绝对路径中的第二文件目录项替换为对应的第二目录标识,获得基于第二目录标识的第二文件路径;
92.该第一绝对路径是指为第一模块的文件绝对路径、第二绝对路径是指第二模块的文件绝对路径,为了描述上的区分命名为第一绝对路径以及第二绝对路径。
93.经过路径转换,本技术实施例中的可以采用将文件绝对路径转换为基于目录标识的相对路径。模块标识为文件绝对路径的情况下也会对应更新为基于目录标识的相对路径。
94.为了便于理解路径转换关系,现在举例说明,在目录结构复杂情况下,比如,b.js文件位于/root/code/b.js,同时也位于/root/code/c/b.js,那么目录项“/root/code/”对应的目录标识例如可以定义为“entry2”,则/root/code/b.js可以表示为/entry2/b.js,“/root/code/c/”对应的目录标识可以定义为“entry3”,则/root/code/c/b.js可以表示为/entry3/b.js。
95.在不同机器上目录结构变化情况下,以第一文件举例说明,例如目标程序运行在机器1上,第一文件在机器1上的文件绝对路径为“/home/admin/release/lib/app.js”;目录项“/home/admin/release/”对应目录标识为“entry 1”,则第一文件路径为“entry/lib/app.js”,假设目标程序运行在机器2上时,目录项“/home/admin/release/”更新为“/home/bdmin/release/”,则匹配关系中目录标识“entry 1”对应的目录项即更新为“/home/bdmin/release/”,第一文件在机器2的绝对路径即为“/home/bdmin/release/lib/app.js”。同样对于模块标识为文件绝对路径,以及寻址结果中的第二文件的文件绝对路径也据此进行转换。
96.将第一文件路径、第二文件路径及模块标识均采用基于目录标识的相对路径的表示方式,目标程序运行过程中,查询目标文件时,也会将相应文件路径转换为基于目录标识的相对路径的表示方式进行查询,从而可以避免由于目录结构复杂或者目录结构变化情况下出现的路径不一致,导致查询错误的问题。
97.结合前文相应描述可知,确定目标程序中的第一模块请求加载的模块标识可以是在目标程序运行时检测获得,因此,在某些实施例中,该运行目标程序,检测目标程序中的第一模块请求加载的模块标识可以包括:
98.运行目标程序,并启动检测模式;
99.在检测模式中,检测目标程序中的第一模块请求加载的模块标识;
100.该方法还包括:
101.检测到终止事件时,结束检测模式。
102.该终止事件可以结合实际应用情况进行设定,比如需要提高目标程序启动速度情况下,该终止事件可以是检测目标程序初始化完成而生成。或者,可以设定检测时长,在目标程序运行时长达到该检测时长时即可以生成终止事件,该检测时长例如可以结合当前目标程序的启动时长来制定等,以使得目标文件中保存目标程序启动阶段所需要加载的模块对应的对应关系及相应代码文件等。
103.结束检测模式之后,即不再对目标程序中的模块加载过程进行检测。
104.由于可以是在实际运行环境中首次运行目标程序时执行本技术实施例的检测方法,具体可以是由目标程序所运行机器上独立与目标程序的检测程序执行该检测方法,当然也可以是由目标程序执行该检测方法。目标程序首次运行时会按照原生方式执行原生的模块加载操作,意即寻址、查找缓存及编译并执行等操作,之后再次运行需要进行模块加载
时,即会首先查询目标文件,再未命中目标文件的情况下,可以再执行原生的模块加载操作。
105.当然,为了更好的保证目标程序的运行速度,可以是在目标程序发布在实际运行环境之前,在仿真运行环境中运行该目标程序以生成目标文件。在某些实施例中,运行目标程序并生成目标文件的操作可以由文件生成端执行,目标程序的代码构建完成之后即可以提交给文件生成端,由文件生成端生成目标文件,因此,该运行目标程序,检测目标程序中的第一模块请求加载的第二模块的模块标识可以包括:
106.从代码构建端获取目标程序的初始代码包;
107.执行代码包以运行目标程序,检测目标程序中的第一模块请求加载的第二模块的模块标识;
108.该方法还可以包括:
109.将目标文件传输至代码构建端,以供代码构建端将目标文件追加至目标程序的代码包中。
110.为了便于理解,如图2所述,示出了本技术实施例提供的一种检测方法又一个实施例的信令流程图,该方法可以包括以下几个步骤:
111.201:代码构建端向文件生成端发送构建完成的目标程序的代码包。
112.202:文件生成端执行该代码包以运行目标程序。
113.文件生成端可以搭建目标程序的仿真运行环境,并在该仿真运行环境中运行目标程序。
114.203:文件生成端确定目标程序中的第一模块请求加载的第二模块的模块标识、基于模块标识的寻址结果、以及根据寻址结果获取的第二模块的源代码、以及源代码编译生成的字节代码。
115.通过对目标程序运行过程中的原生模块加载操作进行检测,可以获得并记录模块加载过程涉及的模块标识、寻址结果、源代码及源代码编译生成的字节代码。当然字节代码也可以获得源代码之后再进行编译获得。
116.文件生成端可以由独立与目标程序的检测程序执行本实施例中的检测方法。
117.204:文件生成端根据寻址结果确定第二文件路径,并建立第一模块的第一文件路径、第二文件路径与该模块标识的对应关系。
118.205:文件生成端根据该对应关系、第二模块的源代码及字节代码,生成目标文件。
119.206:文件生成端将目标文件提供给代码构建端。
120.文件生成端生成目标文件之后可以立即反馈给代码构建端,或者代码构建端可以采用轮询方式从文件服务端请求获取该目标文件等,文件服务端收到代码构建端的请求之后再反馈该目标文件。
121.207:代码构建端将该目标文件写入目标程序的代码包,以更新代码包。
122.更新之后的代码包即可以进行发布。
123.此外,代码包的更新操作也可以由代码构建端或者单独的处理端,如文件生成端完成,因此,如图3所述,本技术实施例还提供了一种代码包处理方法,可以包括以下几个步骤:
124.301:获取目标程序的初始代码包。
125.302:执行代码包以运行目标程序,并检测目标程序的第一模块请求加载的第二模块的模块标识。
126.303:根据模块标识的寻址结果,确定第二模块的第二文件路径。
127.304:建立第一模块的第一文件路径、第二文件路径及模块标识的对应关系,并保存对应关系至所述目标程序的目标文件。
128.305:根据目标文件更新代码包。
129.在某些实施例中,获取目标程序的初始代码包可以具体是从代码构建端获取目标程序的初始代码包。
130.当然,在实际应用中,根据所述目标文件更新所述代码包也可以是将所述目标文件传输至所述代码构建端,由所述代码构建端将所述目标文件写入所述代码包中,以更新所述代码包。
131.图3所示实施例中与上述任一实施例中的相同或相似操作可以详见前文所述,此处不再赘述。
132.图4为本技术实施例提供的一种运行控制方法一个实施例的流程图,本实施例从程序运行角度对本技术技术方案进行介绍,本实施例的技术方案可以即由目标程序执行,该方法可以包括以下几个步骤:
133.401:在目标程序的第一模块请求加载第二模块的情况下,确定第二模块的模块标识及第一模块的第一文件路径。
134.402:根据模块标识以及第一文件路径,从目标文件查找对应的第二文件路径。
135.可选地,目标程序可以首先加载该目标文件至当前运行机器中,从而仅需加载一次目标文件,之后的模块加载操作即可以首先执行查找该目标文件的操作。
136.其中,目标文件存储第一文件路径、模块标识及第二文件路径的对应关系;第二文件路径预先寻址获得。
137.其中,目标文件中的文件内容可以通过对目标程序的代码包进行分析获得,对代码包中涉及的模块之间的调用关系进行分析处理而生成。
138.当然,也可以是在目标程序运行过程中而生成,具体生成方式可以详见前文相应实施例中所述,此处不再重复赘述。
139.可选地,可以是在目标程序运行的任何阶段涉及的模块加载操作,均按照本实施例的技术方案执行,也可以是在目标程序启动阶段涉及的模块加载操作,按照本实施例的技术方案执行,步骤402之前可以首先判断目标程序的运行阶段,若处于启动阶段,再执行步骤402操作,若处于非启动阶段,则也可以执行原生的模块加载操作。
140.403:根据第二文件路径获取文件源代码。
141.404:编译并执行文件源代码。
142.此外,在某些实施例中,若根据模块标识以及第一文件路径,从目标文件未查找获得第二文件路径,该方法还可以包括:
143.基于模块标识执行原生的模块加载操作。其中,原生的模块加载操作即可以包括寻址、查找缓存以及编译并执行等。
144.作为一种可选方式,根据第二文件路径获取文件源代码可以包括:从第二文件路径索引的文件位置读取文件源代码。
145.当然,也可以基于该第二文件路径去查找缓存,若缓存中已加载该第二模块,则可以直接获取对应的文件源代码,否则可以再去从第二文件路径索引的文件位置读取文件源代码。
146.该第二文件路径若为基于目录标识的相对路径时,可以首先将其转换为文件绝对路径,再执行查找缓存或读取文件的操作。
147.作为另一种可选方式,目标文件中还可以预先保存第二文件路径对应的文件源代码,因此,根据第二文件路径获取文件源代码可以是:从目标文件中查找第二文件路径对应的文件源代码。
148.在某些实施例中,该方法还可以包括:
149.从目标文件中查找第二文件路径对应的字节代码。
150.则编译并执行文件源代码可以包括:
151.根据文件源代码以及字节代码,编译获得对应的机器指令;
152.执行机器指令。
153.从而结合字节代码进行编译,可以减少编译时间,进一步提高程序运行速度。
154.此外,在某些实施例中,目标文件中的文件路径可以是基于目录标识的相对路径,该方法还可以包括:
155.确定目标程序在当前运行环境中的文件目录项与目录标识的匹配关系;
156.则确定第二模块的模块标识及第一模块的第一文本路径包括:
157.确定请求参数中的模块标识;
158.若模块标识为文件绝对路径,根据匹配关系,将文件绝对路径中的文件目录项替换为对应的目录标识,以更新模块标识;
159.确定第一模块的第一绝对路径,根据匹配关系,将第一绝对路径中的文件目录项替换为对应的目录标识,获得第一文件路径。
160.此外,在某些实施例中,该方法还可以包括:
161.根据匹配关系,将第二文件路径中的目录标识替换为对应的第二文件目录,以获得第二模块的第二绝对路径;基于第二绝对路径执行相应原生操作。
162.意即目标文件中的第二文件路径为基于目录标识的相对路径情况下,需要将第二文件路径转换为文件绝对路径,也即第二绝对路径。基于该第二绝对路径需要执行相应原生操作,比如缓存操作等,会对应第二绝对路径缓存该第二模块的源代码等。
163.其中,目标文件中的文件路径生成方式可以详见前文相应实施例中所述,此处不再赘述。
164.在一个实际应用中,该目标程序可以是依赖node.js或者依赖基于node.js二次开发的运行时系统比如node.js serverless(无服务器框架)等而开发的javascript程序,例如其可以为服务端程序或者客户端程序。node.js中,具体采用require()函数进行模块加载,目标文件中保存的对应关系根据require()函数的模块加载过程确定,比如“/root/code/app.js”中的第一模块,请求require模块名称为“lodash”的第二模块,该第二模块对应的文件绝对路径为“/root/code/node_modules/lodash/lodash.js”,则“/root/code/app.js”,“lodash”以及“/root/code/node_modules/lodash/lodash.js”即可以建立对应关系。根据“/root/code/app.js”以及“lodash”可以唯一确定对应的“/root/code/node_
modules/lodash/lodash.js”。
165.为了避免目录结构复杂或者目标结构更新情况下的目标文件的准确性,可以将文件绝对路径转换为基于目录标识的相对路径,在建立对应关系存储至目标文件中。如上例中,“/root/code/”可以表示为目录标识“a”,则该对应关系即为:“/a/app.js”,“lodash”以及“/a/node_modules/lodash/lodash.j”之间的对应关系。在“/root/code/”更新为“/root/runtime/”的情况下,更新目录标识“a”对应的目录项为/root/runtime/即可。“/a/app.js”对应的文件绝对路径即会更新为“/root/runtime/app.js”,“/a/node_modules/lodash/lodash.j”对应的文件绝对路径即会更新为“//root/runtime/node_modules/lodash/lodash.j”。
166.此外,目标文件除了保存对应关系,还可以保存目标程序运行过程所加载的模块的文件源代码及对应的字节代码,从而从目标文件中可以直接获得文件源代码及字节代码,可以减少文件读取操作以及编译操作,进一步提高程序运行速度。在目标文件仅对应目标程序启动阶段所加载模块的情况下,可以有效提高目标程序的启动速度。
167.此外,结合前文描述可知,在一个实际应用中,代码构建端构建完成目标程序的代码包之后,可以由文件生成服务端生成目标文件,如图5示出了本技术实施例在一个实际应用中的应用场景的交互示意图,代码构建端501将构建完整的代码包发送至文件生成端502,文件生成端502执行代码包运行目标程序,根据模型加载和寻址结果,可以首先确定第一模块的第一文件路径、第二模块的模块标识及第二模块的第二文件路径的对应关系,此外还可以获取第二模块的文件源代码,此外还可以获取文件源代码编译生成的字节代码,基于对应关系、文件源代码及字节代码生成目标文件,具体目标文件生成过程可以详见图2所示实施例,此处不再赘述。文件生成端502可以将生成的目标文件提供给代码构建端501,代码构建端501将目标文件写入代码包中以更新代码包,之后,更新之后的代码包即可以发布,假设目标程序为服务端程序,该代码包即可以发布至服务端503,服务端503运行该目标程序可以提供相应服务,运行过程涉及的模块加载操作即可以按照图4所示实施例的技术方案执行,以保证程序运行速度。目标文件在目标程序启动阶段生成的情况下,可以有效提高目标程序的启动速度。
168.图6为本技术实施例提供的一种检测装置一个实施例的结构示意图,该装置可以包括:
169.检测单元601,用于运行目标程序,检测目标程序中的第一模块请求加载的第二模块的模块标识;
170.确定单元602,用于根据模块标识的寻址结果,确定第二模块的第二文件路径;
171.关系建立单元603,用于建立第一模块的第一文件路径、第二文件路径及模块标识的对应关系,并保存对应关系至目标程序的目标文件中;
172.其中,目标文件用于在目标程序中的第一模块请求加载第二模块的情况下,基于第一文件路径及第二模块的模块标识查找目标文件以确定对应的第二文件路径。
173.在某些实施例中,该装置还可以包括:
174.源码保存单元,用于获取第二文件路径对应的文件源代码;将文件源代码对应第二文件路径保存至目标文件;目标文件还用于根据第二文件路径获取对应保存的文件源代码。
175.在某些实施例中,该装置还可以包括:
176.字节码保存单元,用于获取文件源代码编译生成的字节代码;将字节代码对应第二文件路径保存至目标文件;目标文件还用于根据第二文件路径获取对应保存的字节代码。
177.在某些实施例中,该装置还可以包括:
178.路径修正单元,用于确定第一模块的第一绝对路径;
179.根据文件目录项与目录标识的匹配关系,将第一绝对路径中的第一文件目录项替换为对应的第一目录标识,获得基于第一目录标识的第一文件路径;
180.若文件标识为文件绝对路径,根据匹配关系,将文件绝对路径中的第三文件目录项替换为对应的第三目录标识以更新文件标识;
181.则该确定单元可以具体用于从模块标识的寻址结果中,获得第二模块的第二绝对路径;根据匹配关系,将第二绝对路径中的第二文件目录项替换为对应的第二目录标识,获得基于第二目录标识的第二文件路径;
182.其中,目标程序在其当前运行环境中的文件目录结构更新情况下,更新匹配关系中目录标识对应的文件目录项。
183.在某些实施例中,检测单元可以具体用于运行目标程序,并启动检测模式;在检测模式中,检测目标程序中的第一模块请求加载的第二模块的模块标识;
184.此外,该装置还可以包括:
185.终止单元,用于检测到终止事件时,结束检测模式。
186.在某些实施例中,检测单元可以具体用于获取代码构建端传输的目标程序的代码包;执行代码包以运行目标程序,并确定目标程序中的第一模块请求加载的第二模块的模块标识;
187.此外,该装置还可以包括:
188.发送单元,用于将目标文件传输至代码构建端,以供代码构建端将目标文件写入目标程序的代码包中。
189.图6所述的检测装置可以执行图1所示实施例所述的检测方法,其实现原理和技术效果不再赘述。对于上述实施例中的检测装置其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
190.在一个可能的设计中,图6所示实施例的检测装置可以实现为计算设备,如图7所示,该计算设备可以包括存储组件701以及处理组件702;
191.存储组件701存储一条或多条计算机指令,其中,所述一条或多条计算机指令供处理组件702调用执行,以实现图1所示实施例的检测方法。
192.当然,计算设备必然还可以包括其他部件,例如输入/输出接口、通信组件等。输入/输出接口为处理组件和外围接口模块之间提供接口,上述外围接口模块可以是输出设备、输入设备等。通信组件被配置为便于计算设备和其他设备之间有线或无线方式的通信等。
193.其中,该计算设备可以为物理设备或者云计算平台提供的弹性计算主机等,此时计算设备即可以是指云服务器,上述处理组件、存储组件等可以是从云计算平台租用或购买的基础服务器资源。
194.实际应用中,该计算设备可以实现为单个物理机器,也可以实现为多个物理机器组成的分布式集群等,在此不做具体限定。
195.图8为本技术实施例提供的一种代码包处理装置一个实施例的结构示意图,该装置可以包括:
196.第一获取单元801,用于获取目标程序的初始代码包;
197.执行单元802,执行所述代码包以运行所述目标程序,并检测所述目标程序的第一模块请求加载的第二模块的模块标识;
198.确定单元803,用于根据所述模块标识的寻址结果,确定所述第二模块的第二文件路径;
199.关系建立单元804,用于建立所述第一模块的第一文件路径、所述第二文件路径及所述模块标识的对应关系,并保存所述对应关系至所述目标程序的目标文件;
200.更新单元805,用于根据所述目标文件更新所述代码包。
201.可选地,获取单元可以是从代码构建端获取目标程序的初始代码包;
202.可选地,更新单元可以是将所述目标文件传输至所述代码构建端,由所述代码构建端将所述目标文件写入所述代码包中,以更新所述代码包。
203.图8所述的代码包处理装置可以执行图3所示实施例所述的代码包处理方法,其实现原理和技术效果不再赘述。对于上述实施例中的检测装置其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
204.在一个可能的设计中,图8所示实施例的代码包处理装置可以实现为计算设备,如图9所示,该计算设备可以包括存储组件901以及处理组件902;
205.存储组件901存储一条或多条计算机指令,其中,所述一条或多条计算机指令供处理组件902调用执行,以实现图3所示实施例的代码包处理方法。
206.当然,计算设备必然还可以包括其他部件,例如输入/输出接口、通信组件等。输入/输出接口为处理组件和外围接口模块之间提供接口,上述外围接口模块可以是输出设备、输入设备等。通信组件被配置为便于计算设备和其他设备之间有线或无线方式的通信等。
207.其中,该计算设备可以为物理设备或者云计算平台提供的弹性计算主机等,此时计算设备即可以是指云服务器,上述处理组件、存储组件等可以是从云计算平台租用或购买的基础服务器资源。
208.实际应用中,该计算设备可以实现为单个物理机器,也可以实现为多个物理机器组成的分布式集群等,在此不做具体限定。
209.图10为本技术实施例提供的一种运行控制装置一个实施例的结构示意图,该运行控制装置可以包括:
210.运行单元1001,用于在目标程序运行且第一模块请求加载第二模块的情况下,确定第二模块的模块标识以及第一模块的第一文件路径;
211.查找单元1002,用于根据模块标识以及第一文件路径,从目标文件查找对应的第二文件路径;目标文件存储第一文件路径、模块标识及第二文件路径的对应关系;第二文件路径预先寻址获得;
212.第二获取单元1003,用于根据第二文件路径获取文件源代码;
213.编译单元1004,用于编译并执行文件源代码。
214.在某些实施例中,目标文件中的文件路径为基于目录标识的相对路径,该装置还可以包括:
215.路径转换单元,用于确定目标程序在当前运行环境中的文件目录项与目录标识的匹配关系;确定第二模块的模块标识及第一模块的第一文本路径包括:确定请求参数中的模块标识;若模块标识为文件绝对路径,根据匹配关系,将文件绝对路径中的文件目录项替换为对应的目录标识,以更新模块标识;确定第一模块的第一绝对路径,根据匹配关系,将第一绝对路径中的文件目录项替换为对应的目录标识,获得第一文件路径;
216.此外,该路径转换单元还用于根据匹配关系,将第二文件路径中的目录标识替换为对应的第二文件目录,以获得第二模块的第二绝对路径;基于第二绝对路径执行相应原生操作。
217.在某些实施例中,该装置还可以包括:
218.原生操作单元,用于若根据模块标识以及第一文件路径,从目标文件未查找获得第二文件路径,基于模块标识执行原生的模块加载操作。
219.图10所述的检测装置可以执行图4所示实施例所述的运行控制方法,其实现原理和技术效果不再赘述。对于上述实施例中的检测装置其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
220.此外,本技术实施例还提供了一种目标程序,如图11所述,该目标程序可以包括:
221.存储控件1101,用于提供多个模块及目标文件;
222.启动控件1102,用于接收到启动指令时,切换至运行状态;
223.加载控件1103,用于在第一模块请求加载第二模块的情况下,确定第二模块的模块标识以及第一模块的第一文件路径;
224.查询控件1104,用于根据模块标识以及第一文件路径,从目标文件查找对应的第二文件路径;以及根据第二文件路径获取文件源代码;其中,目标文件存储第一文件路径、模块标识及第二文件路径的对应关系;第二文件路径预先寻址获得;
225.执行控件1105,用于编译并执行文件源代码。
226.该目标程序可以执行如图4所示的运行控制方法,其实现原理和技术效果不再赘述。
227.在一个可能的设计中,本技术实施例还提供了一种计算设备,如图12所示,该计算设备可以包括存储组件1201以及处理组件1202;
228.存储组件1201存储一条或多条计算机指令,其中,所述一条或多条计算机指令供处理组件1202调用执行,以实现图4所示实施例的运行控制方法。
229.当然,计算设备必然还可以包括其他部件,例如输入/输出接口、通信组件等。输入/输出接口为处理组件和外围接口模块之间提供接口,上述外围接口模块可以是输出设备、输入设备等。通信组件被配置为便于计算设备和其他设备之间有线或无线方式的通信等。
230.其中,该计算设备可以为物理设备或者云计算平台提供的弹性计算主机等,此时计算设备即可以是指云服务器,上述处理组件、存储组件等可以是从云计算平台租用或购买的基础服务器资源。
231.实际应用中,该计算设备可以实现为单个物理机器,也可以实现为多个物理机器组成的分布式集群等,在此不做具体限定。
232.上述相应实施例中涉及的处理组件可以包括一个或多个处理器来执行计算机指令,以完成上述的方法中的全部或部分步骤。当然处理组件也可以为一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
233.存储组件被配置为存储各种类型的数据以支持在终端的操作。存储组件可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
234.此外,本技术实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被计算机执行时可以实现上述图1所示实施例的检测方法。
235.此外,本技术实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被计算机执行时可以实现上述图3所示实施例的代码包处理方法。
236.此外,本技术实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被计算机执行时可以实现上述图4所示实施例的运行控制方法。
237.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
238.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
239.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
240.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献