CN112612531A - 应用程序启动方法、装置、电子设备及存储介质 - Google Patents
应用程序启动方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112612531A CN112612531A CN201910887498.0A CN201910887498A CN112612531A CN 112612531 A CN112612531 A CN 112612531A CN 201910887498 A CN201910887498 A CN 201910887498A CN 112612531 A CN112612531 A CN 112612531A
- Authority
- CN
- China
- Prior art keywords
- package
- application
- service
- loading
- interface
- 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.)
- Pending
Links
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/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/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种应用程序启动方法、装置、电子设备及存储介质,获取终端设备上安装的应用的启动指令,根据启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,之后,根据加载的JS包在React Native环境中创建应用的界面视图。由于预先创建的Bridge实例是加载JS包的唯一接口,其所占的内存较少,能够提高应用的启动性能。另外,当加载的JS包中包括多个JS业务包,无需重复初始化Bridged实例,减小了启动应用耗时,提高应用的启动性能。进一步,由于所有的JS业务包共用一个JS核心包,JS核心包无需重复加载,缩小了JS包的体积,也缩短了加载JS包的耗时,提高应用的启动性能。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种应用程序启动方法、装置、电子设备及存储介质。
背景技术
React Native(RN)是一款开源的跨平台移动应用开发框架,React Native支持使用JavaScript(JS)语言开发出的支持IOS、安卓Android和Web平台的移动应用。使用ReactNative开发的移动应用(以下称为:React Native应用或者RN应用),不仅具有媲美原生应用的用户体验,而且能够实现多端代码复用,具有较高的开发效率。React Native应用中,所有的JS文件最终会被打包称为一个包文件,即JS Bundle(JS Bundle也可以称为JS包),并被加载,通过与应用平台之间的Bridge(Bridge也可以称为网桥或者其他名称)实现与原生框架的通信。
React Native应用首次启动时,需要加载整个JS Bundle,再执行渲染函数,渲染出首页面,在这个过程中,通常会展示白色背景,用户会感觉有一小段时间的白屏现象,影响用户体验。目前,针对这样的情况,React Native应用首次启动时会向用户展示一个正在加载的动画,并在整个JS Bundle加载完成,并且首页面渲染完成后,关闭该动画。随着应用复杂度的增加,JS Bundle体积不断增大,该动画时间会越来越长。
为了能够进一步提高React Native应用的启动性能,现有技术中,对ReactNative的组件架构进行优化,具体地,针对每一个页面设置一个对应的Bridge实例,并通过与该页面对应的Bridge实例加载该页面对应的JS Bundle。采用上述React Native的组件架构,React Native应用的启动性能较差。
发明内容
本发明提供一种应用程序启动方法、装置、电子设备及存储介质,以提高应用程序的启动性能。
第一方面,本发明提供一种应用程序启动方法,包括:
获取终端设备上安装的应用的启动指令;
根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,其中,所述Bridge实例为加载所述JS包的唯一接口,所述JS包包括JS核心包和至少一个JS业务包,所述JS包用于创建所述应用的界面视图;
根据所述JS包在React Native环境中创建所述应用的界面视图。
可选地,当所述JS包包括JS核心包和一个JS业务包时,所述JS包用于创建所述应用的首页界面视图;
当所述JS包包括JS核心包和多个JS业务包时,所述JS包用于创建所述应用的首页界面视图以及与所述首页界面视图相关联的其他界面视图。
可选地,所述根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作包括:
调用预先创建的Bridge实例,从本地资源或服务器加载所述JS核心包;
根据所述至少一个JS业务包分别对应的标识,从本地资源或服务器加载与所述标识对应的JS业务包。
可选地,所述方法还包括:在执行加载所述JS包的操作的过程中,并行执行渲染临时界面的操作;
相应地,所述根据所述JS包在React Native环境中创建所述应用的界面视图,包括:
在所述React Native环境中,根据所述JS包以及所述临时界面,获得所述应用的界面视图。
可循的,所述方法还包括:
获取针对所述应用的业务访问请求;
根据所述业务访问请求,确定本地资源中是否缓存所述业务访问请求对应的JS业务包;
若本地资源中缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从本地资源中获取所述业务访问请求对应的JS业务包;
若本地资源中未缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从服务器中获取所述业务访问请求对应的JS业务包。
可选地,所述方法还包括:根据所述业务访问请求对应的JS业务包,在所述ReactNative环境中创建所述业务访问请求对应的界面视图。
可选地,若本地资源中未缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从服务器中获取所述业务访问请求对应的JS业务包之后,还包括:
将所述业务访问请求对应的JS业务包缓存至本地。
可选地,所述获取终端设备上安装的应用的启动指令之前,还包括:
初始化React Native环境,并在初始化完成后的React Native环境中,创建Bridge实例预加载框架JS模块文件;
或者,在所述应用上一次启动后,缓存Bridge实例。
第二方面,本发明提供一种应用程序启动装置,包括:
获取模块,用于获取终端设备上安装的应用的启动指令;
加载模块,用于根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,其中,所述Bridge实例为加载所述JS包的唯一接口,所述JS包包括JS核心包和至少一个JS业务包,所述JS包用于创建所述应用的界面视图;
视图界面创建模块,用于根据所述JS包在React Native环境中创建所述应用的界面视图。
第三方面,本发明还提供一种电子设备,包括:存储器、处理器以及计算机程序指令;
所述存储器存储所述计算机程序指令;
所述处理器执行所述计算机程序指令,以执行第一方面所述的方法。
第四方面,本发明还提供一种可读存储介质,包括:程序;
所述程序在被处理器执行时,以执行第一方面所述的方法。
第五方面,本发明还提供一种程序产品,所述程序产品包括计算机程序,所述计算机程序存储在可读存储介质中,所述应用程序启动装置的至少一个处理器可以从所述可读存储介质中读取所述计算机程序,所述至少一个处理器执行所述计算机程序使得所述应用程序启动装置执行如第一方面任一项所述的应用程序启动方法。
本发明提供一种应用程序启动方法、装置、电子设备及存储介质,获取终端设备上安装的应用的启动指令,根据启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,进一步,根据加载的JS包在React Native环境中创建应用的界面视图。由于预先创建的Bridge实例是加载所述JS包的唯一接口,其所占的内存较少,能够提高应用的启动性能。另外,当加载的JS包中包括多个JS业务包,无需重复执行初始化Bridged实例,减小了启动应用耗时,提高应用的启动性能。进一步,由于所有的JS业务包共用一个JS核心包,JS核心包无需重复加载,不仅减小了JS包的体积,也缩短了加载JS包的耗时,提高应用的启动性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中React Native应用启动过程示意图;
图2为现有技术中的React Native的组件架构示意图;
图3为本发明提供的React Native的组件架构示意图;
图4为本发明提供的应用程序启动方法实施例一的流程示意图;
图5为本发明提供的应用程序启动方法实施例二的流程示意图;
图6为本发明提供的应用程序启动方法实施例三的流程示意图;
图7为本发明提供的应用程序启动装置实施例一的结构示意图;
图8为本发明提供的应用程序启动装置实施例二的结构示意图;
图9为本发明提供的应用程序启动装置实施例三的结构示意图;
图10为本发明提供的电子设备实施例一的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为现有技术中React Native应用启动过程示意图,参照图1所示,ReactNative应用在启动的过程中,包括以下过程:本机初始化、加载JS包、读取前、读取、JS渲染以及Native渲染,其中,各个步骤的执行顺序可如图1中所示的箭头所指方向。参照图1所示,加载JS包的耗时占用该应用程序启动时间的50%左右。随着应用不断的复杂化,启动时需要加载的JS包的体积不断增大,相应地加载JS包的时间会随着JS包的体积的增大而增大。
传统的方式中,在加载JS包时,会向用户展示白屏或者一段动画,但是,随着JS包的体积的增大,白屏持续时长或者动画持续时长越来越长,用户体验也会变得更糟。
传统的方式中,还有一种方式是针对React Native的组件架构进行优化,来提高应用程序的启动性能。图2为现有技术中的React Native的组件架构示意图。图2所示的React Native的组件架构中包括多个视图控制器,每个视图控制器对应一个Bridge实例,通过该Bridge实例能够加载该页面对应的JS包。进一步地,每个页面对应的JS包中均包括JS核心包和JS业务包。在实际应用中,不同的视图控制器可通过与其对应的Bridge实例调用不同的业务,不同的视图控制器也可通过与其对应的Bridge实例调用同一个业务。例如:视图控制器1通过Bridge1调用业务1对应的JS包,视图控制器2也可通过Bridge2调用业务1对应的JS包,视图控制器3可通过Bridge3调用业务2对应的JS包。
采用图2所示的React Native的组件架构,存在以下问题:
1、上述架构中针对每个界面视图都创建一个Bridge实例。对于复杂的应用,存在多个界面视图,预先创建多个Bridge实例会占用较大的内存,影响应用性能。
2、针对复杂的应用,应用在启动时,可能存在多个界面视图,因此,需要加载多个界面视图分别对应的JS包。若加载多个JS包时,在加载过程中与多个JS包对应的多个Bridge实例都需要初始化,会耗费较长的时间,影响应用的启动性能。
3、每个JS包都包含一个JS核心包和一个JS业务包,若是加载多个JS包,会造成JS核心包的重复加载,不仅增加了单个JS包的体积,加载JS包耗时也较长,影响应用的启动性能。
基于现有技术中存在的上述问题,本发明提出一种React Native的组件架构,如图3所示的React Native的组件架构中包括多个视图控制器,所有的视图控制器对应唯一的Bridge实例,通过该唯一的Bridge实例加载JS包。对于JS包部分,将JS核心包与JS业务包进行了拆分,所有的JS业务包共用一个JS核心包。
在图3所示的React Native的组件架构的基础上,本发明还提供一种应用程序启动方法,以实现缩短应用的启动时长,提高应用的启动性能。
图4为本发明提供的应用程序启动方法实施例一的流程图。如图4所示,本实施例的方法包括:
S401、获取终端设备上安装的应用的启动指令。
具体地,上述启动指令可以通过以下方式实现:
一种可能的实现方式,用户通过触摸终端设备的触摸屏上显示的需要启动的应用对应的图标,从而生成应用的启动指令。另一种可能的实现方式,用户可通过向终端设备输入一段音频,例如“打开XX应用”,终端设备对采集到的该段音频进行语音识别,从而生成启动指令。再一种可能的实现方式中,用户还可以通过操作终端设备上的按键,选中需要启动的应用对应的图标,再通过按压“确认”按键,确定启动该图标对应的应用,从而生成启动指令。
当然,还可以通过其他方式获取终端设备上安装的应用的启动指令,例如:双击应用对应的图标、长按应用对应的图标等等,并不限于前述描述的几种,上述列举的几种可能的实现方式仅为示例性地,并不是对本步骤具体实现方式的限制。
S402、根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作。
具体地,JS包包括JS核心包和至少一个JS业务包,其中,JS核心包中包括:源代码、该应用的所有页面的路由配置信息、以及封装的具有通用性的工具函数等;JS业务包中包括该业务对应的所有页面的路由配置信息以及业务信息。
本步骤中调用的预先创建的Bridge实例从本地资源或服务器中加载JS包,预先创建的Bridge实例为加载JS包的唯一接口。示例性地,调用的预先创建的Bridge实例加载JS包,可通过以下方式实现:
一种可能的实现方式,终端设备从本地资源中加载JS包。具体地,终端设备调用预先创建的Bridge实例在本地资源中加载JS核心包,并根据至少一个JS业务包的标识从本地资源中加载所述至少一个JS业务包。
另一种可能的实现方式,终端设备从服务器中加载JS包。具体地,终端设备向服务器发送JS包获取请求,服务器接收到JS包获取请求后,将JS包发送给终端设备,终端设备接收JS包,并将JS包存储在本地资源中,之后,终端设备调用预先创建的Bridge实例从本地资源中加载JS包。
在本步骤中,若是本地资源中存储有JS包,则先从本地资源中加载JS包,若是本地资源中并未存储JS包,则从服务器中加载JS包。若是本地资源中存储有JS核心包,则从本地资源中加载JS核心包,若是本地资源中并未存储JS核心包,则从服务器中加载JS核心包;若是本地资源中存储有JS业务包,则从本地资源中加载JS业务包,若是本地资源中并未存储JS业务包,则从服务器中加载JS业务包。
另外,预先创建的Bridge实例可通过以下方式获取:
一种可能的实现方式,在获取终端设备上安装的应用的启动指令之前,初始化React Native环境,并在初始化完成后的React Native环境中创建Bridge实例。也就是说,
另一种可能的实现方式,在该应用上一次启动后,缓存Bridge实例,在该应用下一次启动时,调用缓存的Bridge实例加载JS包。
通过对Bridge实例进行预加载和缓存,能够提高二次加载速度,缩短应用的启动耗时,提高应用的启动性能。
S403、根据所述JS包在React Native环境中创建所述应用的界面视图。
具体地,当JS包包括JS核心包和一个JS业务包,则根据所述JS包在React Native环境中创建该应用的首页界面视图。
当JS包包括JS核心包和多个JS业务包,则根据所述JS包在React Native环境中创建该应用的首页界面视图以及与该首页界面视图相关联的其他界面视图。其中,与该首页界面视图相关联的其他界面视图包括通过首页界面视图能够跳转至的其他界面视图。
本实施例中,获取终端设备上安装的应用的启动指令,根据启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,进一步,根据加载的JS包在React Native环境中创建应用的界面视图。本实施例中,预先创建的Bridge实例是加载所述JS包的唯一接口,其所占的内存较少,能够提高应用的启动性能。另外,当加载的JS包中包括多个JS业务包,无需重复执行初始化Bridged实例,减小了启动应用耗时,提高应用的启动性能。进一步,由于所有的JS业务包共用一个JS核心包,JS核心包无需重复加载,不仅减小了JS包的体积,也缩短了加载JS包的耗时,提高应用的启动性能。
图5为本发明提供的应用程序启动方法实施例二的流程。如图5所示,本实施例的方法包括:
S501、获取终端设备上安装的应用的启动指令。
本实施例中步骤S501与图4所示实施例中步骤S401类似,可参照图4所示实施例中的详细描述,此处不再赘述。
S502、根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作。
S503、在执行加载所述JS包的操作的过程中,并行执行渲染临时界面的操作。
具体地,终端设备从服务器加载JS包时,终端设备向服务器发送JS包获取请求,服务器接收到JS包获取请求后,将JS包发送给终端设备,终端设备接收JS包,并将JS包存储在本地资源中,之后,终端设备调用预先创建的Bridge实例从本地资源中加载JS包。
示例性地,在执行加载所述JS包的操作的过程中,并行执行渲染临时界面的操作,可通过以下方式实现:
在终端设备发送JS包获取请求之后,服务器未返回JS包的情况下,终端设备执行渲染临时界面的操作,其中,渲染临时界面的操作表示执行渲染函数,以获得初始界面视图,该初始界面视图中包括首页界面视图中相关图标以及首页界面视图布局图像。
S504、在React Native环境中,根据所述JS包以及所述临时界面,获得所述应用的界面视图。
本实施例中步骤S504与图4所示实施例中步骤S403类似,可参照图4所示实施例中的详细描述,此处不再赘述。
本实施例中,终端设备从网络侧获取JS包的过程中,并行执行渲染临时界面的操作,能够提高终端设备的资源利用率,且能够提高首页界面视渲染速度,有效提高应用的启动性能。
图6为本发明提供的应用程序启动方法实施例三的流程示意图。本实施例的方法可以在图3所示实施例的步骤S303之后执行,也可以在图5所示实施例的步骤S504之后执行。
如图6所示,本实施例的方法包括:
S601、获取针对所述应用的业务访问请求。
S602、根据所述业务访问请求,确定本地资源中是否缓存所述业务访问请求对应的JS业务包。
若本地资源中缓存有所述业务请求对应的JS业务包,则执行步骤S603;若本地资源中未缓存有所述业务请求对应的JS业务包,则执行步骤S604。
S603、通过所述Bridge实例从本地资源中获取所述业务访问请求对应的JS业务包。
S604、通过所述Bridge实例从服务器中获取所述业务访问请求对应的JS业务包。
在实际应用中,若是该应用在上一次启动之后访问过该页面,则可能会缓存该页面对应的JS业务包,或者服务器将一些用户访问可能性较高的页面对应的JS业务包发送给终端设备,以使终端设备将用户访问可能性较高的页面对应的JS业务包缓存在本地资源中。
因此,若是本地资源中缓存该业务访问请求对应的JS业务包,那么,从本地资源中加载该业务访问请求对应的JS业务包;若是本地资源中并未缓存该业务访问请求对应的JS业务包,那么,需从服务器中获取该业务访问请求对应的JS业务包。
具体地,终端设备可以通过以下方式从服务器中获取该业务访问请求对应的JS业务包:终端设备向服务器发送JS业务包获取请求,服务器接收到JS业务包获取请求后,将JS业务包发送给终端设备,终端设备接收JS业务包,并将JS业务包存储在本地资源中,之后,终端设备调用预先创建的Bridge实例从本地资源中加载JS业务包。
S605、根据所述业务访问请求对应的JS业务包,在所述React Native环境中创建所述业务访问请求对应的界面视图。
本实施例中,由于应用在首次启动时,已加载了JS核心包,因此,在创建业务访问请求对应的界面视图时,仅需加载用于创建该业务访问请求对应的界面视图的JS业务包即可,无需重复加载JS核心包,缩小了JS包的体积,缩短了加载JS包的耗时,也缩短了视图界面跳转所需的时长。另外,本实施例中,由于应用在首次启动时,已经对预先创建的Bridge实例进行了初始化,因此,在调用预先创建的Bridge实例加载该业务访问请求对应的JS业务包,无需重复初始化Bridge实例,缩短了加载JS包的耗时,也缩短了界面视图跳转所需的时长。
在实际应用中,在对React Native应用进行扩展,可编译出兼容Web端的应用,但是由于一些用户持有的终端设备上浏览器版本较低,无法兼容React Native应用,因此,为了保证浏览器与React Native应用的兼容性,还可以在React Native应用中引入对应的Polyfill。
具体地,Polyfill.io会读取每个请求的User-Agent(UA)头,并生成适合于该浏览器的Polyfilll,基于当前应用所使用的特性,加载相应的Polyfill。
图7为本发明提供的应用程序启动装置实施例一的结构示意图。如图7所示,本实施例的装置70包括:获取模块71、加载模块72以及视图界面创建模块73。
其中,获取模块71,用于获取终端设备上安装的应用的启动指令。
加载模块72,用于根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,其中,所述Bridge实例为加载所述JS包的唯一接口,所述JS包包括JS核心包和至少一个JS业务包,所述JS包用于创建所述应用的界面视图。
具体地,当所述JS包包括JS核心包和一个JS业务包时,所述JS包用于创建所述应用的首页界面视图;当所述JS包包括JS核心包和多个JS业务包时,所述JS包用于创建所述应用的首页界面视图以及与所述首页界面视图相关联的其他界面视图。
视图界面创建模块73,用于根据所述JS包在React Native环境中创建所述应用的界面视图。
其中,视图界面创建模块73,具体用于:调用预先创建的Bridge实例,从本地资源或服务器加载所述JS核心包;根据所述至少一个JS业务包分别对应的标识,从本地资源或服务器加载与所述标识对应的JS业务包。
本实施例提供的装置,可以用于执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图8为本发明提供的应用程序启动装置实施例二的结构示意图。如图8所示,本实施例的装置80在图7所示实施例的基础上,还包括:渲染模块74。
其中,渲染模块74,用于在加载模块72执行加载JS包的操作的过程中,并行执行渲染临时界面的操作。
本实施例提供的装置,可以用于执行图5所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本发明提供的应用程序启动装置实施例三的结构示意图。如图9所示,本实施例的装置90,在图8所示实施例的基础上,还包括:缓存模块75。
在图9所示的实施例中,获取模块71,还用于获取针对所述应用的业务访问请求。
加载模块72,还用于根据所述业务访问请求,确定本地资源中是否缓存所述业务访问请求对应的JS业务包;若本地资源中缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从本地资源中获取所述业务访问请求对应的JS业务包;若本地资源中未缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从服务器中获取所述业务访问请求对应的JS业务包。
视图界面创建模块73,还用于根据所述业务访问请求对应的JS业务包,在所述React Native环境中创建所述业务访问请求对应的界面视图。
若本地资源中未缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从服务器中获取所述业务访问请求对应的JS业务包之后,缓存模块75,用于将所述业务访问请求对应的JS业务包缓存至本地。
可选地,在获取模块71获取终端设备上安装的应用的启动指令之前,缓存模块75还用于:初始化React Native环境,并在初始化完成后的React Native环境中,创建Bridge实例;或者,在所述应用上一次启动后,缓存Bridge实例。
本实施例提供的装置,可以用于执行图6所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图10为本发明提供的电子设备实施例一的结构示意图。如图10所示,本实施例的电子设备100包括:存储器101、处理器102以及计算机程序。
其中,计算机程序存储在存储器101中,并被配置为由处理器102执行以实现图4至图6任一实施例所示的应用程序启动方法。相关说明可以对应参见图4至图6的步骤所对应的相关描述和效果进行理解,此处不做过多赘述。
其中,本实施例中,存储器101和处理器102通过总线103连接。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行以实现本发明图4至图6任一实施例所示的应用程序启动方法。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
用于实施本发明的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
最后应说明的是:尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种应用程序启动方法,其特征在于,所述方法包括:
获取终端设备上安装的应用的启动指令;
根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,其中,所述Bridge实例为加载所述JS包的唯一接口,所述JS包包括JS核心包和至少一个JS业务包,所述JS包用于创建所述应用的界面视图;
根据所述JS包在React Native环境中创建所述应用的界面视图。
2.根据权利要求1所述的方法,其特征在于,当所述JS包包括JS核心包和一个JS业务包时,所述JS包用于创建所述应用的首页界面视图;
当所述JS包包括JS核心包和多个JS业务包时,所述JS包用于创建所述应用的首页界面视图以及与所述首页界面视图相关联的其他界面视图。
3.根据权利要求1所述的方法,其特征在于,所述根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作包括:
调用预先创建的Bridge实例,从本地资源或服务器加载所述JS核心包;
根据所述至少一个JS业务包分别对应的标识,从本地资源或服务器加载与所述标识对应的JS业务包。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在执行加载所述JS包的操作的过程中,并行执行渲染临时界面的操作;
相应地,所述根据所述JS包在React Native环境中创建所述应用的界面视图,包括:
在所述React Native环境中,根据所述JS包以及所述临时界面,获得所述应用的界面视图。
5.根据权利要求1至4任一项所述的方法,其特征在于,还包括:
获取针对所述应用的业务访问请求;
根据所述业务访问请求,确定本地资源中是否缓存所述业务访问请求对应的JS业务包;
若本地资源中缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从本地资源中获取所述业务访问请求对应的JS业务包;
若本地资源中未缓存所述业务访问请求对应的JS业务包,则通过所述Bridge实例从服务器中获取所述业务访问请求对应的JS业务包。
6.根据权利要求5所述的方法,其特征在于,还包括:
根据所述业务访问请求对应的JS业务包,在所述React Native环境中创建所述业务访问请求对应的界面视图。
7.根据权利要求1所述的方法,其特征在于,所述获取终端设备上安装的应用的启动指令之前,还包括:
初始化React Native环境,并在初始化完成后的React Native环境中,创建Bridge实例;
或者,在所述应用上一次启动后,缓存Bridge实例。
8.一种应用程序启动装置,其特征在于,包括:
获取模块,用于获取终端设备上安装的应用的启动指令;
加载模块,用于根据所述启动指令,调用预先创建的Bridge实例,执行加载JS包的操作,其中,所述Bridge实例为加载所述JS包的唯一接口,所述JS包包括JS核心包和至少一个JS业务包,所述JS包用于创建所述应用的界面视图;
视图界面创建模块,用于根据所述JS包在React Native环境中创建所述应用的界面视图。
9.一种电子设备,其特征在于,包括:存储器、处理器以及计算机程序指令;
所述存储器存储所述计算机程序指令;
所述处理器执行所述计算机程序指令,以执行权利要求1至7任一项所述的方法。
10.一种可读存储介质,其特征在于,包括:程序;
所述程序在被处理器执行时,以执行权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910887498.0A CN112612531A (zh) | 2019-09-19 | 2019-09-19 | 应用程序启动方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910887498.0A CN112612531A (zh) | 2019-09-19 | 2019-09-19 | 应用程序启动方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112612531A true CN112612531A (zh) | 2021-04-06 |
Family
ID=75224224
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910887498.0A Pending CN112612531A (zh) | 2019-09-19 | 2019-09-19 | 应用程序启动方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612531A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113467854A (zh) * | 2021-06-01 | 2021-10-01 | 北京达佳互联信息技术有限公司 | 应用程序启动方法、装置、电子设备及存储介质 |
-
2019
- 2019-09-19 CN CN201910887498.0A patent/CN112612531A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113467854A (zh) * | 2021-06-01 | 2021-10-01 | 北京达佳互联信息技术有限公司 | 应用程序启动方法、装置、电子设备及存储介质 |
CN113467854B (zh) * | 2021-06-01 | 2023-10-24 | 北京达佳互联信息技术有限公司 | 应用程序启动方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868785B2 (en) | Application program page processing method and device | |
CN112861057B (zh) | 基于小程序的页面渲染方法、装置、设备及存储介质 | |
CN108111555B (zh) | 用于控制安装包下载过程的方法及*** | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
WO2016177341A1 (zh) | 接口调用方法、装置及终端 | |
US20140208326A1 (en) | File presenting method and apparatus for a smart terminal | |
CN111338623B (zh) | 一种开发用户界面的方法、装置、介质和电子设备 | |
CN107450928B (zh) | 一种基于缓存技术的混合开发方法 | |
CN110895471A (zh) | 安装包生成方法、装置、介质及电子设备 | |
CN103443763A (zh) | 包含对重写虚拟函数的调用的支持的isa桥接 | |
CN107479868B (zh) | 一种界面加载方法、装置及设备 | |
CN111722885A (zh) | 程序运行方法、装置以及电子设备 | |
CN113761412A (zh) | 应用页面的显示方法、装置、电子设备、介质及应用*** | |
CN113050940A (zh) | 小程序的预览方法、相关装置及计算机程序产品 | |
CN112612531A (zh) | 应用程序启动方法、装置、电子设备及存储介质 | |
CN112491940B (zh) | 代理服务器的请求转发方法及装置、存储介质及电子设备 | |
CN109597952B (zh) | 网页信息处理方法、***、电子设备和存储介质 | |
CN109408057B (zh) | 自动生成代码的方法、装置、介质和计算设备 | |
CN108021459B (zh) | 跨进程发送打点日志的方法及装置 | |
CN114610446B (zh) | 一种自动注入探针的方法、装置及*** | |
CN111338928A (zh) | 基于chrome浏览器测试的方法及装置 | |
CN110825370A (zh) | 移动端应用开发方法、装置及*** | |
CN113791777B (zh) | 图片显示方法及装置、计算机可读存储介质及电子设备 | |
CN114064176A (zh) | 一种视图交互方法、装置、电子设备及计算机可读介质 | |
CN109840156B (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 |