CN113326046A - 获取编译时长的方法和装置 - Google Patents
获取编译时长的方法和装置 Download PDFInfo
- Publication number
- CN113326046A CN113326046A CN202110579898.2A CN202110579898A CN113326046A CN 113326046 A CN113326046 A CN 113326046A CN 202110579898 A CN202110579898 A CN 202110579898A CN 113326046 A CN113326046 A CN 113326046A
- Authority
- CN
- China
- Prior art keywords
- compiling
- test
- code
- target
- test object
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
本发明公开了一种获取编译时长的方法和装置。其中,该方法包括:获取待编译的目标代码;通过运行测试脚本,多次执行清除测试对象的编译缓存并编译所述目标代码的步骤,得到多个编译时长;在多次编译结束后,利用所述多个编译时长统计得到所述目标代码的目标编译时长。本发明解决了现有技术中获取的代码编译时长不准确的技术问题。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种获取编译时长的方法和装置。
背景技术
在移动端项目开发过程中,随着项目不断迭代,功能逐渐增加,势必会引起编译时长或代码文件的增多;当工程师尝试对项目进行一些优化后,需要确认这些优化是否会减少项目的编译时长,因此需要统计代码的编译时长。
目前,以iOS为例,在移动端的iOS开发中,使用Xcode软件进行项目开发,在尝试对项目进行一些优化后,由于再次编译成功可能会使用到增量编译,且在编译过程中容易受到很多情况的干扰,因此可能会导致获得的编译时长并不准确。
针对现有技术中获取的代码编译时长不准确的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种获取编译时长的方法和装置,以至少解决现有技术中获取的代码编译时长不准确的技术问题。
根据本发明实施例的一个方面,提供了一种获取编译时长的方法,包括:获取待编译的目标代码;通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长;在多次编译结束后,利用多个编译时长统计得到目标代码的目标编译时长。
进一步地,获取目标代码,包括:接收目标代码的属性信息,其中,属性信息包括:目标代码的路径和目标代码的标识;通过测试脚本根据目标代码的路径以及目标代码的标识查找到目标代码。
进一步地,通过运行测试脚本多次清除测试对象的编译缓存,并编译目标代码,得到多个编译时长,包括:通过测试脚本中的缓存清除命令清除测试对象的缓存;通过测试脚本根据目标代码的类型确定目标代码的编译命令,并根据编译命令编译目标代码;在编译完成目标代码之后,获得此次编译的编译时长,并判断目标代码的编译次数是否到达预设值;在目标代码的编译次数到达预设值的情况下,确定编译结束;在目标代码的编译次数未到达预设值的情况下,重新进入通过测试脚本中的缓存清除命令清除测试对象的缓存的步骤。
进一步地,利用多个编译时长统计得到目标代码的目标编译时长,包括:清除多个编译时长中的最大值和最小值,得到剩余的多个编译时长;获取剩余的多个编译时长的平均值,并确定剩余的多个编译时长的平均值为目标代码的目标编译时长。
进一步地,在通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长之前,上述方法还包括:确定用于运行目标代码的测试对象的类型,其中,测试对象的类型包括:真机和模拟器;以及获取测试对象所提供的测试环境,其中,测试环境包括:机型信息和系统版本信息。
进一步地,确定用于运行目标代码的测试对象的类型,包括:在检测到测试对象的类型确定信息的情况下,根据类型确定信息确定测试对象的类型;在未检测到测试对象的类型确定信息的情况下,确定测试对象的类型为模拟器。
进一步地,在测试对象的类型为真机的情况下,获取测试对象所提供的测试环境,包括:获取真机的唯一识别码,并根据唯一识别码确定当前测试所使用的测试对象;读取测试对象的机型信息和系统版本信息。
进一步地,在测试对象的类型为模拟器的情况下,获取测试对象所提供的测试环境,包括:在接收到测试环境信息的情况下,获取测试环境信息所指示的测试环境;在未接收到测试环境信息的情况下,确定测试环境为模拟器所兼容的最新的机型和最高版本的系统。
根据本发明实施例的一个方面,提供了一种获取编译时长的装置,获取模块,用于获取待编译的目标代码;编译模块,用于通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长;统计模块,用于在多次编译结束后,利用多个编译时长统计得到目标代码的目标编译时长。
根据本发明实施例的一个方面,提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行上述的获取编译时长的方法。
根据本发明实施例的一个方面,提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述的获取编译时长的方法。
在本发明实施例中,获取待编译的目标代码;通过运行测试脚本,多次执行清除测试对象的编译缓存并编译所述目标代码的步骤,得到多个编译时长;在多次编译结束后,利用所述多个编译时长统计得到所述目标代码的目标编译时长。上述方案不仅在统计编译时长时,对目标代码进行了多次编译,还在每次编译前清除编译缓存,从而避免了由于增量编译对统计编译时长的影响,并避免了单次获取编译时长的不确定性,提高了获取编译时长的准确性,解决了现有技术中获取的代码编译时长不准确的技术问题。进一步的,上述方案使用测试脚本进行自动化编译统计,编译完成后自动统计结果,无需人工手动编译,提高获取编译时长的效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种获取编译时长的方法的流程图;
图2是根据本发明实施例的一种通过测试脚本控制测试对象编译目标代码的流程图;
图3是根据本发明实施例的一种使用真机进行测试的示意图;
图4是根据本发明实施例的一种获取编译时长的装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种获取编译时长的方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种获取编译时长的方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,获取待编译的目标代码。
具体的,上述待编译的目标代码即为需要获取编译时长的代码。
需要说明的是,本实施例中的各步骤由测试设备执行,测试设备中运行有测试脚本,测试设备通过运行测试脚本执行本实施例中的各步骤,为了便于查看结果,测试设备可以提供人机交互界面。
在一种可选的实施例中,当工程师对代码进行优化后,为了确定上述优化是否能够达到减少编译时长的目的,可以将优化后的代码作为上述待编译的目标代码。
在上述方案中,获取待编译的目标代码表示的是测试设备能够查找到目标代码,并允许触发目标代码进行编译,而并不表示向测试设备中写入目标代码。例如,上述步骤可以是测试设备通过指定的路径找到测试对象中待编译的目标代码,此处的测试对象为运行目标代码的主体。
步骤S104,通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长。
具体的,上述测试对象为运行目标代码的主体,该测试对象可以是实体的测试对象,例如移动终端等实体设备;也可以是虚拟的测试对象,例如模拟器等,在测试对象为模拟器的情况下,模拟器可以运行在测试设备之上,也可以运行在与测试设备通信的其他设备之上。
在上述方案中,多次执行清除测试对象的编译缓存并编译目标代码的步骤,即为在测试过程中,每次编译目标代码之前,都会清除测试对象的编译缓存,从而使得每次对目标代码的编译均为全量编译而非增量编译,进而提高获取的编译时长的准确程度。此处具体的次数可以根据实际需求确定。
需要说明的是,除了清除测试对象的编译缓存,还可以清除测试对象的系统缓存,以避免受到测试对象中其他额外资源占用对目标代码编译的干扰。
步骤S106,在多次编译结束后,利用多个编译时长统计得到目标代码的目标编译时长。
具体的,上述步骤中的编译结束用于表示目标代码编译完成了测试脚本中设置的次数。目标代码的每次编译都会获得一个编译时长,多次编译完成后,即可获得多个编译时长,基于上述多个编译时长,即可确定目标代码的目标编译时长,此处的目标编译时长为统计得到的目标代码的最终编译时长。
在一种可选的实施例中,可以确定多个编译时长的平均值为目标代码的目标编译时长。
需要说明的是,为了更全面的测试目标代码的性能,可以更换测试对象对目标代码在的多种设备以及多种系统上的目标编译时长进行统计。
在一种可选的实施例中,以在iOS系统中的开发为例,工程师对代码进行优化后得到目标代码,为了确定对代码的优化是否到了缩小编译时长的目的,可以获取目标代码在运行多种版本的iOS系统的多种型号的测试对象上的目标编译时长。
由上可知,本申请上述实施例获取待编译的目标代码;通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长;在多次编译结束后,利用多个编译时长统计得到目标代码的目标编译时长。上述方案不仅在统计编译时长时,对目标代码进行了多次编译,还在每次编译前清除编译缓存,从而避免了由于增量编译对统计编译时长的影响,并避免了单次获取编译时长的不确定性,提高了获取编译时长的准确性,解决了现有技术中获取的代码编译时长不准确的技术问题。进一步的,上述方案使用测试脚本进行自动化编译统计,编译完成后自动统计结果,无需人工手动编译,提高获取编译时长的效率。
作为一种可选的实施例,获取目标代码,包括:接收目标代码的属性信息,其中,属性信息包括:目标代码的路径和目标代码的标识;通过测试脚本根据目标代码的路径以及目标代码的标识查找到目标代码。
具体的,上述目标代码的路径可以是测试对象中的项目路径,由于在项目路径下,可能会存在多个项目,所以目标代码的标识需要包括项目名称,又由于一个项目可能具有多个target(目标任务),因此目标代码的标识还需要包括等待执行的target的标识,也即目标代码的标识可以包括项目名称和目标名称。
在上述方案中,由于不同目标代码在不同的测试对象中存储的路径不一定相同,因此测试脚本作为通用的自动统计客户端编译时长的方案,不能固定项目路径。上述方案将项目路径和目标代码的标识作为参数对测试脚本进行配置,从而使得测试设备能够找到待测试的目标代码。
在将项目路径和目标代码的标识作为参数进行配置后,在编译目标代码前,可以对目标代码的路径进行检测,判断是否为正确的文件路径地址,如果项目路径下是文件夹类型的文件,则是正确的;如果项目路径下文件或者是空,则是错误的。
作为一种可选的实施例,属性信息还包括目标代码的类型,通过运行测试脚本多次清除测试对象的编译缓存,并编译目标代码,得到多个编译时长,包括:通过测试脚本中的缓存清除命令清除测试对象的缓存;通过测试脚本根据目标代码的类型确定目标代码的编译命令,并根据编译命令编译目标代码;在编译完成目标代码之后,获得此次编译的编译时长,并判断目标代码的编译次数是否到达预设值;在目标代码的编译次数到达预设值的情况下,确定编译结束;在目标代码的编译次数未到达预设值的情况下,重新进入通过测试脚本中的缓存清除命令清除测试对象的缓存的步骤。
对于iOS的开发项目,通常项目默认都是通过Xcode构建生成的,因此项目类型则是以项目名称为开头,以.xcodeproj结尾(示例:Demo.xcodeproj);如果项目是通过CocoaPods来管理,那么项目类型则是以项目名称为开头,以.xcworkspace结尾(示例:Demo.xcworkspace)。也即不同的项目类型,需要使用到不同的编译命令,因此还需要对项目类型进行指定,以确定对应的编译指令。
上述方案在每次对目标代码进行编译前,均通过缓存清除指令清除测试对象的缓存,从而避免了缓存对编译时长的影响,然后根据目标代码的类型调用对应的编译命令以出发目标代码编译。在目标代码开始编译时记录开始时刻,并在目标代码结束编译时记录结束时刻,从而在目标代码完成一次编译后通过获取结束时刻与开始时刻的时间差,确定出此次编译的编译时长。
在结束此次的编译后,根据测试脚本中设置的预设值判断已编译的次数是否达到预设值,在未达到预设值的情况下再次进入清除缓存并编译的步骤,在已达到预设值的情况下结束这一流程。
需要注意的是,测试设备在运行中存在多种不可控的情况,例如代码运行环境卡死等,因此在清除缓存和目标代码编译时,都存在失败的情况,在清除缓存失败或代码编译失败的情况下,退出此次测试。
在上述方案中,结合图2所示,在检测完属性信息的正确性之后,当属性信息都为有效参数时,进入如下步骤开始对目标代码进行编译。
S202:在统计编译时长之前,清除编译缓存。
可以通过执行xcodebuild clean命令前缀,结合之前配置的属性信息来执行清除编译缓存流程。在实施的具体过程中,可以实时的对输出的日志进行检查,当输出日志存在“clean_failed”,则说明清除编译缓存流程失败,直接退出。如果输出日志存在“**CLEANSUCCEEDED**”,则说明清除编译缓存流程成功,进入下一流程。
S203:判断当前已循环的次数是否小于设置的统计总次数。当判断结果为小于时,则进入下一流程;否则直接结束。这一步骤用于通过统计多次编译时长来提高统计编译时长的准确性。
S204:进入到当前流程时,需要记录当前流程开始的时间。通过执行xcodebuild命令前缀,加上之前之前配置的属性信息,来执行编译流程。在实施的具体过程中,可以实时的对输出的日志进行检查,当输出日志存在“xcodebuild_failed”,则说明编译流程失败,直接退出。如果输出日志存在“**BUILD SUCCEEDED**”,则说明编译流程成功。当发现编译流程成功后,需要记录编译的时刻。通过比对开始时刻和结束时刻的时间差,得到此次的编译时长。
在执行完上述步骤S204后,重新返回步骤S202,进入下一个循环。
作为一种可选的实施例,利用多个编译时长统计得到目标代码的目标编译时长,包括:清除多个编译时长中的最大值和最小值,得到剩余的多个编译时长;获取剩余的多个编译时长的平均值,并确定剩余的多个编译时长的平均值为目标代码的目标编译时长。
上述步骤用于获取多个编译时长的切尾平均值,并确定多个编译时长的切尾平均值为最终确定的目标编译时长。通过求取多个编译时长的切尾平均值来确定目标代码的目标编译时长,能够得到准确性较高的编译时长。
作为一种可选的实施例,在通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长之前,上述方法还包括:确定用于运行目标代码的测试对象的类型,其中,测试对象的类型包括:真机和模拟器;以及获取测试对象所提供的测试环境,其中,测试环境包括:机型信息和系统版本信息。
上述测试对象的类型和测试环境可以是配置测试脚本时的可选参数,也即当指定测试对象的类型和测试环境时,按照指定的测试对象的类型和测试环境编译目标代码;当未指定测试对象的类型和测试环境时,按照默认的测试对象类型和测试环境编译目标的代码。
具体的,上述测试对象的类型可以为真机或模拟器,在测试对象为真机的情况下,作为测试对象的真机与测试设备通信,在测试对象为模拟器的情况下,模拟器可以运行在测试设备中,也可以运行在于测试设备通信的其他设备中。
上述测试环境包括机型信息和系统版本信息,以对iOS移动终端的开发为例,机型信息可以是Iphone信号,例如Iphone12、Iphone11、IphoneXR等,系统版本信息可以为iOS14、iOS13、iOS12等。
上述方案通过构建参数可以指定多种机型、单机型的多个系统版本,对比通常使用单一机型和单一机型系统版本来说,统计的更为全面。
作为一种可选的实施例,确定用于运行目标代码的测试对象的类型,包括:在检测到测试对象的类型确定信息的情况下,根据类型确定信息确定测试对象的类型;在未检测到测试对象的类型确定信息的情况下,确定测试对象的类型为模拟器。
在上述方案中,在检测到类型确定信息的情况下,根据类型确定信息确定测试对象的类型,在未接收到类型确定信息的情况下,确定选择默认类型,即模拟器。
作为一种可选的实施例,在测试对象的类型为真机的情况下,获取测试对象所提供的测试环境,包括:获取真机的唯一识别码,根据唯一识别码确定当前测试所使用的测试对象;读取测试对象的机型信息和系统版本信息。
在测试对象的类型为真机的情况下,测试设备从真机中获取测试环境。在一些可选的实施例中,测试设备可以连接多个测试对象,因此需要确定此次作为测试对象的真机的唯一识别码,以使测试设备获得测试对象的测试环境。
图3是根据本发明实施例的一种使用真机进行测试的示意图,结合图3所示,测试设备301与真机(真机302、真机303、真机304)相连,多个真机所提供的测试环境不同,测试设备依次将每个真机作为测试对象来统计目标代码的目标编译时长。此次作为测试对象的为真机301,则将真机301的唯一识别码作为属性信息输入至测试脚本中,测试设备即可根据该唯一识别码确定此次测试以真机301作为测试对象,进而读取真机301的机型信息和系统版本信息作为测试环境。
作为一种可选的实施例,在测试对象的类型为模拟器的情况下,获取测试对象所提供的测试环境,包括:在接收到测试环境信息的情况下,获取测试环境信息所指示的测试环境;在未接收到测试环境信息的情况下,确定测试环境为模拟器所兼容的最新的机型和最高版本的系统。
在上述方案中,在接收到测试环境信息的情况下,获取测试环境信息所指示的测试环境,在未接收到测试环境信息的情况下,确定测试环境为模拟器所兼容的最新的机型和最高版本的系统。
模拟器能够模拟多种机型和多种版本的系统,例如,当前使用的模拟器能够模拟的全部机型为Iphone12、Iphone11、IphoneXR,能够模拟的全部系统版本为iOS14、iOS13、iOS12,在在未接收到测试环境信息的情况下,确定测试环境为Iphone12和iOS14。
根据本发明实施例,提供了一种获取编译时长的装置,图4是根据本发明实施例的一种获取编译时长的装置的示意图,如图4所示,该装置包括:
获取模块40,用于获取待编译的目标代码;
编译模块42,用于通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长;
统计模块44,用于在多次编译结束后,利用多个编译时长统计得到目标代码的目标编译时长。
作为一种可选的实施例,获取模块包括:接收子模块,用于接收目标代码的属性信息,其中,属性信息包括:目标代码的路径和目标代码的标识;查找子模块,用于通过测试脚本根据目标代码的路径以及目标代码的标识查找到目标代码。
作为一种可选的实施例,编译模块包括:第一清除子模块,用于通过测试脚本中的缓存清除命令清除测试对象的缓存;第一确定子模块,用于通过测试脚本根据目标代码的类型确定目标代码的编译命令,并根据编译命令编译目标代码;判断子模块,用于在编译完成目标代码之后,获得此次编译的编译时长,并判断目标代码的编译次数是否到达预设值;第二确定子模块,用于在目标代码的编译次数到达预设值的情况下,确定编译结束;进入子模块,用于在目标代码的编译次数未到达预设值的情况下,重新进入通过测试脚本中的缓存清除命令清除测试对象的缓存的步骤。
作为一种可选的实施例,统计模块包括:第二清除子模块,用于清除多个编译时长中的最大值和最小值,得到剩余的多个编译时长;第一获取子模块,用于获取剩余的多个编译时长的平均值,并确定剩余的多个编译时长的平均值为目标代码的目标编译时长。
作为一种可选的实施例,上述装置还包括:类型确定模块,用于在通过运行测试脚本,多次执行清除测试对象的编译缓存并编译目标代码的步骤,得到多个编译时长之前,确定用于运行目标代码的测试对象的类型,其中,测试对象的类型包括:真机和模拟器;以及测试环境获取模块,用于获取测试对象所提供的测试环境,其中,测试环境包括:机型信息和系统版本信息。
作为一种可选的实施例,类型确定模块包括:第三确定子模块,用于在检测到测试对象的类型确定信息的情况下,根据类型确定信息确定测试对象的类型;第四确定子模块,用于在未检测到测试对象的类型确定信息的情况下,确定测试对象的类型为模拟器。
作为一种可选的实施例,在测试对象的类型为真机的情况下,测试环境获取模块包括:第二获取子模块,用于获取真机的唯一识别码,并根据唯一识别码确定当前测试所使用的测试对象;读取子模块,用于读取测试对象的机型信息和系统版本信息。
作为一种可选的实施例,在测试对象的类型为模拟器的情况下,测试环境获取模块包括:第三获取子模块,用于在接收到测试环境信息的情况下,获取测试环境信息所指示的测试环境;第四确定子模块,用于在未接收到测试环境信息的情况下,确定测试环境为模拟器所兼容的最新的机型和最高版本的系统。
根据本发明实施例,提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行实施例1所述的获取编译时长的方法。
根据本发明实施例,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行实施例1所述的获取编译时长的方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
1.一种获取编译时长的方法,其特征在于,包括:
获取待编译的目标代码;
通过运行测试脚本,多次执行清除测试对象的编译缓存并编译所述目标代码的步骤,得到多个编译时长;
在多次编译结束后,利用所述多个编译时长统计得到所述目标代码的目标编译时长。
2.根据权利要求1所述的方法,其特征在于,获取所述目标代码,包括:
接收所述目标代码的属性信息,其中,所述属性信息包括:所述目标代码的路径和所述目标代码的标识;
通过所述测试脚本根据所述目标代码的路径以及所述目标代码的标识查找到所述目标代码。
3.根据权利要求1所述的方法,其特征在于,通过运行测试脚本,多次执行清除测试对象的编译缓存并编译所述目标代码的步骤,得到多个编译时长,包括:
通过所述测试脚本中的缓存清除命令清除所述测试对象的缓存;
通过所述测试脚本根据所述目标代码的类型确定所述目标代码的编译命令,并根据所述编译命令编译所述目标代码;
在编译完成所述目标代码之后,获得此次编译的编译时长,并判断所述目标代码的编译次数是否到达预设值;
在所述目标代码的编译次数到达所述预设值的情况下,确定编译结束;
在所述目标代码的编译次数未到达所述预设值的情况下,重新进入通过所述测试脚本中的缓存清除命令清除所述测试对象的缓存的步骤。
4.根据权利要求1所述的方法,其特征在于,利用所述多个编译时长统计得到所述目标代码的目标编译时长,包括:
清除所述多个编译时长中的最大值和最小值,得到剩余的多个编译时长;
获取剩余的多个编译时长的平均值,并确定剩余的多个编译时长的平均值为所述目标代码的目标编译时长。
5.根据权利要求1所述的方法,其特征在于,在通过运行测试脚本,多次执行清除测试对象的编译缓存并编译所述目标代码的步骤,得到多个编译时长之前,所述方法还包括:
确定用于运行所述目标代码的测试对象的类型,其中,所述测试对象的类型包括:真机和模拟器;以及
获取所述测试对象所提供的测试环境,其中,所述测试环境包括:机型信息和系统版本信息。
6.根据权利要求5所述的方法,其特征在于,确定用于运行所述目标代码的测试对象的类型,包括:
在检测到测试对象的类型确定信息的情况下,根据所述类型确定信息确定测试对象的类型;
在未检测到测试对象的类型确定信息的情况下,确定所述测试对象的类型为所述模拟器。
7.根据权利要求5所述的方法,其特征在于,在所述测试对象的类型为所述真机的情况下,获取所述测试对象所提供的测试环境,包括:
获取所述真机的唯一识别码,并根据所述唯一识别码确定当前测试所使用的测试对象;
读取所述测试对象的机型信息和系统版本信息。
8.根据权利要求5所述的方法,其特征在于,在所述测试对象的类型为所述模拟器的情况下,获取所述测试对象所提供的测试环境,包括:
在接收到测试环境信息的情况下,获取所述测试环境信息所指示的测试环境;
在未接收到测试环境信息的情况下,确定所述测试环境为所述模拟器所兼容的最新的机型和最高版本的系统。
9.一种获取编译时长的装置,其特征在于,包括:
获取模块,用于获取待编译的目标代码;
编译模块,用于通过运行测试脚本,多次执行清除测试对象的编译缓存并编译所述目标代码的步骤,得到多个编译时长;
统计模块,用于在多次编译结束后,利用所述多个编译时长统计得到所述目标代码的目标编译时长。
10.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至8中任意一项所述的获取编译时长的方法。
11.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至8中任意一项所述的获取编译时长的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110579898.2A CN113326046B (zh) | 2021-05-26 | 2021-05-26 | 获取编译时长的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110579898.2A CN113326046B (zh) | 2021-05-26 | 2021-05-26 | 获取编译时长的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113326046A true CN113326046A (zh) | 2021-08-31 |
CN113326046B CN113326046B (zh) | 2023-09-26 |
Family
ID=77416889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110579898.2A Active CN113326046B (zh) | 2021-05-26 | 2021-05-26 | 获取编译时长的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113326046B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114328149A (zh) * | 2021-12-13 | 2022-04-12 | 北京五八信息技术有限公司 | 编译时长的统计方法、装置、电子设备及可读介质 |
Citations (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0684082A (ja) * | 1992-09-02 | 1994-03-25 | Fujitsu Ltd | 処理装置における経過時間算出・統計方式 |
US5748961A (en) * | 1993-07-12 | 1998-05-05 | Digital Equipment Corporation | Efficient method and apparatus for compiling and linking modules of computer code in a large software system |
US5854932A (en) * | 1995-08-17 | 1998-12-29 | Microsoft Corporation | Compiler and method for avoiding unnecessary recompilation |
US20020104076A1 (en) * | 1998-06-30 | 2002-08-01 | Nik Shaylor | Code generation for a bytecode compiler |
WO2003021433A1 (en) * | 2001-09-03 | 2003-03-13 | Mobilesoft (Aust) Pty Ltd. | Method and system for compiling and verifying computer code |
EP1349063A2 (en) * | 2002-03-27 | 2003-10-01 | Lisa Tek, Inc. | Program simulation with just-in-time compilation |
JP2005301415A (ja) * | 2004-04-07 | 2005-10-27 | Ricoh Co Ltd | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム |
US20080034148A1 (en) * | 2006-08-01 | 2008-02-07 | International Business Machines Corporation | Systems and methods for providing performance monitoring in a memory system |
US20110239200A1 (en) * | 2008-07-25 | 2011-09-29 | MLstate | Method for compiling a computer program |
US20130212567A1 (en) * | 2012-02-13 | 2013-08-15 | Microsoft Corporation | Generating and caching software code |
US20150212838A1 (en) * | 2014-01-24 | 2015-07-30 | International Business Machines Corporation | Just-in-time expensive compilation hints |
US20170161033A1 (en) * | 2015-11-30 | 2017-06-08 | Oracle International Corporation | Multi-Platform Compiling |
CN107608677A (zh) * | 2017-09-05 | 2018-01-19 | 腾讯科技(深圳)有限公司 | 一种编译处理方法、装置及电子设备 |
CN109542443A (zh) * | 2017-07-27 | 2019-03-29 | 阿里巴巴集团控股有限公司 | 应用程序的编译方法及装置、计算机终端、数据处理方法 |
CN109710294A (zh) * | 2019-03-06 | 2019-05-03 | 苏州浪潮智能科技有限公司 | 一种系统版本升级方法、装置、设备及计算机存储介质 |
CN109857637A (zh) * | 2018-12-25 | 2019-06-07 | 杭州茂财网络技术有限公司 | 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置 |
US20190205107A1 (en) * | 2017-12-29 | 2019-07-04 | Semmle Limited | Compiler caching based on semantic structure |
CN110309068A (zh) * | 2019-06-18 | 2019-10-08 | 平安普惠企业管理有限公司 | 测试方法及相关设备 |
CN110941424A (zh) * | 2019-11-28 | 2020-03-31 | Oppo广东移动通信有限公司 | 编译参数优化方法、装置及电子设备 |
CN111125073A (zh) * | 2019-12-05 | 2020-05-08 | 苏宁云计算有限公司 | 一种大数据平台数据质量校验的方法、装置及系统 |
CN111240689A (zh) * | 2020-01-13 | 2020-06-05 | 广州虎牙科技有限公司 | 应用程序的构建方法、装置、设备及存储介质 |
CN111610977A (zh) * | 2020-05-19 | 2020-09-01 | 腾讯科技(深圳)有限公司 | 一种编译方法和相关装置 |
CN112328259A (zh) * | 2020-11-26 | 2021-02-05 | 北京五八信息技术有限公司 | 一种编译时长的处理方法和装置 |
CN112540769A (zh) * | 2020-12-29 | 2021-03-23 | Oppo广东移动通信有限公司 | 编译处理方法、装置、电子设备以及存储介质 |
WO2021068113A1 (zh) * | 2019-10-08 | 2021-04-15 | 深圳市欢太科技有限公司 | 时长统计方法、装置、电子设备和计算机可读介质 |
-
2021
- 2021-05-26 CN CN202110579898.2A patent/CN113326046B/zh active Active
Patent Citations (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0684082A (ja) * | 1992-09-02 | 1994-03-25 | Fujitsu Ltd | 処理装置における経過時間算出・統計方式 |
US5748961A (en) * | 1993-07-12 | 1998-05-05 | Digital Equipment Corporation | Efficient method and apparatus for compiling and linking modules of computer code in a large software system |
US5854932A (en) * | 1995-08-17 | 1998-12-29 | Microsoft Corporation | Compiler and method for avoiding unnecessary recompilation |
US20020104076A1 (en) * | 1998-06-30 | 2002-08-01 | Nik Shaylor | Code generation for a bytecode compiler |
WO2003021433A1 (en) * | 2001-09-03 | 2003-03-13 | Mobilesoft (Aust) Pty Ltd. | Method and system for compiling and verifying computer code |
EP1349063A2 (en) * | 2002-03-27 | 2003-10-01 | Lisa Tek, Inc. | Program simulation with just-in-time compilation |
JP2005301415A (ja) * | 2004-04-07 | 2005-10-27 | Ricoh Co Ltd | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム |
US20080034148A1 (en) * | 2006-08-01 | 2008-02-07 | International Business Machines Corporation | Systems and methods for providing performance monitoring in a memory system |
US20110239200A1 (en) * | 2008-07-25 | 2011-09-29 | MLstate | Method for compiling a computer program |
US20130212567A1 (en) * | 2012-02-13 | 2013-08-15 | Microsoft Corporation | Generating and caching software code |
US20150212838A1 (en) * | 2014-01-24 | 2015-07-30 | International Business Machines Corporation | Just-in-time expensive compilation hints |
US20170161033A1 (en) * | 2015-11-30 | 2017-06-08 | Oracle International Corporation | Multi-Platform Compiling |
CN109542443A (zh) * | 2017-07-27 | 2019-03-29 | 阿里巴巴集团控股有限公司 | 应用程序的编译方法及装置、计算机终端、数据处理方法 |
CN107608677A (zh) * | 2017-09-05 | 2018-01-19 | 腾讯科技(深圳)有限公司 | 一种编译处理方法、装置及电子设备 |
US20190205107A1 (en) * | 2017-12-29 | 2019-07-04 | Semmle Limited | Compiler caching based on semantic structure |
CN109857637A (zh) * | 2018-12-25 | 2019-06-07 | 杭州茂财网络技术有限公司 | 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置 |
CN109710294A (zh) * | 2019-03-06 | 2019-05-03 | 苏州浪潮智能科技有限公司 | 一种系统版本升级方法、装置、设备及计算机存储介质 |
CN110309068A (zh) * | 2019-06-18 | 2019-10-08 | 平安普惠企业管理有限公司 | 测试方法及相关设备 |
WO2021068113A1 (zh) * | 2019-10-08 | 2021-04-15 | 深圳市欢太科技有限公司 | 时长统计方法、装置、电子设备和计算机可读介质 |
CN110941424A (zh) * | 2019-11-28 | 2020-03-31 | Oppo广东移动通信有限公司 | 编译参数优化方法、装置及电子设备 |
CN111125073A (zh) * | 2019-12-05 | 2020-05-08 | 苏宁云计算有限公司 | 一种大数据平台数据质量校验的方法、装置及系统 |
CN111240689A (zh) * | 2020-01-13 | 2020-06-05 | 广州虎牙科技有限公司 | 应用程序的构建方法、装置、设备及存储介质 |
CN111610977A (zh) * | 2020-05-19 | 2020-09-01 | 腾讯科技(深圳)有限公司 | 一种编译方法和相关装置 |
CN112328259A (zh) * | 2020-11-26 | 2021-02-05 | 北京五八信息技术有限公司 | 一种编译时长的处理方法和装置 |
CN112540769A (zh) * | 2020-12-29 | 2021-03-23 | Oppo广东移动通信有限公司 | 编译处理方法、装置、电子设备以及存储介质 |
Non-Patent Citations (10)
Title |
---|
MAKSYM SCHCHEGLOV: "Xcode build time potimization", 《HTTPS://BETTERPROGRAMMING.PUB/XCODE-BUILD-TIME-OPTIMIZATION-PART-1-9ADB5073994B》 * |
TSUI YUENHONG: "Swift 编译耗时分析", 《HTTPS://XIAOZHUANLAN.COM/TOPIC/3247681950》 * |
仇建飞;: "打造微服务容器化客服系统的设计与实现", 中国新通信, no. 18 * |
周波;张源;杨珉;周曦;: "用代码缓存复用技术提升Android即时编译器效率", 小型微型计算机系统, no. 06 * |
李宇;李方;: "淘宝网最佳实践之ABS自动编译", 程序员, no. 02 * |
李旭;卢凯;李根;: "Jikes RVM动态编译技术分析与性能评测", 计算机科学, no. 04 * |
王洪生: "基于国产平台的LLVM JIT编译优化技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
谭延丹;易会战;张鹏;: "面向多核体系结构的并行迭代编译技术研究", 计算机工程与科学, no. 03 * |
陈献庆;郭亚楠;张玉龙;闫振宇;: "VLD远程编译系统的设计与实现", 电子技术应用, no. 11 * |
黄洪波: "大规模程序评判系统的设计与实现", 《计算机工程与设计》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114328149A (zh) * | 2021-12-13 | 2022-04-12 | 北京五八信息技术有限公司 | 编译时长的统计方法、装置、电子设备及可读介质 |
CN114328149B (zh) * | 2021-12-13 | 2023-07-07 | 北京五八信息技术有限公司 | 编译时长的统计方法、装置、电子设备及可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113326046B (zh) | 2023-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108984389B (zh) | 一种应用程序测试方法及终端设备 | |
CN108845930B (zh) | 界面操作测试方法和装置、存储介质及电子装置 | |
CN110944048B (zh) | 业务逻辑配置方法及装置 | |
CN111144839B (zh) | 一种项目构建方法、持续集成系统及终端设备 | |
CN111241111B (zh) | 数据查询方法及装置、数据对比方法及装置、介质及设备 | |
CN109101412B (zh) | 测试文件生成、测试方法、装置、存储介质和计算机设备 | |
CN107621963B (zh) | 一种软件部署方法、软件部署系统及电子设备 | |
CN108897588B (zh) | 一种用于模块间通信的路由方法和路由装置 | |
CN113326046A (zh) | 获取编译时长的方法和装置 | |
CN111124480A (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN105843740B (zh) | 代码编译结果的检测方法和装置 | |
CN112084108A (zh) | 一种测试脚本生成方法、装置及相关组件 | |
CN114879985B (zh) | 一种证书文件的安装方法、装置、设备及存储介质 | |
CN113703753B (zh) | 用于产品开发的方法、装置和产品开发系统 | |
CN111813648A (zh) | 一种应用于App的自动化测试方法、装置、存储介质及电子设备 | |
CN110737438A (zh) | 一种数据处理方法和装置 | |
CN113037521B (zh) | 识别通讯设备状态的方法、通讯系统及存储介质 | |
CN115455059A (zh) | 一种基于底层数据解析用户行为的方法、装置及相关介质 | |
CN114610516A (zh) | 应用程序的修复方法、装置、计算机设备以及存储介质 | |
CN110221952B (zh) | 业务数据的处理方法及装置、业务数据处理系统 | |
CN113031995A (zh) | 一种更新规则的方法、装置、存储介质以及电子设备 | |
CN116775040B (zh) | 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法 | |
CN112860284B (zh) | 设备远程升级的sp升级包生成方法、装置及计算机设备 | |
CN110704256B (zh) | 存储系统的测试方法、装置、设备及计算机可读存储介质 | |
CN113868137A (zh) | 埋点数据的处理方法、装置、系统和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |