CN112148386A - 一种应用加载方法、装置及计算机可读存储介质 - Google Patents
一种应用加载方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN112148386A CN112148386A CN202011082992.9A CN202011082992A CN112148386A CN 112148386 A CN112148386 A CN 112148386A CN 202011082992 A CN202011082992 A CN 202011082992A CN 112148386 A CN112148386 A CN 112148386A
- Authority
- CN
- China
- Prior art keywords
- application
- bytecode
- source code
- installation package
- precompiled
- 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.)
- Withdrawn
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 99
- 238000009434 installation Methods 0.000 claims abstract description 99
- 238000000034 method Methods 0.000 claims abstract description 49
- 230000006870 function Effects 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 claims description 5
- 230000008569 process Effects 0.000 abstract description 36
- 238000010586 diagram Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011900 installation process Methods 0.000 description 3
- 230000007474 system interaction Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
- G06F9/45512—Command shells
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种应用加载方法、装置及计算机可读存储介质,该应用加载方法包括:在接收到应用加载指令时,向应用服务器请求应用安装包;基于应用安装包获取应用源代码以及应用源代码中目标代码段的预编译字节码;控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。通过本申请方案的实施,在脚本引擎执行应用源代码之前,提前进行代码编译,从而脚本引擎在应用加载过程中可跳过特定代码段的“解析‑编译”流程而直接执行相应字节码,有效节省了应用加载过程中的系统资源消耗,并提高了应用加载速度。
Description
技术领域
本申请涉及电子技术领域,尤其涉及一种应用加载方法、装置及计算机可读存储介质。
背景技术
近年来,“轻应用”市场蓬勃发展,微信、支付宝、快应用等平台百花齐放,已经渗透进了用户日常生活的方方面面。各类“轻应用”虽然背后推广的厂商不同,但是都有相同的特点:第一“轻应用”都是无需安装,第二,这类“轻应用”通常来说都是借助于脚本语言来构建生态。因此在这些轻应用平台都会内置一个脚本引擎来执行应用源代码。目前,相关技术中在对“轻应用”进行加载时,通常需要脚本引擎完整执行应用安装包中的应用源代码,会造成较大的系统资源消耗,并且应用加载速度较为受限。
发明内容
本申请实施例提供了一种应用加载方法、装置及计算机可读存储介质,至少能够解决相关技术中应用加载的系统资源消耗较大以及加载速度较慢的问题。
本申请实施例第一方面提供了一种应用加载方法,包括:
在接收到应用加载指令时,向应用服务器请求应用安装包;
基于所述应用安装包获取应用源代码以及预编译字节码;其中,所述预编译字节码为对应于所述应用源代码中目标代码段的字节码;
控制脚本引擎在执行至所述应用源代码的所述目标代码段时,直接运行对应的所述预编译字节码。
本申请实施例第二方面提供了一种应用加载装置,包括:
请求模块,用于在接收到应用加载指令时,向应用服务器请求应用安装包;
获取模块,用于基于所述应用安装包获取应用源代码以及预编译字节码;其中,所述预编译字节码为对应于所述应用源代码中目标代码段的字节码;
控制模块,用于控制脚本引擎在执行至所述应用源代码的所述目标代码段时,直接运行对应的所述预编译字节码。
本申请实施例第三方面提供了一种电子装置,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现上述本申请实施例第一方面提供的应用加载方法中的各步骤。
本申请实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,实现上述本申请实施例第一方面提供的应用加载方法中的各步骤。
由上可见,根据本申请方案所提供的应用加载方法、装置及计算机可读存储介质,在接收到应用加载指令时,向应用服务器请求应用安装包;基于应用安装包获取应用源代码以及应用源代码中目标代码段的预编译字节码;控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。通过本申请方案的实施,在脚本引擎执行应用源代码之前,提前进行代码编译,从而脚本引擎在应用加载过程中可跳过特定代码段的“解析-编译”流程而直接执行相应字节码,有效节省了应用加载过程中的系统资源消耗,并提高了应用加载速度。
附图说明
图1为本申请第一实施例提供的脚本引擎执行应用源代码的流程示意图;
图2为本申请第一实施例提供的应用加载方法的基本流程示意图;
图3为本申请第一实施例提供的一种系统交互示意图;
图4为本申请第一实施例提供的另一种系统交互示意图;
图5为本申请第一实施例提供的一种应用开发流程示意图;
图6为本申请第二实施例提供的应用加载方法的细化流程示意图;
图7为本申请第三实施例提供的应用加载方法的细化流程示意图;
图8为本申请第四实施例提供的应用加载装置的程序模块示意图;
图9为本申请第五实施例提供的电子装置的结构示意图。
具体实施方式
为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1所示为本申请第一实施例中提供的脚本引擎执行应用源代码的流程示意图,目前,在对“轻应用”进行加载时,通常需要脚本引擎(例如JavaScript引擎)对应用源代码(例如JavaScript代码)进行解析生成抽象语法树,然后再编译成字节码,由解释器解释运行,当运行过程中收集到了足够的信息,就会对热点函数进行编译成机器码,其中,“解析-编译”的流程在应用加载过程中通常较为耗时。然而,在“轻应用”场景下,应用源代码除非升级否则是不会改动的,若应用每次加载时脚本引擎均完整执行上述流程,出于“解析-编译字节码”工作完全是重复的,则会造成较大的系统资源消耗,并且应用加载速度较为受限。
基于此,为了解决相关技术中应用加载的系统资源消耗较大以及加载速度较慢的缺陷,本申请第一实施例提供了一种应用加载方法,如图2为本实施例提供的应用加载方法的基本流程图,应用于客户端,该应用加载方法包括以下的步骤:
步骤201、在接收到应用加载指令时,向应用服务器请求应用安装包。
具体的,在本实施例中,应用可以优选的为轻应用,轻应用是一种无需下载、即搜即用的全功能应用。在实际应用中,开发者在开发完成应用之后,将应用安装包上传至应用服务器(例如应用商店)进行发布,从而在客户端在需要使用应用时,向应用服务器请求对应的应用安装包。
应当说明的是,在实际应用中,开发者将应用源代码压缩打包后发布到应用服务器,在客户端中,当用户需要使用一个新的轻应用时,存在于框架的客户端部分会将应用安装包从应用服务器拉取到客户端,然后解压到特定的位置,当应用执行起来后将应用源代码交由脚本引擎处理。
步骤202、基于应用安装包获取应用源代码以及预编译字节码。
具体的,本实施例的预编译字节码为对应于应用源代码中目标代码段的字节码。在实际应用中,应用加载过程可以包括应用启动和应用运行两个阶段,从而应用源代码中包括应用启动和运行所需的所有代码段,由此,本实施例中的目标代码段可以包括应用启动阶段和运行阶段相关的代码段中至少之一,关于目标代码段的选择可视用户实际使用需求而定。在本实施例中,在脚本引擎运行应用源代码之前,提前准备有预编译的字节码,例如对应用启动阶段和/或应用运行阶段对应的代码提前进行编译所得到的字节码。
步骤203、控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。
具体的,区别于相关技术中在应用加载时,每次均需对应用源代码全盘执行“解析-编译-解释运行”的流程,本实施例的客户端或服务器在应用加载之前提前执行“解析-编译”阶段,而得到全盘应用源代码对应的字节码或部分代码段的字节码,从而客户端在应用加载过程中,当脚本引擎执行应用源代码时,会实时判断当前所执行的函数是否有对应的字节码,若有,则可跳过该代码段的“解析-编译”阶段,若无,则按照原有的“解析-编译-解释运行”流程执行该代码段,从而可以有效加快应用的启动速度和/或运行速度,同时可降低系统资源(例如CPU资源)的消耗。应当说明的是,本实施例的应用源代码包括但不限于JavaScript代码,脚本引擎包括但不限于JavaScript引擎。
在本实施例的一些实施方式中,向应用服务器请求应用安装包包括:向应用服务器请求包括应用源代码以及预编译字节码的应用安装包。相对应的,基于应用安装包获取应用源代码以及预编译字节码包括:从应用安装包中提取应用源代码以及预编译字节码。
具体的,如图3所示为本实施例提供的一种系统交互示意图,在本实施例中,当开发者将应用源代码压缩打包后得到的应用安装包发布至应用服务器后,应用服务器可以通过应用预编译器对应用源代码提前进行编译,将应用中目标代码段的源代码预编译为字节码,并将编译后的结果与应用源代码打包为应用安装包,当用户请求使用应用时,应用服务器下发预编译后的应用安装包至客户端的应用安装器,从而客户端在接收到应用安装包后,即可从中解压得到应用源代码以及目标代码段的预编译字节码,以供脚本引擎执行。
进一步地,在本实施例的一些实施方式中,在应用安装包包括:应用源代码以及预编译字节码时,向应用服务器请求应用安装包包括:获取当前所使用的网络连接类型;在网络连接类型为无线热点连接时,向应用服务器请求包括应用源代码以及预编译字节码的应用安装包。
具体的,在实际应用中,预编译字节码的文件大小较大,从而携带有预编译字节码的应用安装包相对于仅包括应用源代码的应用安装包,在传输时要求更多的网络资源。在本实施例中,客户端可以采用不同网络连接方式与应用服务器建立通信连接,本实施例考虑到电子装置处于无线热点连接场景下的网络下载速度较快,且不需耗费网络使用费用,从而允许客户端向应用服务器请求下载带宽要求较高的包括应用源代码和预编译字节码的应用安装包。
在本实施例的另一些实施方式中,向应用服务器请求应用安装包包括:向应用服务器请求包括应用源代码的应用安装包。相对应的,基于应用安装包获取应用源代码以及预编译字节码包括:从应用安装包中提取应用源代码;在接收到应用安装指示时,对应用源代码中目标代码段进行编译,得到预编译字节码。
具体的,如图4所示为本实施例提供的另一种系统交互示意图,在本实施例中,应用服务器所下发至客户端的应用安装包为开发者所发布的原始应用安装包,也即应用安装包内仅包括应用源代码。当客户端在安装过程中,由客户端通过应用预编译器在本地将应用源代码中目标代码段提前编译为字节码,并将这些字节码存放在特定的安装目录,以在应用加载过程中供脚本引擎执行。
进一步地,在本实施例的一些实施方式中,在应用安装包包括:应用源代码时,向应用服务器请求应用安装包包括:获取当前所使用的网络连接类型;在网络连接类型为运营商网络连接时,向应用服务器请求包括应用源代码的应用安装包。
具体的,在实际应用中,当电子装置采用运营商网络(例如4G、5G网络等)与应用服务器建立通信连接时,若进行资源下载则需要耗费网络使用费用,而若需要下载的应用安装包较大则会耗费较多的网络使用费用,并且相对于WiFi等连接方式其网络下载速度也较慢,基于此,本实施例在电子装置采用运营商网络连接方式时,向应用服务器请求仅包括应用源代码的应用安装包,以节省网络使用费用以及降低资源下载耗时。
在本实施例的一些实施方式中,预编译字节码为:基于热点文件中所记录的热点函数信息,对应用源代码中目标代码段进行编译得到的字节码;其中,热点文件包括启动热点文件和运行热点文件中任意一种。
具体的,在本实施例中,针对应用加载过程中的不同阶段,热点文件可以包括启动热点文件和运行热点文件中任意一种,其中,启动热点文件中记录了启动相关的热点函数信息,而运行热点文件中则记录了运行过程中的热点函数信息。如图5所示为本实施例提供的一种应用开发流程示意图,本实施例考虑到对所有应用源代码进行全量预编译会造成存储空间占用较大,基于此,本实施例可以在开发者开发应用完成后,使用热点记录工具将应用加载过程中特定阶段的热点函数信息进行记录,生成热点文件,然后将应用源代码和热点文件一同打包并发布至应用服务器,通过热点文件可以指导应用服务器或客户端进行应用源代码预编译。
其中,在一种情况下,前述对应用源代码中目标代码段进行编译包括:获取应用安装包中所携带的热点文件;基于热点文件中所记录的热点函数信息,对应用源代码中对应的目标代码段进行编译。
具体的,当客户端在安装应用的过程中,如果检测到应用安装包中有热点文件,则启动热点编译器根据文件中记录的热点函数信息对应用源代码中相应代码段进行预编译,得到字节码,可以实现应用加载速度和存储资源占用的折中。
此外,还应当说明的是,在另一种情况下,对应于前述在应用服务器执行应用源代码预编译的实施方式,进一步地,若开发者所上传至应用服务器的应用安装包中包括热点文件,则应用服务器可以根据热点文件中所记录的热点信息对应用源代码中的热点部分进行预编译,得到字节码,并将预编译后的字节码与应用源代码打包然后下发至客户端,从而客户端所接收到的应用安装包中携带有对部分源代码进行预编译后的字节码。
在本实施例的一些实施方式中,在直接运行对应的预编译字节码之后,还包括:根据预编译字节码的运行结果评估预编译字节码的有效性;在预编译字节码失效时,控制脚本引擎运行目标代码段。
具体的,在本实施例中,考虑到实际应用中预编译的字节码出现失效的情况,从而导致应用无法正常加载,本实施例根据字节码的运行结果来对预编译字节码进行有效性评估,从而在感知到字节码失效时,及时控制脚本引擎对原始的代码段进行运行,也即完整的执行“解析-编译-解释运行”流程,以保证应用加载成功率,而避免盲目对字节码进行重复运行而导致应用加载失败。
基于上述本申请实施例的技术方案,在接收到应用加载指令时,向应用服务器请求应用安装包;基于应用安装包获取应用源代码以及应用源代码中目标代码段的预编译字节码;控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。通过本申请方案的实施,在脚本引擎执行应用源代码之前,提前进行代码编译,从而脚本引擎在应用加载过程中可跳过特定代码段的“解析-编译”流程而直接执行相应字节码,有效节省了应用加载过程中的系统资源消耗,并提高了应用加载速度。
图6中的方法为本申请第二实施例提供的一种细化的应用加载方法,该应用加载方法包括:
步骤601、应用服务器对应用源代码中目标代码段进行预编译,并将预编译字节码与应用源代码打包至应用安装包。
在本实施例中,当应用安装包被开发者上传至市场后,应用服务器可以对应用源代码提前进行编译,将应用中目标代码段的源代码预编译为字节码,并将编译后的结果与应用源代码打包为应用安装包。
步骤602、客户端在接收到应用加载指令时,向应用服务器请求应用安装包。
步骤603、应用服务器在接收到客户端发送的安装包获取请求时,将应用安装包下发至客户端。
具体的,在本实施例中,当用户请求使用应用时,应用服务器下发预编译后的应用安装包。应当说明的是,考虑到字节码需要占用相当的下载带宽,本实施例的应用服务器在接收到客户端请求时,可以获取客户端当前的网络连接类型,当确定客户端采用无线热点连接时,将包括字节码和应用源代码的应用安装包下发至客户端,而当确定客户端采用运营商网络连接时,则将仅包括应用源代码的应用安装包下发至客户端。
步骤604、客户端对应用安装包进行解压,得到应用源代码以及对应于应用源代码中目标代码段的预编译字节码。
步骤605、客户端控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。
具体的,客户端在接收到应用安装包后,即可从中解压得到应用源代码以及目标代码段的预编译字节码。从而在应用加载过程中,脚本引擎执行应用源代码时,会实时判断当前所执行的函数是否有对应的字节码,若有,则可跳过该代码段的“解析-编译”阶段,若无,则按照原有的“解析-编译-解释运行”流程执行该代码段。
步骤606、客户端根据预编译字节码的运行结果评估预编译字节码的有效性。
步骤607、客户端在确定预编译字节码失效时,控制脚本引擎对目标代码段进行运行。
具体的,本实施例在感知到字节码失效时,及时控制脚本引擎对原始的代码段进行运行,也即完整的执行“解析-编译-解释运行”流程,以保证应用加载成功率,而避免盲目对字节码进行重复运行而导致应用加载失败。
应当理解的是,本实施例中各步骤的序号的大小并不意味着步骤执行顺序的先后,各步骤的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成唯一限定。
本申请实施例公开了一种应用加载方法,在接收到应用加载指令时,向应用服务器请求应用安装包;基于应用安装包获取应用源代码以及应用源代码中目标代码段的预编译字节码;控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。通过本申请方案的实施,在脚本引擎执行应用源代码之前,提前进行代码编译,从而脚本引擎在应用加载过程中可跳过特定代码段的“解析-编译”流程而直接执行相应字节码,有效节省了应用加载过程中的系统资源消耗,并提高了应用加载速度。
图7中的方法为本申请第三实施例提供的一种细化的应用加载方法,该应用加载方法包括:
步骤701、客户端在接收到应用加载指令时,向应用服务器请求应用安装包。
目前,应用可以分为本地应用(native app)和网页应用(web app)两种类型,本实施例的客户端应用优选的可以为本地应用,在用户触发应用使用时,客户端向应用服务器请求应用安装包。
步骤702、应用服务器将携带有热点文件和应用源代码的应用安装包下发至客户端。
具体的,本实施例的热点文件包括启动热点文件和运行热点文件中任意一种。在本实施例中,开发者在开发应用完成后,使用“热点记录工具”将应用加载过程中的热点函数信息进行记录,生成热点文件,开发者使用压缩打包工具将源码、资源和热点文件一起打包进应用安装包,并发布到应用服务器,然后由应用服务器根据客户端请求下发。
步骤703、客户端对应用安装包进行解压,得到应用源代码以及热点文件。
步骤704、客户端在应用安装过程中,基于热点文件中所记录的热点函数信息,对应用源代码中对应的目标代码段提前进行编译。
具体的,客户端在安装的过程中,如果发现应用安装包中有热点文件,则启动“热点编译器”对热点文件中列出的热点函数进行预编译到字节码。
步骤705、客户端控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。
具体的,客户端的脚本引擎启动执行应用源代码时,如果执行的某个函数有对应的字节码就跳过“解析-编译”的流程而直接运行所提前编译的字节码。
应当理解的是,本实施例中各步骤的序号的大小并不意味着步骤执行顺序的先后,各步骤的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成唯一限定。
本申请实施例公开了一种应用加载方法,在开发者开发应用完成后,使用热点记录工具将应用加载过程中特定阶段的热点函数信息进行记录,生成热点文件,然后将应用源代码和热点文件一同打包并发布至应用服务器,并由应用服务器根据客户端请求下发应用安装包;当客户端在安装应用的过程中,如果检测到应用安装包中有热点文件,则启动热点编译器根据文件中记录的热点函数信息对应用源代码中相应代码段进行预编译,得到字节码,从而脚本引擎在应用加载过程中可跳过特定代码段的“解析-编译”流程而直接执行相应字节码。一方面,预编译时仅对部分应用源代码进行预编译,可有效降低对存储资源的占用;另一方面,脚本引擎在应用加载过程中可跳过特定代码段的“解析-编译”流程而直接执行相应字节码,可有效提高应用加载速度。
图8为本申请第四实施例提供的一种应用加载装置。该应用加载装置可用于实现前述实施例中的应用加载方法。如图8所示,该应用加载装置主要包括:
请求模块801,用于在接收到应用加载指令时,向应用服务器请求应用安装包;
获取模块802,用于基于应用安装包获取应用源代码以及预编译字节码;其中,预编译字节码为对应于应用源代码中目标代码段的字节码;
控制模块803,用于控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。
在本实施例的一些实施方式中,请求模块801具体用于:向应用服务器请求包括应用源代码以及预编译字节码的应用安装包。相对应的,获取模块802具体用于:从应用安装包中提取应用源代码以及预编译字节码。
进一步地,在本实施例的一些实施方式中,请求模块801在执行向应用服务器请求包括应用源代码以及预编译字节码的应用安装包时,具体用于:获取当前所使用的网络连接类型;在网络连接类型为无线热点连接时,向应用服务器请求包括应用源代码以及预编译字节码的应用安装包。
在本实施例的另一些实施方式中,请求模块801具体用于:向应用服务器请求包括应用源代码的应用安装包。相对应的,获取模块802具体用于:从应用安装包中提取应用源代码;在接收到应用安装指示时,对应用源代码中目标代码段进行编译,得到预编译字节码。
进一步地,在本实施例的一些实施方式中,请求模块801在执行向应用服务器请求包括应用源代码的应用安装包时,具体用于:获取当前所使用的网络连接类型;在网络连接类型为运营商网络连接时,向应用服务器请求包括应用源代码的应用安装包。
进一步地,在本实施例的一些实施方式中,获取模块802在对应用源代码中目标代码段进行编译执行时,具体用于:获取应用安装包中所携带的热点文件,其中,热点文件包括启动热点文件和运行热点文件中任意一种;基于热点文件中所记录的热点函数信息,对应用源代码中对应的目标代码段进行编译。
在本实施例的一些实施方式中,控制模块803还用于:在直接运行对应的预编译字节码之后,根据预编译字节码的运行结果评估预编译字节码的有效性;在预编译字节码失效时,控制脚本引擎运行目标代码段。
应当说明的是,第一、二、三实施例中的应用加载方法均可基于本实施例提供的应用加载装置实现,所属领域的普通技术人员可以清楚的了解到,为描述的方便和简洁,本实施例中所描述的应用加载装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
根据本实施例所提供的应用加载装置,在接收到应用加载指令时,向应用服务器请求应用安装包;基于应用安装包获取应用源代码以及应用源代码中目标代码段的预编译字节码;控制脚本引擎在执行至应用源代码的目标代码段时,直接运行对应的预编译字节码。通过本申请方案的实施,在脚本引擎执行应用源代码之前,提前进行代码编译,从而脚本引擎在应用加载过程中可跳过特定代码段的“解析-编译”流程而直接执行相应字节码,有效节省了应用加载过程中的系统资源消耗,并提高了应用加载速度。
请参阅图9,图9为本申请第五实施例提供的一种电子装置。该电子装置可用于实现前述实施例中的应用加载方法。如图9所示,该电子装置主要包括:
存储器901、处理器902、总线903及存储在存储器901上并可在处理器902上运行的计算机程序,存储器901和处理器902通过总线903连接。处理器902执行该计算机程序时,实现前述实施例中的应用加载方法。其中,处理器的数量可以是一个或多个。
存储器901可以是高速随机存取记忆体(RAM,Random Access Memory)存储器,也可为非不稳定的存储器(non-volatile memory),例如磁盘存储器。存储器901用于存储可执行程序代码,处理器902与存储器901耦合。
进一步的,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的电子装置中,该计算机可读存储介质可以是前述图9所示实施例中的存储器。
该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述实施例中的应用加载方法。进一步的,该计算机可存储介质还可以是U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的可读存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上为对本申请所提供的应用加载方法、装置及计算机可读存储介质的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种应用加载方法,其特征在于,包括:
在接收到应用加载指令时,向应用服务器请求应用安装包;
基于所述应用安装包获取应用源代码以及预编译字节码;其中,所述预编译字节码为对应于所述应用源代码中目标代码段的字节码;
控制脚本引擎在执行至所述应用源代码的所述目标代码段时,直接运行对应的所述预编译字节码。
2.根据权利要求1所述的应用加载方法,其特征在于,所述应用安装包包括:所述应用源代码以及所述预编译字节码。
3.根据权利要求2所述的应用加载方法,其特征在于,所述向应用服务器请求应用安装包包括:
获取当前所使用的网络连接类型;
在所述网络连接类型为无线热点连接时,向应用服务器请求包括所述应用源代码以及所述预编译字节码的应用安装包。
4.根据权利要求1所述的应用加载方法,其特征在于,所述应用安装包包括:应用源代码;
所述基于所述应用安装包获取应用源代码以及预编译字节码包括:
从所述应用安装包中提取所述应用源代码;
在接收到应用安装指示时,对所述应用源代码中所述目标代码段进行编译,得到所述预编译字节码。
5.根据权利要求4所述的应用加载方法,其特征在于,所述向应用服务器请求应用安装包包括:
获取当前所使用的网络连接类型;
在所述网络连接类型为运营商网络连接时,向应用服务器请求包括所述应用源代码的应用安装包。
6.根据权利要求1所述的应用加载方法,其特征在于,所述预编译字节码为:基于热点文件中所记录的热点函数信息,对所述应用源代码中目标代码段进行编译得到的字节码;其中,所述热点文件包括启动热点文件和运行热点文件中任意一种。
7.根据权利要求1至6中任意一项所述的应用加载方法,其特征在于,所述直接运行对应的所述预编译字节码之后,还包括:
根据所述预编译字节码的运行结果评估所述预编译字节码的有效性;
在所述预编译字节码失效时,控制所述脚本引擎运行所述目标代码段。
8.一种应用加载装置,其特征在于,包括:
请求模块,用于在接收到应用加载指令时,向应用服务器请求应用安装包;
获取模块,用于基于所述应用安装包获取应用源代码以及预编译字节码;其中,所述预编译字节码为对应于所述应用源代码中目标代码段的字节码;
控制模块,用于控制脚本引擎在执行至所述应用源代码的所述目标代码段时,直接运行对应的所述预编译字节码。
9.一种电子装置,其特征在于,包括:存储器、处理器及总线;
所述总线用于实现所述存储器、处理器之间的连接通信;
所述处理器用于执行存储在所述存储器上的计算机程序;
所述处理器执行所述计算机程序时,实现权利要求1至7中任意一项所述方法中的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现权利要求1至7中的任意一项所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011082992.9A CN112148386A (zh) | 2020-10-12 | 2020-10-12 | 一种应用加载方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011082992.9A CN112148386A (zh) | 2020-10-12 | 2020-10-12 | 一种应用加载方法、装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112148386A true CN112148386A (zh) | 2020-12-29 |
Family
ID=73951383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011082992.9A Withdrawn CN112148386A (zh) | 2020-10-12 | 2020-10-12 | 一种应用加载方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112148386A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113031965A (zh) * | 2021-04-23 | 2021-06-25 | 上海数禾信息科技有限公司 | 应用程序业务工程编译方法、装置、设备和存储介质 |
CN113656720A (zh) * | 2021-08-25 | 2021-11-16 | 北京达佳互联信息技术有限公司 | 页面展示方法、装置、电子设备及存储介质 |
CN115080151A (zh) * | 2022-07-22 | 2022-09-20 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103177199A (zh) * | 2011-12-22 | 2013-06-26 | 盛乐信息技术(上海)有限公司 | 网页应用代码保护方法及系统和执行的提速方法及系统 |
CN106775893A (zh) * | 2016-12-30 | 2017-05-31 | 北京小米移动软件有限公司 | 对程序预编译的方法及装置 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN109445807A (zh) * | 2017-08-28 | 2019-03-08 | 腾讯科技(深圳)有限公司 | 实现应用程序更新的方法、装置和计算机可读存储介质 |
CN109960507A (zh) * | 2017-12-14 | 2019-07-02 | 广东欧珀移动通信有限公司 | 编译优化方法、装置、存储介质、智能终端及服务器 |
CN111176717A (zh) * | 2019-12-20 | 2020-05-19 | 广州华多网络科技有限公司 | 生成安装包的方法、装置及电子设备 |
-
2020
- 2020-10-12 CN CN202011082992.9A patent/CN112148386A/zh not_active Withdrawn
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103177199A (zh) * | 2011-12-22 | 2013-06-26 | 盛乐信息技术(上海)有限公司 | 网页应用代码保护方法及系统和执行的提速方法及系统 |
CN106775893A (zh) * | 2016-12-30 | 2017-05-31 | 北京小米移动软件有限公司 | 对程序预编译的方法及装置 |
CN109445807A (zh) * | 2017-08-28 | 2019-03-08 | 腾讯科技(深圳)有限公司 | 实现应用程序更新的方法、装置和计算机可读存储介质 |
CN109960507A (zh) * | 2017-12-14 | 2019-07-02 | 广东欧珀移动通信有限公司 | 编译优化方法、装置、存储介质、智能终端及服务器 |
CN109101237A (zh) * | 2018-08-01 | 2018-12-28 | 北京顶象技术有限公司 | 代码的加密编译方法及装置 |
CN111176717A (zh) * | 2019-12-20 | 2020-05-19 | 广州华多网络科技有限公司 | 生成安装包的方法、装置及电子设备 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113031965A (zh) * | 2021-04-23 | 2021-06-25 | 上海数禾信息科技有限公司 | 应用程序业务工程编译方法、装置、设备和存储介质 |
CN113656720A (zh) * | 2021-08-25 | 2021-11-16 | 北京达佳互联信息技术有限公司 | 页面展示方法、装置、电子设备及存储介质 |
CN113656720B (zh) * | 2021-08-25 | 2024-04-16 | 北京达佳互联信息技术有限公司 | 页面展示方法、装置、电子设备及存储介质 |
CN115080151A (zh) * | 2022-07-22 | 2022-09-20 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112148386A (zh) | 一种应用加载方法、装置及计算机可读存储介质 | |
US8898662B2 (en) | Method and device for generating software installation packet | |
CN107967139B (zh) | 游戏的热更新方法及装置 | |
CN111078318B (zh) | 配置文件的处理方法、装置、系统及存储介质 | |
US11416271B2 (en) | Combining ahead-of-time compilation and just-in-time compilation to improve application deployment | |
WO2015021860A1 (en) | Method and apparatus for loading rendering engine | |
US20110145803A1 (en) | Extension mechanism | |
US10380329B2 (en) | Method and apparatus for preventing application from being deciphered | |
CN104156243A (zh) | 一种应用分发和快速加载运行的系统及方法 | |
CN112631622A (zh) | 应用安装方法、装置、服务器及计算机可读介质 | |
WO2010075099A2 (en) | Converting javascript into a device-independent representation | |
EP3270320A1 (en) | Method and device for creating virtual machine | |
US20160378452A1 (en) | Policy-Based Compression of Machine Code Generated by a Virtual Machine | |
CN111443939A (zh) | 一种软件开发工具包的配置方法、装置和存储介质 | |
CN110442399B (zh) | 应用的React Native业务执行方法、装置、存储介质及终端设备 | |
CN111880802A (zh) | 一种编译方法、电子设备及计算机可读存储介质 | |
KR101116939B1 (ko) | 이동 단말기 및 상기 이동 단말기에서 웹 애플리케이션 실행 방법 | |
CN110362317B (zh) | 一种代码转换方法、装置和存储介质 | |
CN108415737B (zh) | 一种在虚拟机中加载插件的方法及电子终端 | |
CN107423093B (zh) | 控制方法及装置、计算机装置和计算机可读存储介质 | |
CN107179918B (zh) | 软件处理方法、装置及系统 | |
WO2022078057A1 (zh) | 应用包发布方法、应用方法、装置、介质、服务器及设备 | |
CN112035178A (zh) | 一种应用启动方法、装置和存储介质 | |
KR20130083764A (ko) | 웹 애플리케이션에 포함되는 자바스크립트를 aot 방식으로 컴파일하기 위한 방법, 단말 장치 및 컴퓨터 판독 가능한 기록 매체 | |
CN111338633A (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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20201229 |
|
WW01 | Invention patent application withdrawn after publication |