热点代码处理方法、装置、服务器、电子设备及存储介质
文献发布时间:2023-06-19 11:22:42
技术领域
本申请涉及计算机技术领域,更具体地,涉及一种热点代码处理方法、装置、服务器、电子设备及存储介质。
背景技术
电子设备,例如平板电脑、智能终端等,已经成为人们日常生活中最常用的消费型电子产品之一。人们通常于电子设备中安装各种应用程序,以满足不同的需求。在应用程序的使用中,通常将应用程序的使用频繁的方法或代码作为热点代码,并预先对热点代码编译为二进制机器码,编译得到的二进制机器码可以用于在下次运行应用程序时直接由处理器执行,从而提升应用程序的运行速度。但是,在热点代码过多时,应用程序的安装会占用过多的带宽和时间,对用户造成不良的影响。
发明内容
鉴于上述问题,本申请提出了一种热点代码处理方法、装置、服务器、电子设备及存储介质,以解决上述问题。
第一方面,本申请实施例提供了一种热点代码处理方法,所述方法包括:获取目标应用程序在启动过程中的启动代码,并获取所述目标应用程序在使用过程中的多个热点代码;按指定条件对所述多个热点代码进行分割处理,获得至少两个热点代码块;基于所述启动代码和所述至少两个热点代码块,生成目标配置文件;将所述目标配置文件下发至客户端,所述目标配置文件用于指示所述客户端分阶段编译所述启动代码和所述至少两个热点代码块。
第二方面,本申请实施例提供了一种热点代码处理方法,所述方法包括:接收服务器下发的目标配置文件,所述目标配置文件基于目标应用程序在启动过程中的启动代码和至少两个热点代码块生成,所述至少两个热点代码块由所述目标应用程序在使用过程中的多个热点代码分割获得;基于所述目标配置文件,分阶段编译所述启动代码和所述至少两个热点代码块。
第三方面,本申请实施例提供了一种热点代码处理装置,代码获取模块,用于获取目标应用程序在启动过程中的启动代码,并获取所述目标应用程序在使用过程中的多个热点代码;代码分割模块,用于按指定条件对所述多个热点代码进行分割处理,获得至少两个热点代码块;配置文件生成模块,用于基于所述启动代码和所述至少两个热点代码块,生成目标配置文件;配置文件下发模块,用于将所述目标配置文件下发至客户端,所述目标配置文件用于指示所述客户端分阶段编译所述启动代码和所述至少两个热点代码块。
第四方面,本申请实施例提供的一种热点代码处理装置,所述装置包括:配置文件接收模块,用于接收服务器下发的目标配置文件,所述目标配置文件基于目标应用程序在启动过程中的启动代码和至少两个热点代码块生成,所述至少两个热点代码块由所述目标应用程序在使用过程中的多个热点代码分割获得;代码编译模块,用于基于所述目标配置文件,分阶段编译所述启动代码和所述至少两个热点代码块。
第五方面,本申请实施例提供了一种服务器,包括存储器和处理器,所述存储器耦接到所述处理器,所述存储器存储指令,当所述指令由所述处理器执行时所述处理器执行上述方法。
第六方面,本申请实施例提供了一种电子设备,包括存储器和处理器,所述存储器耦接到所述处理器,所述存储器存储指令,当所述指令由所述处理器执行时所述处理器执行上述方法。
第七方面,本申请实施例提供了一种计算机可读取存储介质,所述计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行上述方法。
本申请实施例提供的热点代码处理方法、装置、服务器、电子设备及存储介质,获取目标应用程序在启动过程中的启动代码,并获取目标应用程序在使用过程中的多个热点代码,按指定条件对多个热点代码进行分割处理,获得至少两个热点代码块,基于启动代码和至少两个热点代码块,生成目标配置文件,将目标配置文件下发至客户端,目标配置文件用于指示客户端分阶段编译启动代码和至少两个热点代码块,从而通过将应用程序的多个热点代码进行分割处理获得至少两个热点代码块,再基于启动代码和至少两个热点代码块生成目标配置文件,以加快应用程序的安装速度,优化应用程序的性能。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出了可用于本申请实施例提供的热点代码确定方法的一种应用环境示意图;
图2示出了可用于本申请实施例提供的热点代码确定方法的又一种应用环境示意图;
图3示出了本申请一个实施例提供的热点代码确定方法的流程示意图;
图4示出了本申请又一个实施例提供的热点代码确定方法的流程示意图;
图5示出了本申请再一个实施例提供的热点代码确定方法的流程示意图;
图6示出了本申请另一个实施例提供的热点代码确定方法的流程示意图;
图7示出了本申请一个实施例提供的热点代码确定装置的模块框图;
图8示出了本申请又一个实施例提供的热点代码确定装置的模块框图;
图9示出了本申请实施例用于执行根据本申请实施例的热点代码处理方法的服务器的框图;
图10示出了本申请实施例用于执行根据本申请实施例的热点代码处理方法的电子设备的框图;
图11示出了本申请实施例的用于保存或者携带实现根据本申请实施例的热点代码处理方法的程序代码的存储单元。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
其中,Java是运行在Java虚拟机上的,所以Java代码具有比较强的可移植性,而Android平台的绝大多数应用程度都是使用Java语言编写的,因此,Android平台有一个JVM虚拟机或者说实现了一个自己的JVM虚拟机。在Android 5.0之前使用的是Dalvik虚拟机,它支持dex(Dalvik Executable)格式的Java应用程序的运行。从Android 5.0开始,ART就彻底代替了原先的Dalvik,成为Android系统上新的虚拟机。ART使用预先(AOT)编译,并且从Android N版本采用了JIT+AOT+解释执行的编译模式,并引入了Profile-Guide-Optimization(PGO)机制,该过程如下:
1.最初安装应用程序时,系统不会对.dex文件进行AOT编译;
2.应用程序运行时,没有被热点识别过的代码(cold code)会先通过JAVA解析器被直接执行,在执行过程中当虚拟机发现某个方法或者代码块运行特别频繁时会将其认定为热点代码(hot code),经过JIT编译后存储在缓存中,这样在下次启动应用时如果遇到这些代码,会优先从缓存中执行编译后的代码。另外,系统也会生成配置文件(profile文件)来记录热点代码(热点函数)的信息;
3.除了JIT编译之外,当设备空闲且处于充电状态时,AOT编译器也会利用profile信息重新编译应用生成.oat文件,使得这些热点代码下次启动后不再需要在运行时进行JIT优化。
利用PGO机制,一个应用程序中需要编译的代码只会是程序中最经常执行的那一部分java字节码,而不会是整个程序中的代码。这样的做法可以在较大限度地提升了程序的运行性能的同时,又尽量减少对应用安装速度和额外的空间占用的影响,减轻了单个JIT或AOT编译所可能带来的弊端。
然而,使用传统JIT编译器的Dalvik虚拟机有着以下问题:1.每次启动应用程序时都需要重新将.dex文件编译为机器码再执行(没有缓存机制,非热点代码以解释运行方式执行),这个操作比较耗时,因此Dalvik虚拟机一直被使用者认为是拖慢Android系统速度,和IOS存在流畅度差距的根源;2.运行应用程序时使用了较多的CPU资源,因此也会带来续航和发热的问题。
使用AOT机制的ART虚拟机虽然解决了Dalvik虚拟机所带来的问题,但也带来了新的缺陷:1.应用程序安装以及升级系统版本之后的应用优化比较耗时(每次安装新应用程序以及系统升级后,都需要对应用程序进行预编译,生成机器码),随着应用程序体积越来越大,单个应用程序安装或优化时长甚至可以达到几分钟;2..dex文件预编译后生成的机器码会占用额外的存储空间(这个缺陷的严重性在高速发展的手机存储空间和性能面前被弱化了)。
使用JIT+AOT+解释执行的机制,解决了单个JIT或是单个AOT编译模式所带来的缺陷,但是这个看似完美的机制,也有着一定的局限性:1.每当用户安装应用程序并初次使用时,该应用程序都是未经过优化的。只有在用户使用该应用一段时间后,系统才可以生成符合用户使用习惯的profile信息,从而优化应用程序,提升速度。这个问题在用户初次使用手机时会比较明显。2.应用程序的profile信息只能针对当前版本的应用进行优化,如果应用程序的版本升级,那么就需要系统重新收集应用程序的profile信息来优化程序,如果应用程序升级的频率较快,那么这个应用程序实际上被优化的时间也会大大减少。由于目前大部分主流应用程序的升级频率都在1周到1个月之间,因此这个优化机制对系统流畅性的提升较难达到理想水平。另外,通过profile文件记录热点代码信息,profile文件越大,所包含的热点代码信息越多,在dex文件中需要编译的java字节码越多,编译后直接执行机器码机会就越多,需要经过解释执行和JIT编译优化的流程就越少,应用程序性能提升越大。但是,profile热点文件越大,安装期间编译时长就越长,对安装速度影响就越大,对用户体验造成一定的影响。
针对上述问题,发明人经过长期的研究发现,并提出了本申请实施例提供的热点代码处理方法、装置、服务器、电子设备及存储介质,通过将应用程序的多个热点代码进行分割处理获得至少两个热点代码块,再基于启动代码和至少两个热点代码块生成目标配置文件,以加快应用程序的安装速度,优化应用程序的性能。其中,具体的热点代码处理方法在后续的实施例中进行详细的说明。
请参阅图3,图3示出了本申请一个实施例提供的热点代码处理方法的流程示意图。所述热点代码处理方法用于通过将应用程序的多个热点代码进行分割处理获得至少两个热点代码块,再基于启动代码和至少两个热点代码块生成目标配置文件,以加快应用程序的安装速度,优化应用程序的性能。在具体的实施例中,所述热点代码处理方法应用于如图7所示的热点代码处理装置300以及配置有热点代码处理装置300的服务器100(图9)。下面将以服务器为例,说明本实施例的具体流程,当然,可以理解的,本实施例所应用的服务器可以为云服务器,也可以为传统服务器等,在此不做限定。下面将针对图3所示的流程进行详细的阐述,所述热点代码处理方法具体可以包括以下步骤:
步骤S101:获取目标应用程序在启动过程中的启动代码,并获取所述目标应用程序在使用过程中的多个热点代码。
在本实施例中,目标应用程序可以为在客户端安装并使用的应用程序,例如,当客户端安装并使用第一应用程序、第二应用程序以及第三应用程序时,那么,目标应用程序可以包括第一应用程序、第二应用程序以及第三应用程序。其中,目标应用程序一般包括在启动过程中的启动代码,以及在使用过程中的功能代码,其中,在使用过程中的功能代码又可以根据功能代码的使用次数、功能代码的使用频率、功能代码的重要程度等分为热点代码和非热点代码。
在一些实施方式中,可以获取目标应用程序在启动过程中的启动代码,以及获取目标应用程序在使用过程中的多个热点代码。作为一种方式,服务器可以获取电子设备上传的与目标应用程序相关的第一配置文件,并从第一配置文件中获取目标应用程序在启动过程中的启动代码,和目标应用程序在使用过程中的多个热点代码。作为另一种方式,服务器可以收集用户使用的目标应用程序的第二配置文件,并从第二配置文件中获取目标应用程序在启动过程中的启动代码,和目标应用程序在使用过程中的多个热点代码。
在一些实施方式中,目标应用程序在启动过程中的启动代码可以包括:与目标应用程序的启动相关的所有代码,例如,与目标应用程序的启动路径相关的代码、与目标应用程序的主界面活动组件(Activity)相关的代码等。目标应用程序在使用过程中的多个热点代码可以通过以下多种方式中的一种或几种方式获取:目标应用程序的各个活动组件的打开次数、目标应用程序的各个跳转路径的跳转次数、目标应用程序的各个活动组件的打开频率、目标应用程序的各个跳转路径的跳转频率、目标应用程序的各个活动组件的重要程度等。其中,目标应用程序的活动组件的打开次数达到第一次数阈值时,可以将该活动组件对应的代码确定为热点代码;目标应用程序的跳转路径的跳转次数达到第二次数阈值时,可以将该跳转路径对应的代码确定为热点代码;目标应用程序的活动组件的打开频率达到第一频率阈值时,可以将该活动组件对应的代码确定为热点代码;目标应用程序的跳转路径的跳转频率达到第二频率阈值时,可以将活动组件对应的代码确定为热点代码;目标应用程序的各个活动组件的重要程度达到重要程度阈值时,可以将活动组件对应的代码确定为热点代码。
其中,目标应用程序的各个活动组件的重要程度可以通过目标应用程序的功能描述信息确定,例如,可以通过应用程序的“应用信息”或“应用标签”获取该应用程序的功能描述信息。在一些实施方式中,可以获取应用商店中对于目标应用程序的描述,将应用商店中对于目标应用程序的描述确定为目标应用程序的功能描述信息。例如,微信的功能描述信息包括:发语音、文本信息、图片等;朋友圈分享生活点滴;扫一扫;公众号等。在一些实施方式中,在获取目标应用程序的功能描述信息之后,可以从多个活动组件中确定功能描述信息涉及的活动组件,并将功能描述信息涉及的活动组件对应的代码确定为热点代码。其中,功能描述信息涉及的活动组件的数量可以为一个或多个,在此不做限定。例如,当微信应用程序的功能描述信息包括扫一扫和朋友圈分享生活点滴时,可以将微信应用程序中扫一扫所涉及的活动组件对应的代码确定为热点代码,并将微信应用程序中朋友圈涉及的活动组件对应的代码确定为热点代码等,在此不做限定。
步骤S102:按指定条件对所述多个热点代码进行分割处理,获得至少两个热点代码块。
在一些实施方式中,服务器预先设置并存储有指定条件,该指定条件用于作为多个热点代码的分割依据。因此,在本实施例中,在获取目标应用程序在启动过程中的启动代码,并获取目标应用程序在使用过程中的多个热点代码后,可以按指定条件对多个热点代码进行分割处理,获得至少两个热点代码块。其中,在本实施例中,可以根据多个热点代码的数量或大小确定分割后的热点代码块的数量,例如,当多个热点代码的数量较多时,可以将多个热点代码分割为数量较多的热点代码块,当多个热点代码的数量较少时,可以将多个热点代码分割为数量较少的热点代码块。又例如,当多个热点代码的大小较大时,可以将多个热点代码分割为数量较多的热点代码块,当多个热点代码的大小较小时,可以将多个热点代码分割为数量较少的热点代码块。
在一些实施方式中,目标应用程序在启动过程中的启动代码可以进行分割处理,也可以不进行分割处理,在此不做限定。
步骤S103:基于所述启动代码和所述至少两个热点代码块,生成目标配置文件。
在一些实施方式中,服务器在获得目标应用程序的启动代码和目标应用程序的至少两个热点代码块后,可以基于启动代码和至少两个热点代码块,生成目标配置文件,其中,目标配置文件可以包括多个配置文件。作为一种方式,多个配置文件可以分别包括启动代码、至少两个热点代码块中的第一热点代码块、至少两个热点代码块中的第二热点代码块、至少两个热点代码块中的第三热点代码块……、至少两个热点代码块中的第N热点代码块。作为另一种方式,多个配置文件可以分别包括启动代码和至少两个热点代码块中的第一热点代码块、至少两个热点代码块中的第二热点代码块、至少两个热点代码块中的第三热点代码块……、至少两个热点代码块中的第N热点代码块。
步骤S104:将所述目标配置文件下发至客户端,所述目标配置文件用于指示所述客户端分阶段编译所述启动代码和所述至少两个热点代码块。
在一些实施方式中,服务器在生成目标配置文件后,可以将目标配置文件下发至客户端,以指示客户端分阶段编译启动代码和至少两个热点代码块,以减少安装阶段对安装速度的影响,同时可以采样更多的热点代码进行编译,避免了采样过大对安装速度的影响,尽最大限度优化应用程序的性能。
作为一种方式,服务器可以将目标配置文件下发至客户端,以指示客户端在目标应用程序的安装阶段编译启动代码,以及电子设备的后台空闲阶段再依次编译多个热点代码块等,在此不做限定。
作为另一种方式,目标配置文件可以包括startup-profile和other-profiles,其中,startup-profile表征与启动和布局相关的热点代码,其可以仅包括启动代码,或者包括启动代码和部分热点代码块,other-profiles表征剩余不同于startup-profile的配置文件。在下载目标应用程序后,首先需要编译的是与目标应用程序的启动相关的热点代码startup-profile,目的是提高应用的启动速度,后续的other profiles可以根据otherprofiles的重要程度逐步编译,逐步提升应用程序的性能。
本申请一个实施例提供的热点代码处理方法,获取目标应用程序在启动过程中的启动代码,并获取目标应用程序在使用过程中的多个热点代码,按指定条件对多个热点代码进行分割处理,获得至少两个热点代码块,基于启动代码和至少两个热点代码块,生成目标配置文件,将目标配置文件下发至客户端,目标配置文件用于指示客户端分阶段编译启动代码和至少两个热点代码块,从而通过将应用程序的多个热点代码进行分割处理获得至少两个热点代码块,再基于启动代码和至少两个热点代码块生成目标配置文件,以加快应用程序的安装速度,优化应用程序的性能。
请参阅图4,图4示出了本申请又一个实施例提供的热点代码处理方法的流程示意图。该方法应用于上述服务器,下面将针对图4所示的流程进行详细的阐述,所述热点代码处理方法具体可以包括以下步骤:
步骤S201:获取所述目标应用程序的属性信息和当前配置文件。
在一些实施方式中,在确定用户使用的目标应用程序后,可以获取目标应用程序的属性信息和当前配置文件。在一些实施方式中,可以收集得到目标应用程序的属性信息和在使用过程中的配置文件(app profile),并将收集得到的配置文件作为目标应用程序对应的当前配置文件。具体地,目标应用程序可以包括多个不同的应用程序,因此,当前配置文件可以包括多个不同的配置文件,一个应用程序对应一个配置文件,属性信息可以包括多个不同的属性信息,一个应用程序对应一个属性信息。其中,目标应用程序对应的属性信息和当前配置文件可以由客户端收集后上传至服务器,相应的,服务器可以获取客户端上传的目标应用程序对应的属性信息和当前配置文件。其中,目标应用程序的属性信息可以包括目标应用程序的包名、版本号等,在此不做限定。其中,目标应用程序的当前配置文件可以记录目标应用程序的启动代码标识和热点代码标识等,在此不做限定。
在一些实施方式中,服务器在获取目标应用程序的当前配置文件后,还可以对当前配置文件进行清洗,以除去所获取的当前配置文件中不完整的配置文件和无效的配置文件,保证所确定的当前配置文件的有效性。
步骤S202:基于所述属性信息,从所述目标应用程序对应的安装包中提取代码记录文件,并获取所述代码记录文件中记录的所有代码。
在一些实施方式中,根据所获取的目标应用程序的属性信息,可以获取该目标应用程序对应的安装包(APK)文件,并从安装包文件中提取代码记录(dex)文件,找出该代码记录文件中所记录的所有代码(method),可以记为method集合。例如,目标应用程序的属性信息包括目标应用程序的版本号,可以获取该版本号对应的安装包文件,并从安装包文件中提取代码记录文件,找出该代码记录文件中所记录的该版本的目标应用程序的所有代码。
步骤S203:从所述当前配置文件中提取所述目标应用程序在启动过程中的启动代码标识。
在一些实施方式中,在获取目标应用程序的当前配置文件后,可以从当前配置文件中提取该目标应用程序在启动过程中的启动代码标识。其中,当前配置文件中记录的是数字,如startup methods:10021,10022,10023等形式,表示在所有代码中的一个序号,于本实施例中,需要找出当前配置文件中的每个配置文件对应每个应用程序的startup_method_ids。一个应用存在多个代码记录文件(dex),而这个startup_method_ids是和每个代码记文件对应的,后续根据这个id,在应用程序的代码记录文件中列出所有代码后,可以还原成具体的代码。
于本实施例中,在当前配置文件中,如果是启动时使用到的热点代码标记为startup methods,如果是启动时使用到的非热点函数标记为post startup methods,提取这两部分method id,记录为startup_method_ids,表示启动相关的代码表示,id以数字形式保存,表示在每个代码记录文件中,每个method在method_ids列表中的索引,即代码记录文件中有个method_ids列表结构保存了所有的method的相关信息,这里的这个索引就是对应method在表中的序号。其中,这部分是获取启动相关的代码,可以称之为startupmethods,这部分代码不一定满足JIT中执行次数(JIT中执行次数达到默认值,就会记录为热点代码),但由于是和目标应用程序启动相关的,影响应用程序的启动速度,所以也认为是热点代码。因此,可以获取在目标应用程序的启动过程中所涉及的所有代码的启动代码标识。
步骤S204:从所述所有代码中,提取与所述启动代码标识对应的启动代码。
在一些实施方式中,在获取代码记录文件记录的所有代码以及启动代码标识后,可以从所有代码中,提取与启动代码标识对应的启动代码,以获得具体的启动代码。
步骤S205:获取所述目标应用程序的属性信息和当前配置文件。
步骤S206:基于所述属性信息,从所述目标应用程序对应的安装包中提取代码记录文件,并获取所述代码记录文件中记录的所有代码。
其中,步骤S205-步骤S206的具体描述请参阅步骤S201-步骤S202,在此不再赘述。
步骤S207:从所述当前配置文件中提取所述目标应用程序在使用过程中的多个热点代码标识。
在一些实施方式中,在获取目标应用程序的当前配置文件后,可以从当前配置文件中提取该目标应用程序在使用过程中的热点代码标识。其中,当前配置文件中记录的是数字,如hot methods:10000,10031,10151等形式,表示在所有代码中的一个序号,于本实施例中,需要找出当前配置文件中的每个配置文件对应每个应用程序的hot_method_ids。一个应用存在多个代码记录文件(dex),而这个hot_method_ids是和每个代码记文件对应的,后续根据这个id,在应用程序的代码记录文件中列出所有代码后,可以还原成具体的代码。
在本实施例中,可以提取当前配置文件中的每个配置文件中的method id,记录为hot_method_ids,表示当前配置文件中所有热点代码表示,id以数字形式保存,表示在每个代码记录文件中,每个method在method_ids列表中的索引,即代码记录文件中有个method_ids列表结构保存了所有的method的相关信息,这里的这个索引就是对应method在表中的序号。
步骤S208:从所述所有代码中,提取与所述多个热点代码标识对应的多个热点代码,其中所述多个热点代码标识与所述多个热点代码一一对应。
在一些实施方式中,在获取代码记录文件记录的所有代码以及多个热点代码标识后,可以从所有代码中,提取与多个热点代码标识对应的多个热点代码,其中,多个热点代码标识与多个热点代码一一对应,以获得具体的多个热点代码。
步骤S209:获取所述多个热点代码的数量。
在一些实施方式中,在提取得到多个热点代码后,可以获取该多个热点代码的数量,可以获取该多个热点代码的大小等,在此不做限定。
步骤S210:当所述多个热点代码的数量大于数量阈值时,按所述指定条件对所述多个热点代码进行分割处理,获得至少两个热点代码块。
在一些实施方式中,服务器预先设置并存储有数量阈值,该数量阈值用于作为多个热点代码的数量的判断依据。因此,在本实施例中,在获取多个热点代码的数量后,可以将多个热点代码的数量和数量阈值进行比较,以判断多个热点代码的数量是否大于数量阈值。其中,当判断结果表征多个热点代码的数量大于数量阈值时,可以确定多个热点代码的数量过多,如果不对多个热点代码进行分割处理,会影响目标应用程序的安装速度,影响用户体验,因此,可以按指定条件对多个热点代码进行分割处理,获得至少两个热点代码块。当判断结果表征多个热点代码的数量不大于数量阈值时,可以确定多个热点代码的数量正常,如果不对多个热点代码进行分割处理,也不会影响目标应用程序的安装速度,可以不对多个热点代码进行分割处理。
步骤S211:基于所述启动代码和所述至少两个热点代码块,生成目标配置文件。
步骤S212:将所述目标配置文件下发至客户端,所述目标配置文件用于指示所述客户端分阶段编译所述启动代码和所述至少两个热点代码块。
其中,步骤S211-步骤S212的具体描述请参阅步骤S103-步骤S104,在此不再赘述。
本申请又一个实施例提供的热点代码处理方法,获取目标应用程序的属性信息和当前配置文件,基于属性信息,从目标应用程序对应的安装包中提取代码记录文件,并获取该代码记录文件中记录的所有代码,从当前配置文件中提取目标应用程序在启动过程中的启动代码标识,从所有代码中提取与启动代码标识对应的启动代码。获取目标应用程序的属性信息和当前配置文件,基于属性信息,从目标应用程序对应的安装包中提取代码记录文件,并获取代码记录文件中记录的所有代码,从当前配置文件中提取目标应用程序在使用过程中的多个热点代码标识,从所有代码中提取与多个热点代码标识对应的多个热点代码。获取多个热点代码的数量,当热点代码的数量大于数量阈值时,按指定条件对多个热点代码进行分割处理,获得至少两个热点代码块,基于启动代码和至少两个热点代码块,生成目标配置文件,将目标配置文件下发至客户端分阶段编译启动代码和至少两个热点代码块。相较于图3所示的热点代码处理方法,本实施例还通过启动代码标识从代码记录文件中提取启动代码,并通过多个热点代码标识从代码记录文件中提取多个热点代码,以提升获取的启动代码和多个热点代码的准确性。
请参阅图5,图5示出了本申请再一个实施例提供的热点代码处理方法的流程示意图。该方法应用于上述服务器,下面将针对图5所示的流程进行详细的阐述,所述热点代码处理方法具体可以包括以下步骤:
步骤S301:获取所述目标应用程序的属性信息和当前配置文件。
步骤S302:基于所述属性信息,从所述目标应用程序对应的安装包中提取代码记录文件,并获取所述代码记录文件中记录的所有代码。
步骤S303:从所述当前配置文件中提取所述目标应用程序在启动过程中的启动代码标识。
步骤S304:从所述所有代码中,提取与所述启动代码标识对应的启动代码。
步骤S305:获取所述目标应用程序的属性信息和当前配置文件。
步骤S306:基于所述属性信息,从所述目标应用程序对应的安装包中提取代码记录文件,并获取所述代码记录文件中记录的所有代码。
步骤S307:从所述当前配置文件中提取所述目标应用程序在使用过程中的多个热点代码标识。
步骤S308:从所述所有代码中,提取与所述多个热点代码标识对应的多个热点代码,其中所述多个热点代码标识与所述多个热点代码一一对应。
其中,步骤S301-步骤S308的具体描述请参阅步骤S201-步骤S208,在此不再赘述。
步骤S309:分别获取所述多个热点代码中的每个热点代码对应的热度值。
在一些实施方式中,在获得多个热点代码后,可以分别获取多个热点代码中的每个热点代码对应的热度值。例如,若多个热点代码包括热点代码A、热点代码B以及热点代码C,则可以分别获取热点代码A对应的热度值、热点代码B对应的热度值以及热点代码C对应的热度值。其中,在本实施例中,每个热点代码对应的热度值可以根据每个热点代码的使用次数、重要程度、热点代码出现次数/配置文件的个数确定,且热点代码的使用次数越多,则热点代码对应的热度值越高;热点代码的使用次数越少,则热点代码对应的热度值越低;热点代码的重要程度越高,则热点代码对应的热度值越高;热点代码的重要程度越低,则热点代码对应的热度值越低;热点代码出现次数/配置文件的个数越大,则热点代码对应的热度值越高;热点代码出现次数/配置文件的个数越小,则热点代码对应的热度值越低。
步骤S310:基于所述每个热点代码对应的热度值和预先设置的多个热度区间,对所述多个热点代码进行分割处理,获得至少两个热点代码块,其中,一个热度区间对应一个热点代码块。
在一些实施方式中,服务器预先设置并存储有多个热度区间,该多个热度区间用于作为每个热点代码的热度值的区分依据。因此,在本实施例中,在获得多个热点代码中的每个热点代码的热度值后,可以基于每个热点代码的热度值和预先设置的多个热度区间,对多个热点代码进行分割处理,以获得至少两个热点代码块,例如,分割出hot_methods_01,hot_methods_02,hot_methods_03……等多个hot method文件。
例如,若多个热度区间包括热度之间1、热度区间2、热度区间3,且多个热点代码包括热点代码A、热点代码B以及热点代码C,当热点代码A对应的热度值在热度区间1内时,可以将热点代码A分割至热度区间1;当热点代码B对应的热度值在热度区间2内时,可以将热点代码B分割至热度区间2;当热点代码C对应的热度值在热度区间3内时,可以将热点代码C分割至热度区间3等。
步骤S311:基于所述启动代码,生成包括所述启动代码的第一目标配置文件。
在一些实施方式中,在确定启动代码后,可以生成包括启动代码的第一目标配置文件。作为一种方式,该第一目标配置文件可以是记录启动代码的索引或标识的配置文件,也可以是记录启动代码的配置文件,在此不做限定。
步骤S312:基于所述至少两个热点代码块,生成至少两个第二目标配置文件,其中,一个第二目标配置文件包括一个热点代码块。
在一些实施方式中,在确定至少两个热点代码块后,可以生成至少两个第二目标配置文件,其中,一个第二目标配置文件包括一个热点代码块。作为一种方式,该第二目标配置文件可以是记录热点代码块的索引或标识的配置文件,也可以是记录热点代码块的配置文件,在此不做限定。
步骤S313:将所述第一目标配置文件和所述至少两个第二目标配置文件共同确定为所述目标配置文件。
可选地,将多个热点代码进行分割处理后,一个热度区间可以对应一个热点代码块。其中,需要明确切割热点代码的目的是为了避免在安装时一口气编译,耗时过长(安装时编译,安装后用户即可或者优化体验),或者假如不在安装时编译,在第一次启动时编译(第一次启动应用通常需要弹框授予权限,这个时候编译也可以尽量避免对用户体验带来影响),为了减少编译带来的影响(会耗时,耗电,耗CPU等),所以提出切割热点,分阶段编译。分成多个目标配置文件,相当于分成多个热点信息载体,在不同阶段编译利用即可,最后经过编译后,都可以合成一个文件(或者理解为不停往同一个文件中新增内容),即目标配置文件。
步骤S314:将所述第一目标配置文件下发至所述客户端,所述第一目标配置文件用于指示所述客户端在安装阶段预先编译所述启动代码。
在一些实施方式中,由于第一目标配置文件包括启动代码,即第一配置文件与目标应用程序的启动相关,可以指示客户端在安装阶段通过AOT预先编译该启动代码,以提升目标应用程序的启动速度。
步骤S315:将所述至少两个第二目标配置文件下发至所述客户端,所述第二目标配置文件用于指示所述客户端在后台空闲阶段按所述至少两个第二目标配置文件的重要程度从高到低的顺序逐步预先编译所述至少两个热点代码块。
在一些实施方式中,由于第二目标配置文件包括热点代码块,即第二配置文件与目标应用程序的使用相关,可以指示客户端不在安装阶段进行预先编译,而可以在后台空闲阶段通过AOT预先编译热点代码块,以减少安装阶段对安装速度的影响。其中,在客户端的后台空闲阶段,可以按至少两个第二目标配置文件的重要程度从高到低的顺序逐步预先编译该至少两个热点代码块。其中,客户端的后台空闲阶段可以包括但不限于:电子设备处于充电阶段、夜晚阶段等,在此不做限定。
本申请再一个实施例提供的热点代码处理方法,获取目标应用程序的属性信息和当前配置文件,基于属性信息,从目标应用程序对应的安装包中提取代码记录文件,并获取该代码记录文件中记录的所有代码,从当前配置文件中提取目标应用程序在启动过程中的启动代码标识,从所有代码中提取与启动代码标识对应的启动代码。获取目标应用程序的属性信息和当前配置文件,基于属性信息,从目标应用程序对应的安装包中提取代码记录文件,并获取代码记录文件中记录的所有代码,从当前配置文件中提取目标应用程序在使用过程中的多个热点代码标识,从所有代码中提取与多个热点代码标识对应的多个热点代码。分别获取多个热点代码中的每个热点代码对应的热度值,基于每个热点代码对应的热度值和预先设置的多个热度区间,对多个热点代码进行分割处理,获得至少两个热点代码块,基于启动代码,生成包括启动代码的第一目标配置文件,基于至少两个热点代码块,生成至少会两个第二目标配置文件,将第一目标配置文件和至少两个第二目标配置文件共同确定为目标配置文件,将第一目标配置文件下发至客户端,该第一目标配置文件用于指示客户端在安装阶段预先编译启动代码,将至少两个第二目标配置文件下发至客户端,第二目标配置文件用于指示客户端在后台空闲阶段按至少两个第二目标配置文件的重要程度从高到低的顺序逐步编译至少两个热点代码块。相较于图3所示的热点代码处理方法,本实施例还通过启动代码标识从代码记录文件中提取启动代码,并通过多个热点代码标识从代码记录文件中提取多个热点代码,以提升获取的启动代码和多个热点代码的准确性。另外,本实施例还根据热度区间分割多个热点代码,以提升热点代码分割的准确性。
请参阅图6,图6示出了本申请另一个实施例提供的热点代码处理方法的流程示意图。所述热点代码处理方法用于通过将应用程序的多个热点代码进行分割处理获得至少两个热点代码块,再基于启动代码和至少两个热点代码块生成目标配置文件,以加快应用程序的安装速度,优化应用程序的性能。在具体的实施例中,所述热点代码处理方法应用于如图8所示的热点代码处理装置400以及配置有热点代码处理装置400的服务器100(图10)。下面将以电子设备为例,说明本实施例的具体流程,当然,可以理解的,本实施例所应用的服务器可以为智能手机、平板电脑、穿戴式电子设备等,在此不做限定。下面将针对图6所示的流程进行详细的阐述,所述热点代码处理方法具体可以包括以下步骤:
步骤S410:接收服务器下发的目标配置文件,所述目标配置文件基于目标应用程序在启动过程中的启动代码和至少两个热点代码块生成,所述至少两个热点代码块由所述目标应用程序在使用过程中的多个热点代码分割获得。
步骤S420:基于所述目标配置文件,分阶段编译所述启动代码和所述至少两个热点代码块。
其中,步骤S410-步骤S420的具体描述请参阅步骤S101-步骤S104,在此不再赘述。
本申请另一个实施例提供的热点代码处理方法,接收服务器下发的目标配置文件,该目标配置文件基于目标应用程序在启动过程中的启动代码和至少两个热点代码块生成,该至少两个热点代码块由目标应用程序在使用过程中的多个热点代码分割获得,基于目标配置文件,分阶段编译启动代码和至少两个热点代码块,从而通过将应用程序的多个热点代码进行分割处理获得至少两个热点代码块,再基于启动代码和至少两个热点代码块生成目标配置文件,以加快应用程序的安装速度,优化应用程序的性能。
请参阅图7,图7示出了本申请一个实施例提供的热点代码处理装置300的模块框图。该热点代码处理装置300应用于上述服务器,下面将针对图7所示的框图进行阐述,所述热点代码处理装置300包括:代码获取模块310、代码分割模块320、配置文件生成模块330以及配置文件下发模块340,其中:
代码获取模块310,用于获取目标应用程序在启动过程中的启动代码,并获取所述目标应用程序在使用过程中的多个热点代码。
进一步地,所述代码获取模块310包括:第一获取子模块、第一代码获取子模块、启动代码标识提取子模块以及启动代码提取子模块,其中:
第一获取子模块,用于获取所述目标应用程序的属性信息和当前配置文件。
第一代码获取子模块,用于基于所述属性信息,从所述目标应用程序对应的安装包中提取代码记录文件,并获取所述代码记录文件中记录的所有代码。
启动代码标识提取子模块,用于从所述当前配置文件中提取所述目标应用程序在启动过程中的启动代码标识。
启动代码提取子模块,用于从所述所有代码中,提取与所述启动代码标识对应的启动代码。
进一步地,所述代码获取模块310包括:第二获取子模块、第二代码获取子模块、热点代码标识提取子模块以及热点代码提取子模块,其中:
第二获取子模块,用于获取所述目标应用程序的属性信息和当前配置文件。
第二代码获取子模块,用于基于所述属性信息,从所述目标应用程序对应的安装包中提取代码记录文件,并获取所述代码记录文件中记录的所有代码。
热点代码标识提取子模块,用于从所述当前配置文件中提取所述目标应用程序在使用过程中的多个热点代码标识。
热点代码提取子模块,用于从所述所有代码中,提取与所述多个热点代码标识对应的多个热点代码,其中所述多个热点代码标识与所述多个热点代码一一对应。
代码分割模块320,用于按指定条件对所述多个热点代码进行分割处理,获得至少两个热点代码块。
进一步地,所述代码分割模块320包括:数量获取子模块和第一代码分割子模块,其中:
数量获取子模块,用于获取所述多个热点代码的数量。
第一代码分割子模块,用于当所述多个热点代码的数量大于数量阈值时,按所述指定条件对所述多个热点代码进行分割处理,获得至少两个热点代码块。
进一步地,所述代码分割模块320包括:热度值获取子模块和第二代码分割子模块,其中:
热度值获取子模块,用于分别获取所述多个热点代码中的每个热点代码对应的热度值。
第二代码分割子模块,用于基于所述每个热点代码对应的热度值和预先设置的多个热度区间,对所述多个热点代码进行分割处理,获得至少两个热点代码块,其中,一个热度区间对应一个热点代码块。
配置文件生成模块330,用于基于所述启动代码和所述至少两个热点代码块,生成目标配置文件。
进一步地,所述配置文件生成模块330包括:第一配置文件生成子模块、第二配置文件生成子模块以及目标配置文件生成子模块,其中:
第一配置文件生成子模块,用于基于所述启动代码,生成包括所述启动代码的第一目标配置文件。
第二配置文件生成子模块,用于基于所述至少两个热点代码块,生成至少两个第二目标配置文件,其中,一个第二目标配置文件包括一个热点代码块。
目标配置文件生成子模块,用于将所述第一目标配置文件和所述至少两个第二目标配置文件共同确定为所述目标配置文件。
配置文件下发模块340,用于将所述目标配置文件下发至客户端,所述目标配置文件用于指示所述客户端分阶段编译所述启动代码和所述至少两个热点代码块。
进一步地,所述配置文件下发模块340包括:第一配置文件下发子模块和第二配置文件下发子模块,其中:
第一配置文件下发子模块,用于将所述第一目标配置文件下发至所述客户端,所述第一目标配置文件用于指示所述客户端在安装阶段预先编译所述启动代码。
第二配置文件下发子模块,用于将所述至少两个第二目标配置文件下发至所述客户端,所述第二目标配置文件用于指示所述客户端在后台空闲阶段按所述至少两个第二目标配置文件的重要程度从高到低的顺序逐步预先编译所述至少两个热点代码块。
请参阅图8,图8示出了本申请又一个实施例提供的热点代码处理装置400的模块框图。该热点代码处理装置400应用于上述电子设备,下面将针对图8所示的框图进行阐述,所述热点代码处理装置400包括:配置文件接收模块410和代码编译模块420,其中:
配置文件接收模块410,用于接收服务器下发的目标配置文件,所述目标配置文件基于目标应用程序在启动过程中的启动代码和至少两个热点代码块生成,所述至少两个热点代码块由所述目标应用程序在使用过程中的多个热点代码分割获得。
代码编译模块420,用于基于所述目标配置文件,分阶段编译所述启动代码和所述至少两个热点代码块。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
请参阅图9,其示出了本申请实施例提供的一种服务器100的结构框图。该服务器100可以是传统服务器,也可以是云服务器等。本申请中的服务器100可以包括一个或多个如下部件:处理器130、存储器140以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器140中并被配置为由一个或多个处理器130执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。
其中,处理器130可以包括一个或者多个处理核。处理器130利用各种接口和线路连接整个服务器100内的各个部分,通过运行或执行存储在存储器140内的指令、程序、代码集或指令集,以及调用存储在存储器140内的数据,执行服务器100的各种功能和处理数据。可选地,处理器130可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(ProgrammableLogic Array,PLA)中的至少一种硬件形式来实现。处理器110可集成中央处理器(CentralProcessing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责待显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器130中,单独通过一块通信芯片进行实现。
存储器140可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器140可用于存储指令、程序、代码、代码集或指令集。存储器140可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储服务器100在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
请参阅图10,其示出了本申请实施例提供的一种电子设备200的结构框图。该电子设备200可以是智能手机、平板电脑、电子书等能够运行应用程序的电子设备。本申请中的电子设备200可以包括一个或多个如下部件:处理器210、存储器220以及一个或多个应用程序,其中一个或多个应用程序可以被存储在存储器220中并被配置为由一个或多个处理器210执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。
其中,处理器210可以包括一个或者多个处理核。处理器210利用各种接口和线路连接整个电子设备200内的各个部分,通过运行或执行存储在存储器220内的指令、程序、代码集或指令集,以及调用存储在存储器220内的数据,执行电子设备200的各种功能和处理数据。可选地,处理器210可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(ProgrammableLogic Array,PLA)中的至少一种硬件形式来实现。处理器210可集成中央处理器(CentralProcessing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责待显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器210中,单独通过一块通信芯片进行实现。
存储器220可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。存储器220可用于存储指令、程序、代码、代码集或指令集。存储器220可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储电子设备200在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
请参阅图11,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质500中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。
计算机可读存储介质500可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。可选地,计算机可读存储介质500包括非易失性计算机可读介质(non-transitory computer-readable storage medium)。计算机可读存储介质500具有执行上述方法中的任何方法步骤的程序代码510的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码510可以例如以适当形式进行压缩。
综上所述,本申请实施例提供的热点代码处理方法、装置、服务器、电子设备及存储介质,获取目标应用程序在启动过程中的启动代码,并获取目标应用程序在使用过程中的多个热点代码,按指定条件对多个热点代码进行分割处理,获得至少两个热点代码块,基于启动代码和至少两个热点代码块,生成目标配置文件,将目标配置文件下发至客户端,目标配置文件用于指示客户端分阶段编译启动代码和至少两个热点代码块,从而通过将应用程序的多个热点代码进行分割处理获得至少两个热点代码块,再基于启动代码和至少两个热点代码块生成目标配置文件,以加快应用程序的安装速度,优化应用程序的性能。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
- 热点代码处理方法、装置、服务器、电子设备及存储介质
- 热点代码处理方法、装置、电子设备及存储介质