CN115576623A - 一种应用程序启动方法及装置 - Google Patents
一种应用程序启动方法及装置 Download PDFInfo
- Publication number
- CN115576623A CN115576623A CN202211127315.3A CN202211127315A CN115576623A CN 115576623 A CN115576623 A CN 115576623A CN 202211127315 A CN202211127315 A CN 202211127315A CN 115576623 A CN115576623 A CN 115576623A
- Authority
- CN
- China
- Prior art keywords
- vdom
- page
- application
- application program
- file
- 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
- 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
一种应用程序启动方法及装置。该方法应用于终端,包括:基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一VDOM文件,并从服务器获取所述第一应用程序的数据,所述第一VDOM文件用于描述所述第一应用程序的首页面的页面结构;根据所述第一VDOM文件对应的第一VDOM生成第一页面;根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面;显示所述第一应用程序的首页面。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种应用程序启动方法及装置。
背景技术
快应用是一种新的应用形态,快应用有免安装和即点即用的特点,用户在使用快应用时,从服务器下载应用程序并直接运行。
快应用框架与终端操作系统深度集成,可以在操作系统层面形成用户需求与应用服务的无缝连接,一些只能在原生应用中使用的功能,在快应用中可以很方便地实现,可以为用户提供原生应用的使用体验。相较于原生应用,快应用无需担心分发留存等问题,资源消耗也比较少。
一些快应用程序体量较大、运行逻辑复杂,这会导致从用户点击以请求打开快应用,到快应用的首页面被呈现,该过程的时延达到2秒甚至更长时间,影响快应用的用户体验。因此,如何降低快应用启动时延,加速快应用页面的呈现,是目前需要解决的技术问题。
发明内容
本申请实施例提供一种应用程序启动方法及装置,用以减少应用程序启动时延。
第一方面,提供一种应用程序启动方法,应用于终端,所述方法包括:终端基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一虚拟文档对象模型(VDOM)文件,并从服务器获取所述第一应用程序的数据,所述第一VDOM文件用于描述所述第一应用程序的首页面的页面结构;该终端根据所述第一VDOM文件对应的第一VDOM生成第一页面;该终端根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面,并显示所述第一应用程序的首页面。
由于VDOM可以看作是一个使用JS模拟了DOM结构的树形结构,这个树结构包含整个DOM结构的信息,因此“所述第一VDOM用于描述第一应用程序的首页面的页面结构”,也可以理解为:第一VDOM用于描述第一应用程序的首页面的DOM结构。
可选的,第一VDOM文件描述的树形结构与第一应用程序的真实首页面对应的VDOM的树形结构相同。示例性的,第一VDOM文件描述的页面结构与真实首页面的结构在以下一个或多个方面相同:元素类型、布局、属性等。
上述实现方式中,由于终端基带第一应用程序时,在根据第一VDOM文件生成第一页面的同时,从服务器获取所述第一应用程序的数据,在获取到第一应用程序的数据后,根据获取到的第一应用程序的数据更新第一页面中的页面元素,得到第一应用程序的首页面,相比于在获取到第一应用程序的数据后,根据该数据生成VDOM,并根据该VDOM生成应用程序的首页面相比,可以减少应用程序的启动时延,进而提高用户感受。
在一种可能的实现方式中,所述第一VDOM文件包含在所述第一应用程序的(可运行应用程序包)RPK中;所述获取所述第一应用程序的首页面对应的第一VDOM文件,包括:从所述第一应用程序的RPK中获取所述第一VDOM文件。
上述实现方式中,通过在第一应用程序的RPK中设置第一VDOM文件,可以使得在启动第一应用程序时,从该应用程序的RPK中获取第一VDOM文件,从而可以尽快基于第一VDOM文件进行页面绘制和渲染。
在一种可能的实现方式中,所述第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件包含在所述基础包中;所述获取所述第一应用程序的首页面对应的第一VDOM文件之前,所述方法还包括:从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包被优先下载。
上述实现方式中,第一VDOM文件包含在第一应用程序的RPK中的基础包中,由于该基础包可以优先被下载,因此可以使得终端尽快获得第一VDOM文件,从而尽快基于第一VDOM文件进行页面绘制和渲染。
在一种可能的实现方式中,所述第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件独立于所述基础包;所述获取所述第一应用程序的首页面对应的第一VDOM文件之前,所述方法还包括:从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包和所述第一VDOM文件被优先下载。
上述实现方式中,第一VDOM文件被优先下载,因此可以使得终端尽快获得第一VDOM文件,从而尽快基于第一VDOM文件进行页面绘制和渲染。
在一种可能的实现方式中,所述方法还包括:根据所述第一应用程序的首页面对应的VDOM,更新所述第一VDOM文件,更新后的第一VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
上述实现方式中,由于根据第一应用程序的首页面对应的VDOM更新第一VDOM文件,因此可以使得第一VDOM文件描述的页面结构和内容与本次启动第一应用程序时显示的首页面相同,这样当下一次启动第一应用程序时,根据更新后的第一VDOM文件生成的第一页面与真实的首页面更接近,从而可以减少更新第一页面的操作或降低更新第一页面操作的时延,进而可以进一步降低第一应用程序的启动时延。
在一种可能的实现方式中,所述第一VDOM文件为所述终端存储的所述第一应用程序的历史首页面对应的VDOM文件。
在一种可能的实现方式中,所述得到所述第一应用程序的首页面之后,所述方法还包括:根据所述第一应用程序的首页面对应的VDOM生成VDOM文件,存储生成的VDOM文件,所述生成的VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
在一种可能的实现方式中,所述根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面,包括:根据获取到的所述第一应用程序的数据,生成第二VDOM;将所述第一VDOM与所述第二VDOM进行比较,得到所述第一VDOM和所述第二VDOM之间的差异;根据所述第一VDOM和所述第二VDOM之间的差异,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面。
上述实现方式中,由于第一VDOM与第二VDOM描述的页面结构相同或相似,将第一VDOM和第二VDOM进行比较的操作的时延较低,并且根据第一VDOM和第二VDOM之间的差异更新第一页面中的页面元素的操作的时延也较低,因而可以减少第一应用程序的启动时延。
在一种可能的实现方式中,所述根据所述第一VDOM和所述第二VDOM之间的差异,更新所述第一页面中的页面元素,包括:根据所述第一VDOM和所述第二VDOM之间的差异,生成第一页面更新指令,所述第一页面更新指令用于更新所述第一页面中的第一页面元素;根据所述第一页面更新指令更新所述第一页面中的第一页面元素。
在一种可能的实现方式中,所述第一页面更新指令,包括以下至少一项:增加页面元素的更新指令,删除页面元素的更新指令,修改页面元素的更新指令。
在一种可能的实现方式中,所述基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一VDOM文件,并从服务器获取所述第一应用程序的数据,包括:应用程序引擎的主进程或第一线程,启动第二线程;所述主进程或第一线程获取所述第一应用程序的首页面对应的第一VDOM文件,并根据所述第一VDOM文件对应的第一VDOM生成第一页面;所述第二线程从服务器获取所述第一应用程序的数据。其中,所述主进程与所述第二线程并行执行,或者所述第一线程与所述第二线程并行执行。通过并行执行,可以降低第一应用程序的启动时延。
在一种可能的实现方式中,所述第一应用程序为快应用。
第二方面,提供一种终端,包括:处理单元,用于基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一VDOM文件,并从服务器获取所述第一应用程序的数据,所述第一VDOM文件用于描述所述第一应用程序的首页面的页面结构;根据所述第一VDOM文件对应的第一VDOM生成第一页面;根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面;显示单元,用于显示所述第一应用程序的首页面。
可选的,所述处理单元可以是该终端中的应用程序引擎,比如可以是快应用引擎。
在一种可能的实现方式中,所述第一VDOM文件包含在所述第一应用程序的可运行应用程序包RPK中;所述处理单元具体用于:从所述第一应用程序的RPK中获取所述第一VDOM文件。
可选的,所述第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件包含在所述基础包中;所述处理单元还用于:在获取所述第一应用程序的首页面对应的第一VDOM文件之前,从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包被优先下载。
可选的,所述第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件独立于所述基础包;所述处理单元还用于:在获取所述第一应用程序的首页面对应的第一VDOM文件之前,从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包和所述第一VDOM文件被优先下载。
可选的,所述处理单元还用于:根据所述第一应用程序的首页面对应的VDOM,更新所述第一VDOM文件,更新后的第一VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
在一种可能的实现方式中,所述第一VDOM文件为所述终端存储的所述第一应用程序的历史首页面对应的VDOM文件。
可选的,所述处理单元还用于:得到所述第一应用程序的首页面之后,根据所述第一应用程序的首页面对应的VDOM生成VDOM文件,存储生成的VDOM文件,所述生成的VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
在一种可能的实现方式中,所述处理单元具体用于:根据获取到的所述第一应用程序的数据,生成第二VDOM;将所述第一VDOM与所述第二VDOM进行比较,得到所述第一VDOM和所述第二VDOM之间的差异;根据所述第一VDOM和所述第二VDOM之间的差异,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面。
可选的,所述处理单元具体用于:根据所述第一VDOM和所述第二VDOM之间的差异,生成第一页面更新指令,所述第一页面更新指令用于更新所述第一页面中的第一页面元素;根据所述第一页面更新指令更新所述第一页面中的第一页面元素。
可选的,所述第一页面更新指令,包括以下至少一项:增加页面元素的更新指令,删除页面元素的更新指令,修改页面元素的更新指令。
在一种可能的实现方式中,所述处理单元为应用程序引擎,所述应用程序引擎具体用于:应用程序引擎的主进程或第一线程,启动第二线程;所述主进程或第一线程获取所述第一应用程序的首页面对应的第一VDOM文件,并根据所述第一VDOM文件对应的第一VDOM生成第一页面;所述第二线程从服务器获取所述第一应用程序的数据;其中,所述主进程与所述第二线程并行执行,或者所述第一线程与所述第二线程并行执行。
在一种可能的实现方式中,所述第一应用程序为快应用。
第三方面,提供一种终端,包括:一个或多个处理器;所述一个或多个存储器存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行上述第一方面中任一项所述的方法。
第四方面,提供一种计算机可读存储介质,包括计算机程序,当所述计算机程序在终端上运行时,使得所述终端执行上述第一方面中任一项所述的方法。
第五方面,提供一种计算机程序产品,当其在终端上运行时,使得所述终端执行上述第一方面中任一项所述的方法。
第六方面,提供一种芯片系统,包括:存储器,用于存储计算机程序;处理器;当处理器从存储器中调用并运行计算机程序后,使得安装有该芯片系统的终端执行第一方面中任一项所述的方法。
以上第二方面至第六方面的有益效果请参见第一方面的有益效果,不重复赘述。
附图说明
图1为本申请实施例中的一种快应用的使用场景的示意图;
图2为本申请实施例提供的一种系统架构示意图;
图3为本申请实施例提供的一种终端的硬件结构示意图;
图4为本申请实施例提供的一种应用程序启动流程示意图;
图5为本申请实施例提供的应用程序启动流程示意图;
图6为本申请实施例中的一种根据第一VDOM生成第一页面的流程示意图;
图7为本申请实施例中根据第一应用程序的数据更新第一页面中的页面元素的流程示意图;
图8为本申请实施例中的一种启动应用程序的处理时序示意图;
图9为本申请实施例中启动应用程序的各个阶段的耗时情况示意图;
图10为本申请实施例提供的一种应用程序启动流程的示意图;
图11为本申请实施例提供的另一种应用程序启动流程的示意图;
图12为本申请实施例提供的终端的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括例如“一个或多个”这种表达形式,除非其上下文中明确地有相反指示。还应当理解,在本申请实施例中,“一个或多个”是指一个、两个或两个以上;“和/或”,描述关联对象的关联关系,表示可以存在三种关系;例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
本申请实施例涉及的多个,是指大于或等于两个。需要说明的是,在本申请实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)快应用
快应用是一种新型应用生态,快应用无需下载安装,即点即用,可以使用户享受原生应用的性能体验。
快应用框架深度集成到终端操作系统中,可以获取到系统级的权限,可以调起诸如地图定位、语音视频、摄像头、蓝牙等设备本地或云空间的多种工作能力,在应用能力范围上堪比原生应用程序,同时兼具H5技术的灵活性。其中,H5技术涵盖了第五代超文本标记语言(HTML5,其中,HTML为hyperText mark-up language的英文简称,即超文本标记语言)、第三代层叠样式表(CSS3,其中,CSS是cascading style sheets的英文简称,即层叠样式表)、JavaScript(简称JS,是一种具有函数优先的轻量级、解释型或即时编译型的编程语言)等一系列前端技术,融合编程、视频处理、音频处理、图片处理、动画制作等多项技术,可以应用于移动端的页面展示。
快应用建立一种新的语言开发规范,同时提供一系列的开发套件辅助支持。简单来说,开发者可以利用前端知识与技能以及快应用的集成开发环境(integrateddevelopment environment,IDE)进行快应用的开发。IDE是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具,是集成有代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套件。
快应用无需安装,用户需要使用快应用时,可以通过触发快应用的入口开启快应用。当快应用的入口被触发后,终端从网络侧下载该快应用的可运行应用程序包(runableapplication package,RPK)并运行该RPK。快应用的RPK中可以包括一些公共资源信息(比如快应用服务器地址等),通过运行该RPK,终端可以从网络侧(快应用服务器)获取快应用的数据。该数据可以包括HTML5语言、ES6标准的JS脚本、CSS3样式等,终端可以根据获取到的JS脚本代码调用操作系统应用程序框架层提供的应用程序组件进行页面渲染,并显示渲染得到的页面,使得用户可以基于该页面进行操作,与网络侧交互,从而使用该快应用提供的服务。
可以采用多种方式开启快应用,比如通过“应用商店”中的“快应用中心”中提供的快应用入口,或者通过负一屏中的搜索框搜索快应用后点击搜索到的快应用入口,还可以直接点击桌面(launch界面)中的快应用图标。图1示出了一种开启快应用的方式,手机桌面(launch界面)上有“购物”快应用的图标10,点击该图标10即可开启该快应用,显示该快应用的首页面20。该快应用的图标是在之前使用该快应用时在桌面上创建的。
快应用也可能被称为轻应用、微应用、即时应用、免安装应用、流程序、小程序、light App、Quik App等,对于具有上述特点的应用程序的命名方式,本申请实施例不做限制。
(2)文档对象模型(document object model,DOM)
DOM是一种处理可扩展标记语言的标准编程接口。DOM是一种与平台和语言无关的,用于处理HTML和可扩展标记语言(extensible markup language,XML)文件的标准应用程序编程接口(application programming interface,API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格。DOM是一种基于树的API文档,它要求在处理过程中整个文档都表示在存储器中。
DOM提供了对整个文档的访问模型,将文档作为一个树形结构,树的每个节点表示了一个HTML标签或标签内的文本项。DOM树结构描述了HTML文档中标签间的相互关联性。将HTML或XML文档转化为DOM树的过程称为解析(parse)。HTML文档被解析后,转化为DOM树,因此对HTML文档的处理可以通过对DOM树的操作实现。
(3)虚拟DOM(Virtual DOM,VDOM)
VDOM是一种通过使用JS来模拟DOM的技术,VDOM是对真实DOM节点信息的描述,是用来对界面元素的一种虚拟建模。VDOM可以看作是一个使用JS模拟了DOM结构的树形结构,这个树结构包含整个DOM结构的信息。在一些实现方式中,每一个DOM节点都有一个VDOM节点与之对应,这个VDOM节点称之为VNode,由VNode所组成的整个VNode树就是VDOM。
示例性的,一个VNode节点主要包含如下信息:
示例性的,以下代码示例性示出了一种VDOM文件描述的VDOM树形结构:
上述代码描述了VDOM树形结构中的两个节点,一个节点为“div”类型,其属性包括区域大小(width、height)、背景颜色(backgroundColor)、背景图片(backgroundImage)等;另一个节点为“text”类型,其属性包括文本内容(value)等。
VDOM包含以下内容:
-JS DOM模型树(VTree),类似文档节点树(DOM);
-DOM模型树转文档节点树的方法(VTree->DOM);
-两个DOM模型树的差异算法(diff(VTree,VTree)->PatchObject);
-根据DOM模型树的差异,操作节点的方法(patch(DOMNode,PatchObject)->DOMNode)。
在刷新应用程序的页面时,在浏览器中渲染DOM的开销较大,VDOM将DOM的对比放在了JS层,通过VDOM技术,可以精准地改变局部DOM结构,而不必将整个DOM结构进行改变,从而减少渲染DOM节点的开销。
一些快应用程序体量较大,用户在使用时不会使用全部的页面,因此快应用联盟指定了分包方案:当快应用体量较大时,可以使用快应用的分包加载功能。简单来说,就是将项目中的所有页面及资源通过配置规则划分到多个单独的分包(即分包文件)中,运行时单独下载分包,用以加快页面渲染。分包加载的能力首先依赖于编译时工具,根据开发者在快应用清单文件中配置的分包规则,将项目打包成多个分包。
这些分包包含一个基础包和若干个分包,基础包的内容包含一些公共的资源、页面等,分包的内容是根据开发者的配置资源目录进行划分的。在快应用运行时,快应用将优先加载基础包和页面所在分包,其余分包会自动在后台进行预加载。
上述方案中,快应用首页的展示仍需要下载完整的基础包,将基础包在本地运行、加载并展示到用户设备上,这个过程需要的平均时间超过2秒,对用户体验不友好。
为解决上述问题,本申请实施例中,通过缓存或者应用分发时下发VDOM的方式,使应用在启动时可以获取到该应用运行所需要的页面元素的结构(比如包括页面元素的种类和大致的数量),从而提前进行页面渲染,在服务器返回应用程序的数据后,再用服务器返回的数据更新页面元素上的信息(例如针对文本展示类的页面元素更新展示的文字和样式等,针对图片类的页面元素更新图片链接等),从而实现较小的增量更新,快速将新的页面元素应用到预先创建的页面上,从而降低应用启动时延,提高用户体验。
本申请实施例可以应用于快应用的启动流程,从而可以提高快应用的打开速度,减少用户的等待时间,让用户更早的看到首页面,提升用户体验,提高应用的打开成功率。
下面结合附图对本申请的实施例进行描述。
参阅图2,示例性示出了本申请实施例使用的一种系统架构示意图。该系统架构中包括:快应用开发者所使用的终端(如图中所示的快应用开发者终端)、应用管理系统(如图中所示的应用商店)、服务器、运行快应用的终端(如图中所示的终端)。该终端中设置有快应用引擎。
可选的,快应用开发者终端上部署有快应用的IDE。快应用的开发者(比如包括开发快应用的组织或个人),可以基于终端上的快应用IDE,按照快应用规范开发快应用,并将快应用的RPK提交给网络侧的应用管理系统(如图中的应用商店)。
可选的,开发者提交的快应用RPK中包括快应用清单文件,快应用清单文件中配置有分包规则,基于该分包规则,快应用中的项目可以被打包成一个基础包和至少一个分包。
可选的,快应用RPK中包含由开发者设置的首页面对应的VDOM文件(本文中称为第一VDOM文件)。该第一VDOM文件可能包含在基础包中,也可以独立于基础包。该第一VDOM文件用于生成该快应用的首页面,其描述了该快应用的首页面的页面元素在内存中的模型,示例性的,第一VDOM文件中可以包含有该快应用首页面中的页面元素信息,比如包含页面元素的类型、属性、父页面元素集合、子页面元素集合等,进一步的,还可以包括页面元素内容(比如对于文本类型,其页面元素内容为文本内容,对于图片类型,其页面元素内容为图片的链接地址)。
第一VDOM文件描述的树形结构与真实首页面对应的VDOM的树形结构相同或相似,也就是说,该第一VDOM文件描述的页面结构与真实首页面的页面结构相同或相似。示例性的,第一VDOM文件描述的页面结构与真实首页面的结构在以下一个或多个方面相同:元素类型、布局、属性等。换言之,该第一VDOM文件描述了首页面的页面结构。
可选的,第一VDOM文件描述的页面元素的内容与真实首页面的页面元素的内容可能相同,也可能不同,比如更为简化,示例性的,第一VDOM文件中的页面元素内容可以是默认设置的,还可以设置为空。举例来说,若首页面中的一个DOM节点对应的页面元素为一个新闻标题列表,该新闻标题列表具有实时性,即该列表中的新闻标题随时间动态更新,相应的,第一VDOM文件中与该DOM节点对应的VNode用于描述一个新闻标题列表,该新闻标题列表中的每个新闻标题的内容可以用“新闻标题1”“新闻标题2”等类似内容来填充,或者将新闻标题的内容设置为空,在开启快应用后,在显示出的首页面中,这些新闻标题的内容将使用从服务器获取到的快应用数据中的新闻标题所替换。再例如,若首页面中的一个DOM节点对应的页面元素为一个图片,该图片具有实时性,即该图片随时间动态更新,相应的,第一VDOM文件中与该DOM节点对应的VNode用于描述一个图片,该图片的链接地址可以是一个由开发者设置的默认的图片链接地址,在开启快应用的过程中,在显示出的首页面中,该图片的链接地址将使用从服务器获取到的快应用数据中的图片链接地址所替换。
可选的,第一VDOM文件可以是文本文件,例如为JS对象简谱(JavaScript objectnotation,JSON)格式的文件。JSON文件格式是一种轻量级的数据交换格式,它基于ECMAScript(European Computer Manufacturers Association,欧洲计算机协会制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,层次结构简洁清晰。第一VDOM文件也可以是非文本二进制文件,本申请实施例对该VDOM文件的格式不做限制。
应用商店是由终端厂商提供的应用管理系统,该系统可以接收应用开发者提交的快应用RPK,基于开发者提交的快应用RPK对快应用进行审核,还可以基于终端用户的请求将快应用分发到终端用户。可选的,应用商店还可以将快应用RPK提交给服务器,由服务器根据快应用清单文件中配置的分包规则对快应用RPK进行拆包,得到一个基础包以及至少一个分包。
服务器是快应用云端的服务器,是快应用的内容提供商(content provider,CP)服务器。该服务器还可以对开发者上传的快应用RPK进行预处理,比如对快应用RPK进行拆包、预先运行等。本申请实施例中,该服务器也可以称为快应用服务器或CP服务器。
快应用引擎为客户端的引擎,是按照快应用标准解析执行快应用程序的程序模块。该引擎可以为快应用提供运行环境,将快应用的代码转换为用户界面。快应用引擎可以从网络侧下载后安装到终端,也可以预置于终端。
基于以上系统架构,在本申请实施例中,当用户想要开启一个快应用时,可以通过点击该快应用的入口来启动该快应用,一种示例性的启动方式如图1所示。
在一种可能的实现方式中,在启动第一快应用的过程中,如果终端本地没有缓存该第一快应用的RPK,则终端首先下载该快应用的RPK(比如从应用商店下载该快应用的RPK),该RPK中包含有第一VDOM文件,终端根据该第一VDOM文件进行首页面渲染,同时向服务器请求该应用的数据,并使用从服务器获取到的数据更新首页面中的页面元素。具体实现方式可以参见下文。
在另一种可能的实现方式中,在启动第一快应用的过程中,如果终端本地没有缓存该第一快应用的RPK,则终端首先下载该快应用的RPK(比如从应用商店下载该快应用的RPK);终端运行该快应用的RPK,获取缓存的该快应用的首页面对应的VDOM文件,根据缓存的VDOM文件进行首页面渲染,同时向服务器请求该应用的数据,并使用从服务器获取到的数据更新首页面中的页面元素。具体实现方式可以参见下文。
本申请实施例中涉及的终端,可以包括手机、个人计算机(personal computer,PC)、平板电脑、台式机(桌面型电脑)、手持计算机、笔记本电脑(膝上型电脑)、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personaldigital assistant,PDA)、智能电视等设备。或者,可以包括增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备等穿戴设备,本申请实施例中的终端还可以是车载终端等设备。本申请实施例对终端的具体形态不作特殊限制。
参阅图3,示例性示出了本申请实施例提供的一种终端的内部硬件结构示意图。终端100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universalserial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。
处理器110可以包括一个或多个处理单元。例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,显示处理单元(displayprocess unit,DPU),和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。在一些实施例中,终端100也可以包括一个或多个处理器110。其中,处理器是终端100的神经中枢和指挥中心。处理器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。处理器110中还可以设置存储器,用于存储指令和数据。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。其中,USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为终端100充电,也可以用于终端100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。
传感器模块180中可以包括以下一种或多种:压力传感器180A、陀螺仪传感器180B、气压传感器180C、磁传感器180D、加速度传感器180E、距离传感器180F、接近光传感器180G、指纹传感器180H、温度传感器180J、触摸传感器180K、环境光传感器180L、骨传导传感器180M、重力传感器。
充电管理模块140用于从充电器接收充电输入。电源管理模块141用于连接电池142,充电管理模块140与处理器110。终端100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。终端100中的每个天线可以用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如,可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在终端100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(lownoise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供应用在终端100上的包括无线局域网(wireless localarea networks,WLAN)(如Wi-Fi网络),蓝牙(bluetooth,BT),全球导航卫星系统(globalnavigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,终端100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得终端100可以通过无线通信技术与网络以及其他设备通信。终端100可以通过ISP、摄像头193、视频编解码器、GPU、显示屏194以及应用处理器等实现拍摄功能。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展终端100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
终端100通过GPU,显示屏194,以及应用处理器AP等可以实现显示功能。显示屏194用于显示图像,视频等。
终端100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
可以理解,本申请实施例示意的结构并不构成对终端100的具体限定。在本申请另一些实施例中,终端100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件、软件或软件和硬件的组合实现。
参阅图4,为本申请实施例提供的终端的分层软件结构示意图。分层架构将终端的软件系统分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。
在一些实施例中,可以将Android系统分为四层,分别为应用程序层(applications)、应用程序框架层(application framework)、安卓运行时(Androidruntime)和系统库以及内核层(kernel),本申请实施例对终端的软件结构的分层不做限制。可以将安卓运行时和系统库以及内核层看作一层,称为系统层。应理解,图4在Android系统的基础上还增加了终端中的硬件层。
应理解,图4所示的各分层中包括的模块为本申请实施例中涉及到的模块,如下各分层中包括的模块并不构成对终端的结构和模块部署的层级(示例说明)的限定。在一种实施例中,图4中所示的模块可以单独部署,或者几个模块可以部署在一起,图4中对模块的划分为一种示例。在一种实施例中,图4中所示的模块的名称为示例说明。
应用程序层可以包括一系列应用程序包。应用程序层可以包括快应用引擎,还可以包括其他应用,比如:相机,图库,日历,通话,地图,导航,蓝牙,音乐,视频,短信息等应用程序。应用程序可以包括系统应用和第三方应用。
应用程序框架层可以为应用程序层的应用提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层可以包括一些预先定义的函数。参照图4,应用程序框架层可以包括:系统服务模块、窗口管理服务(window managerservice,WMS)模块等。
因为本申请实施例中将安卓运行时和系统库,以及内核层看作一层,因此系统层中可以包括安卓运行时和系统库,以及内核层中的功能模块。另外,系统层还包括硬件的驱动,用于驱动硬件工作。如驱动层中包括:传感器驱动、显示驱动(display driver)、图形处理器驱动(graphics processing unit driver,GPU driver)等,本申请实施例对此不做限制。
硬件层包括终端中的硬件。可以理解,图4中的硬件层中示出了下述实施例中涉及到的传感器、显示屏等。
参见图5,为本申请实施例提供的应用程序启动流程示意图。该流程可以在本申请实施例提供的终端上实现。以下以启动第一应用程序为例,描述本申请实施例提供的应用程序启动方法。可选的,所述第一应用程序为快应用。该流程可以包括以下步骤:
S501:基于启动第一应用程序的请求,获取第一应用程序的首页面对应的第一VDOM文件,并从服务器获取第一应用程序的数据。
其中,第一VDOM文件的相关描述,可以参见前文内容,在此不再重复。
从服务器获取第一应用程序的数据的一个示例为:新闻类快应用向快应用服务器请求新闻列表数据。
可选的,如果终端本地存储有第一应用程序的RPK,则终端获取本地存储的第一应用程序的RPK,运行该应用程序的RPK,以执行获取第一应用程序的首页面对应的第一VDOM文件的操作,以及从服务器获取第一应用程序的数据的操作。如果终端本地没有存储第一应用程序的RPK,则终端从网络侧下载第一应用程序的RPK,比如通过“应用商店”下载第一应用程序的RPK,然后运行该应用程序的RPK。
在一种可能的应用场景中,当用户触发第一应用程序的入口(比如点击第一应用程序的图标)时,发起启动第一应用程序的请求。示例性的,基于图4所示的软件系统架构,用户触发第一应用程序的入口的用户操作能够被系统层捕获,生成相应的事件信息,该事件信息被传递给应用程序框架层,由应用程序框架层的系统服务模块根据该事件信息确定需要启动的应用程序,并向应用程序层的快应用引擎发送请求,以用于请求启动第一应用程序。快应用引擎根据该请求,获取第一应用程序的RPK,通过运行该应用程序的RPK,从而获取第一应用程序的首页面对应的第一VDOM文件,并向快应用服务器发送获取数据的请求,以便从快应用服务器接收该第一应用程序的数据。
在一种可能的实现方式中,第一应用程序的RPK中包含第一VDOM文件。快应用引擎可以从第一应用程序的RPK中获取第一VDOM文件。
可选的,第一应用程序的RPK可以包括一个基础包以及至少一个其他分包,第一VDOM文件可以包含在该基础包中。由于基础包优先被下载,因此终端可以在较短时间内接收到该基础包,并可以根据其中包含的第一VDOM文件进行后续的页面绘制、渲染等操作。第一VDOM文件也可能独立于基础包,此种情况下,该第一VDOM文件和基础包可以被优先下载,终端可以在较短时间内接收到该第一VDOM文件,以便快应用引擎能够尽快根据第一VDOM文件进行后续的页面绘制、渲染等操作。
在一种可能的实现方式中,第一VDOM文件是终端本地保存的,可以是该终端上一次启动第一应用程序时,在生成首页面后,将该首页面对应的VDOM存储为第一VDOM文件。相应地,在本次启动第一应用程序的过程中,在生成首页面后,还要将该首页面对应的VDOM存储为第一VDOM文件,以便下一次启动该第一应用程序时生成对应的页面。
S502:根据第一VDOM文件对应的第一VDOM生成第一页面。
可选的,在获取到第一VDOM文件后,可以将该第一VDOM文件加载到内存中,形成第一VDOM。其中,第一VDOM为树形结构,是第一VDOM文件在内存中的表现形式。
在该步骤中,终端(或快应用引擎)可以根据第一VDOM创建对应的页面元素,将页面元素渲染为页面视图(View),以安卓系统为例,这个过程在安卓系统上为根据第一VDOM对应的页面元素创建安卓视图(View)的过程,此时创建的页面中,界面元素和元素的内容为第一VDOM描述的内容,并不是本次访问的真实页面,因此可选的,可以将此时创建的页面(即第一页面)设置为对用户不可见。
示例性的,快应用引擎可以根据第一VDOM创建VNode节点,根据VNode节点创建对应的DOM节点,根据DOM节点绘制、渲染第一页面。图6示例性示出了一种根据第一VDOM生成第一页面的流程示意图,如图所示,可以包括以下步骤:
S601:根据第一VDOM创建VNode节点。
S602:根据VNode节点创建对应的DOM节点。
每一个DOM节点都有一个VNode节点与之对应,因此可以根据VNode创建对应的DOM节点,该DOM节点包含了对应的VNode节点的全部信息,比如包括节点的类型、属性、子节点、父节点等。
S603:根据DOM节点创建DOM元素,其中包括子元素。
由于DOM节点表示了一个HTML标签或标签内的文本项,因此根据DOM节点可以创建对应的DOM元素,所述DOM元素包括HTML标签或标签内的文本项。由于一个DOM节点中还可能包括子节点,因此可以根据DOM节点创建子元素。
S604:将DOM元素添加到页面。
该步骤中,可以根据DOM元素进行页面的绘制和渲染操作,从而得到第一页面。
S503:根据获取到的第一应用程序的数据,更新第一页面中的页面元素,得到第一应用程序的首页面。
在一种可能的实现方式中,如图7所示,终端(或者快应用引擎)可以执行以下步骤:
S701:根据获取到的第一应用程序的数据,在内存中构建第二VDOM。
第二VDOM和第一VDOM的形式相同或相似,元素的个数、类型和属性可能不同。
S702:将第一VDOM与第二VDOM进行比较,得到第一VDOM和第二VDOM之间的差异。
可选的,可以通过调用DOM模型树的差异算法(diff(VTree,VTree)->PatchObject),得到第一VDOM和第二VDOM之间的差异。
示例性的,所述差异可能包括以下一种或多种情况:
情况1:第二VDOM相较于第一VDOM,包括新的页面元素,即该页面元素仅存在于第二V DOM中;
情况2:第二VDOM相较于第一VDOM,不包含某个或某些页面元素,即该页面元素仅存于与第一VDOM中;
情况3:第二VDOM相较于第一VDOM,一个或多个页面元素的属性不同,比如第二VDOM中的某个页面元素的背景颜色设置为红色,第一VDOM中该页面元素的背景颜色设置为绿色;
情况4:第二VDOM相较于第一VDOM,一个或多个页面元素的内容不同,比如第二VDOM中的某个文本类型的页面元素的内容为“全国各地欢度春节”,第一VDOM中该页面元素的内容为“新闻标题1”或者被设置为空;再例如,第二VDOM中的某个图片类型的页面元素的链接设置为默认链接地址URL1,第一VDOM中该页面元素的链接地址为URL2。
S703:根据第一VDOM和第二VDOM之间的差异,更新第一页面中的页面元素,得到第一应用程序的首页面。
可选的,终端(或者快应用引擎)可以根据第一VDOM和第二VDOM之间的差异,生成第一页面更新指令,第一页面更新指令用于更新第一页面中的第一页面元素;终端(或者快应用引擎)根据第一页面更新指令更新第一页面中的第一页面元素。
可选的,第一页面更新指令,可能包括以下至少一项:创建页面元素的指令,删除页面元素的指令,更新页面元素的指令(比如包括更新页面元素的属性,或者更新页面元素的内容等)。
示例性的,针对上述差异情况1,可以生成创建页面元素的指令。示例性的,一种创建页面元素的指令的示例为:createElement(text,attributes:{“value”:“新的内容”});
针对上述差异情况2,可以生成删除页面元素的指令。示例性的,一种删除页面元素的指令的示例为:deleteElement(div,id=“xxx”);
针对上述差异情况3,可以生成更新页面元素的指令。示例性的,一种更新页面元素的指令的示例为:updateElement(div,id=“xxx”,attributes:{“backgroundColor”:“#00bfff"”})。
可选的,根据第二VDOM和第一VDOM差异的数量,生成的更新指令可能包括多个更新指令。可选的,可以基于生成的多个更新指令,将其批量的传递给应用程序框架层中的窗口管理服务模块,由窗口管理服务模块指示界面渲染模块执行这些更新指令,从而更新第一页面,得到第一应用程序的首页面。
S504:显示第一应用程序的首页面。
在一种可能的实现方式中,上述流程中还包括以下操作:根据第一应用程序的首页面对应的VDOM,更新第一VDOM文件,这样,在下一次启动该第一应用程序时,可以基于更新后的第一VDOM文件生成对应的页面。
在一种可能的实现方式中,可以通过并行运行的第一线程(或主进程)和第二线程,实现上述渲染页面(即基于第一VDOM生成第一页面)过程与从服务器获取应用程序数据的过程的并行执行。示例性的,应用程序引擎(比如快应用引擎)的第一线程(或主进程)启动第二线程;所述第一线程(或主进程)获取第一应用程序的首页面对应的第一VDOM文件,并根据第一VDOM文件对应的第一VDOM生成第一页面;第二线程从服务器获取第一应用程序的数据。其中,第一线程(或主进程)和第二线程并行执行。
基于以上流程,图8示例性示出了一种启动应用程序的处理时序示意图。如图所示,在获取第一VDOM文件以及将其加载到内存的同时,终端(或快应用引擎)运行第一应用程序的RPK代码,触发执行从服务器获取应用程序的数据的操作。第一VDOM文件加载到内存后,根据第一VDOM生成第一页面,生成第一页面的操作与从服务器获取该应用程序的数据的操作(包括向服务器请求应用程序的数据并等待服务器返回的数据)并行执行。待获取到应用程序的数据后,根据获取到的数据构建第二VDOM,再对第一VDOM和第二VDOM进行差分比较,根据差分比较结果更新第一页面,得到应用程序的首页面。
图8中还示出了采用传统方法启动快应用的流程,该流程包括:在获取到快应用的RPK后,首先从服务器获取应用程序的数据(步骤A),然后根据获取到的数据构建VDOM(步骤B),最后将该VDOM传递给窗口管理服务模块进行页面渲染操作(步骤C),由窗口管理服务模块根据该VDOM生成该应用程序的首页面并显示。向服务器请求应用程序的数据并等待服务器返回数据的时间较长,这个过程可能持续数百毫秒,甚至超过1秒。上述传统方法的流程采用串行方式执行。
相较于传统的应用程序启动流程,本申请实施例中,将从服务器请求应用程序数据的和基于第一VDOM渲染页面这两个较为耗时的步骤,进行了并行运行,从而降低了启动流程的时延。
进一步的,为了消除步骤C对步骤A的依赖,在本申请实施例中,获得应用程序的数据后,进行了DOM结构的差分比较,这个比较过程耗时较短,因此可以降低整个应用启动的时延。
在一种设定场景下,经过实际的运行统计,各个阶段的耗时及优化后的耗时情况可以如图9所示。经过分析可以看出,采用本申请实施例,将页面渲染和请求服务器的数据并行执行,再增量更新页面的方法,可以降低页面渲染时长越30%以上。
下面以图4所示的系统架构为例,结合图10,示例性的对本申请实施例的一种实现方式进行描述,并结合图11,示例性的对本申请实施例第另一种实现方式进行描述。
参见图10,为本申请实施例提供的一种应用程序启动流程的示意图。
本示例中,在第一快应用的开发阶段,将该快应用运行的首页面的VDOM内存模型进行序列化处理,存储为第一VDOM文件。在对第一快应用打包为RPK时,可以将该第一VDOM文件作为资源文件与RPK文件一起打包,在快应用的分发过程中将该第一VDOM文件作为RPK包的一部分提交到应用商店。该快应用经过审批在应用商店发布后,开发者用户可以查看和打开该RPK。
本示例中,在打开第一快应用时,可以将请求服务器的数据和将基于第一VDOM文件进行页面渲染这两个耗时较长的步骤进行并行处理,利用第一VDOM文件先渲染页面,再将第一VDOM和基于获取到的数据构建的第二VDOM进行差分比较,从而可以快速更新页面,降低整个应用启动时延。
该示例可以应用于新开发的快应用。
如图10所示,该流程可以包括以下步骤:
步骤1:快应用引擎的主进程根据用户请求打开第一快应用的操作,获取用户请求打开的第一快应用的RPK,并开始运行第一快应用的RPK。
可选的,可以从终端本地获取第一快应用的RPK(如果终端本地存储有该应用的RPK),也可以从网络侧(云端)下载该快应用的RPK。
可选的,第一快应用的RPK中包含第一VDOM文件。
步骤2:快应用引擎的主进程启动子线程,该子线程负责从快应用服务器获取该快应用的数据。
步骤3:快应用引擎的子线程向快应用服务器请求该快应用的数据,例如请求某新闻类快应用的新闻列表数据。因从网络侧获取数据并等待网络侧返回数据的时间较长,这个过程可能持续数百毫秒,甚至超过1秒。
步骤4:在子线程从快应用服务器请求数据的同时,主进程获取第一快应用的第一VDOM文件,并将第一VDOM文件加载到内存。
可选的,主进程可以从本地缓存获取第一VDOM(如果本地缓存有该快应用的第一VDOM);或者可以获取本地存储的该快应用的第一VDOM文件(该第一VDOM文件是之前启动第一快应用时存储的),并将该第一VDOM文件加载到内存,得到第一VDOM;或者下载第一快应用的RPK,从该RPK中获取第一VDOM文件,并将该第一VDOM文件加载到内存,得到第一VDOM。
所述第一VDOM文件以及第一VDOM的相关描述可以参见前文,这里不再重复。
步骤5:根据第一VDOM,渲染为第一页面。
以安卓系统为例,这个过程在安卓上为根据第一VDOM的元素创建安卓VIEW的过程,此时创建的用户界面其界面元素和元素的内容为第一VDOM的内容,因并不是真正的本次访问的页面,因此可以将此时创建的第一页面设置为对用户不可见。
步骤6:快应用引擎的子线程接收服务器返回的数据。
步骤7:快应用引擎的子线程在获取到服务器返回的数据之后,根据获取到的数据,在内存中构建第二VDOM,此时的第二VDOM和第一VDOM其形式相同,但元素的个数、类型和属性可能不同。
步骤8:快应用引擎的子线程将第二VDOM作为返回结果传递给调用它的主进程。
步骤9:快应用的主进程在获取到第二VDOM后,结合步骤4获取到的第一VDOM,比较2个树形模型中的VNode节点的差异。由于第二VDOM和第一VDOM其结构相似,因此可以快速的比较出第二VDOM相比于第一VDOM的主要差异,从而形成页面更新指令。
步骤10:基于步骤9生成的页面更新指令,快应用引擎将其批量的传递给窗口管理服务模块,由窗口管理服务模块指示页面渲染模块执行这些页面更新指令,例如将文本的文字修改为新的文字,增加页面元素、删除页面元素或者更新页面元素等,页面更新完毕后,将其设置为对用户可见,此时显示的页面即为本次启动第一快应用后显示的首页面。
可选的,上述流程还可以包括以下步骤:
在获得第二VDOM后,将第二VDOM存储为对应的VDOM文件,以替换第一VDOM文件,从而使得下一次运行第一快应用时,可以基于该更新的第一VDOM文件生成对应的页面,从而可以进一步减少该第一VDOM和第二VDOM(基于从服务器获取到的应用程序数据生成的VDOM)之间的差异,进而减少页面更新指令的数量,降低页面更新时延,从而降低启动时延。
上述图10所示流程中各步骤的具体实现方式,可以参见前述实施例,在此不再赘述。
以上图10所示的流程仅为一种示例,上述流程中的部分步骤可以是可选步骤,上述流程中的部分步骤也可以重新组合,并申请实施例对此不作限制。
本实施例将从服务器获取应用程序数据(图10中步骤3)和将第一VDOM渲染为第一页面(图10中步骤5)这两个耗时步骤,进行了并行执行,为了解决步骤5中生成的第一页面并非是基于服务器返回的数据生成的页面(即并非是真实页面)的问题,在步骤6返回应用程序的数据后,进行了DOM结构的差分比较(步骤9),并根据比较结果更新基于第一VDOM生成的第一页面(步骤10),这个比较过程耗时较短,并且第一VDOM与第二VDOM的形式相同,使得页面更新过程耗时也较短,因此可以提高整个应用启动时间。
参见图11,为本申请实施例提供的另一种应用程序启动流程的示意图。
本示例中,第一快应用的开发阶段可以采用传统方法。
本示例中,在打开第一快应用时,可以将从服务器获取应用程序数据和将基于第一VDOM文件(该第一VDOM为历史缓存的VDOM文件,如图11中的步骤0所示)进行页面渲染这两个耗时较长的步骤进行并行处理,利用第一VDOM文件先渲染页面,再将第一VDOM和基于获取到的应用程序数据构建的第二VDOM进行差分比较,从而可以快速更新页面,降低整个应用启动时延。
图11所示的流程基本与图10相同,不同之处在于:由于第一VDOM文件没有包含在第一快应用的RPK中,因此在首次启动第一快应用时,当渲染完成应用程序的首页面后,将该首页面的VDOM进行序列化,形成第一VDOM文件并存储到终端的非易失性存储介质中(比如保存到磁盘上),后续再次启动第一开应用时,可以获取存储的第一VDOM文件,从而优化应用启动速度,具体流程与图10所示的流程基本相同。
图11所示的流程,对快应用的RPK文件无特殊要求,针对存量的快应用RPK文件,可以采用上述流程。
基于相同的技术构思,本申请实施例还提供了一种终端,该终端可以实现上述实施例提供的方法。
参见图12,本申请实施例提供的终端可以包括:处理单元1201和显示单元1202。处理单元1201用于基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一VDOM文件,并从服务器获取所述第一应用程序的数据,根据所述第一VDOM文件对应的第一VDOM生成第一页面,根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面;显示单元1202用于显示所述第一应用程序的首页面。其中,所述第一VDOM文件用于描述所述第一应用程序的首页面的页面结构。在一种可能的实现方式中,所述第一应用程序为快应用。
可选的,处理单元1201可以是该终端中的应用程序引擎,比如可以是快应用引擎。
在一种可能的实现方式中,第一VDOM文件包含在第一应用程序的RPK中。处理单元1201具体用于:从第一应用程序的RPK中获取所述第一VDOM文件。
可选的,第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件包含在所述基础包中。处理单元1201还用于:在获取所述第一应用程序的首页面对应的第一VDOM文件之前,从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包被优先下载。
可选的,第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件独立于所述基础包。处理单元1201还用于:在获取所述第一应用程序的首页面对应的第一VDOM文件之前,从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包和所述第一VDOM文件被优先下载。
可选的,处理单元1201还用于:根据所述第一应用程序的首页面对应的VDOM,更新所述第一VDOM文件,更新后的第一VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
在一种可能的实现方式中,第一VDOM文件为所述终端存储的所述第一应用程序的历史首页面对应的VDOM文件。
可选的,处理单元1201还用于:得到所述第一应用程序的首页面之后,根据所述第一应用程序的首页面对应的VDOM生成VDOM文件,存储生成的VDOM文件,所述生成的VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
在一种可能的实现方式中,处理单元1201具体用于:根据获取到的所述第一应用程序的数据,生成第二VDOM;将所述第一VDOM与所述第二VDOM进行比较,得到所述第一VDOM和所述第二VDOM之间的差异;根据所述第一VDOM和所述第二VDOM之间的差异,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面。
可选的,处理单元1201具体用于:根据所述第一VDOM和所述第二VDOM之间的差异,生成第一页面更新指令,所述第一页面更新指令用于更新所述第一页面中的第一页面元素;根据所述第一页面更新指令更新所述第一页面中的第一页面元素。
可选的,第一页面更新指令,包括以下至少一项:增加页面元素的更新指令,删除页面元素的更新指令,修改页面元素的更新指令。
在一种可能的实现方式中,处理单元1201为应用程序引擎,所述应用程序引擎具体用于:应用程序引擎的主进程或第一线程,启动第二线程;所述主进程或第一线程获取所述第一应用程序的首页面对应的第一VDOM文件,并根据所述第一VDOM文件对应的第一VDOM生成第一页面;所述第二线程从服务器获取所述第一应用程序的数据;其中,所述主进程与所述第二线程并行执行,或者所述第一线程与所述第二线程并行执行。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,该计算机程序被计算机执行时,所述计算机可以实现上述方法实施例提供的方法。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品用于存储计算机程序,该计算机程序被计算机执行时,所述计算机可以实现上述方法实施例提供的方法。
本申请实施例还提供一种芯片,包括处理器,所述处理器与存储器耦合,用于调用所述存储器中的程序使得所述芯片实现上述方法实施例提供的方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (15)
1.一种应用程序启动方法,应用于终端,其特征在于,所述方法包括:
基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一虚拟文档对象模型VDOM文件,并从服务器获取所述第一应用程序的数据,所述第一VDOM文件用于描述所述第一应用程序的首页面的页面结构;
根据所述第一VDOM文件对应的第一VDOM生成第一页面;
根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面;
显示所述第一应用程序的首页面。
2.如权利要求1所述的方法,其特征在于,所述第一VDOM文件包含在所述第一应用程序的可运行应用程序包RPK中;
所述获取所述第一应用程序的首页面对应的第一VDOM文件,包括:
从所述第一应用程序的RPK中获取所述第一VDOM文件。
3.如权利要求2所述的方法,其特征在于,所述第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件包含在所述基础包中;
所述获取所述第一应用程序的首页面对应的第一VDOM文件之前,所述方法还包括:
从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包被优先下载。
4.如权利要求2所述的方法,其特征在于,所述第一应用程序的RPK包括一个基础包以及至少一个分包,所述第一VDOM文件独立于所述基础包;
所述获取所述第一应用程序的首页面对应的第一VDOM文件之前,所述方法还包括:
从网络侧下载所述第一应用程序的RPK,所述第一应用程序的RPK中的基础包和所述第一VDOM文件被优先下载。
5.如权利要求2-4任一项所述的方法,其特征在于,所述方法还包括:
根据所述第一应用程序的首页面对应的VDOM,更新所述第一VDOM文件,更新后的第一VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
6.如权利要求1所述的方法,其特征在于,所述第一VDOM文件为所述终端存储的所述第一应用程序的历史首页面对应的VDOM文件。
7.如权利要求6所述的方法,其特征在于,所述得到所述第一应用程序的首页面之后,所述方法还包括:
根据所述第一应用程序的首页面对应的VDOM生成VDOM文件,存储生成的VDOM文件,所述生成的VDOM文件用于下一次启动所述第一应用程序时生成对应的页面。
8.如权利要求1-7任一项所述的方法,其特征在于,所述根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面,包括:
根据获取到的所述第一应用程序的数据,生成第二VDOM;
将所述第一VDOM与所述第二VDOM进行比较,得到所述第一VDOM和所述第二VDOM之间的差异;
根据所述第一VDOM和所述第二VDOM之间的差异,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面。
9.如权利要求8所述的方法,其特征在于,所述根据所述第一VDOM和所述第二VDOM之间的差异,更新所述第一页面中的页面元素,包括:
根据所述第一VDOM和所述第二VDOM之间的差异,生成第一页面更新指令,所述第一页面更新指令用于更新所述第一页面中的第一页面元素;
根据所述第一页面更新指令更新所述第一页面中的第一页面元素。
10.如权利要求9所述的方法,其特征在于,所述第一页面更新指令,包括以下至少一项:
增加页面元素的更新指令;
删除页面元素的更新指令;
修改页面元素的更新指令。
11.如权利要求1-10任一项所述的方法,其特征在于,所述基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一VDOM文件,并从服务器获取所述第一应用程序的数据,包括:
应用程序引擎的主进程或第一线程,启动第二线程;
所述主进程或第一线程获取所述第一应用程序的首页面对应的第一VDOM文件,并根据所述第一VDOM文件对应的第一VDOM生成第一页面;
所述第二线程从服务器获取所述第一应用程序的数据;
其中,所述主进程与所述第二线程并行执行,或者所述第一线程与所述第二线程并行执行。
12.如权利要求1-11任一项所述的方法,其特征在于,所述第一应用程序为快应用。
13.一种终端,其特征在于,包括:
处理单元,用于基于启动第一应用程序的请求,获取所述第一应用程序的首页面对应的第一虚拟文档对象模型VDOM文件,并从服务器获取所述第一应用程序的数据,所述第一VDOM文件用于描述所述第一应用程序的首页面的页面结构;根据所述第一VDOM文件对应的第一VDOM生成第一页面;根据获取到的所述第一应用程序的数据,更新所述第一页面中的页面元素,得到所述第一应用程序的首页面;
显示单元,用于显示所述第一应用程序的首页面。
14.一种终端,其特征在于,包括:一个或多个处理器;所述一个或多个存储器存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行如权利要求1-12中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,包括计算机程序,当所述计算机程序在终端上运行时,使得所述终端执行如权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211127315.3A CN115576623B (zh) | 2022-09-16 | 2022-09-16 | 一种应用程序启动方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211127315.3A CN115576623B (zh) | 2022-09-16 | 2022-09-16 | 一种应用程序启动方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115576623A true CN115576623A (zh) | 2023-01-06 |
CN115576623B CN115576623B (zh) | 2023-08-22 |
Family
ID=84581104
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211127315.3A Active CN115576623B (zh) | 2022-09-16 | 2022-09-16 | 一种应用程序启动方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115576623B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105607927A (zh) * | 2015-12-18 | 2016-05-25 | 小米科技有限责任公司 | 页面显示方法及装置 |
CN107809491A (zh) * | 2017-11-30 | 2018-03-16 | 北京小米移动软件有限公司 | 安装包的下载方法及装置 |
CN109375918A (zh) * | 2018-11-23 | 2019-02-22 | 天津字节跳动科技有限公司 | 小程序的界面渲染方法、装置、电子设备和存储介质 |
CN110427225A (zh) * | 2019-07-29 | 2019-11-08 | 阿里巴巴集团控股有限公司 | 一种启动小程序的方法和装置 |
CN111931102A (zh) * | 2020-07-01 | 2020-11-13 | 华为技术有限公司 | 一种构建页面的方法、装置及系统 |
-
2022
- 2022-09-16 CN CN202211127315.3A patent/CN115576623B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105607927A (zh) * | 2015-12-18 | 2016-05-25 | 小米科技有限责任公司 | 页面显示方法及装置 |
CN107809491A (zh) * | 2017-11-30 | 2018-03-16 | 北京小米移动软件有限公司 | 安装包的下载方法及装置 |
CN109375918A (zh) * | 2018-11-23 | 2019-02-22 | 天津字节跳动科技有限公司 | 小程序的界面渲染方法、装置、电子设备和存储介质 |
CN110427225A (zh) * | 2019-07-29 | 2019-11-08 | 阿里巴巴集团控股有限公司 | 一种启动小程序的方法和装置 |
CN111931102A (zh) * | 2020-07-01 | 2020-11-13 | 华为技术有限公司 | 一种构建页面的方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115576623B (zh) | 2023-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109358936B (zh) | 信息处理方法、装置、存储介质、电子设备及系统 | |
WO2019228059A1 (zh) | 一种数据处理的方法、多云管理系统以及相关设备 | |
WO2018036322A1 (zh) | 应用安装包的生成方法和装置、存储介质 | |
WO2020233556A1 (zh) | 一种通话内容处理方法和电子设备 | |
CN111026490A (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
CN111026491A (zh) | 界面显示方法、装置、电子设备、服务器及存储介质 | |
CN112217671B (zh) | 基于拆分部署的前端微服务进行界面显示的方法及设备 | |
CN112035768A (zh) | 快应用的页面渲染方法、装置、存储介质及电子设备 | |
CN112698828A (zh) | 一种显示界面的布局方法及电子设备 | |
CN111125602A (zh) | 页面构建方法、装置、设备和存储介质 | |
WO2021057390A1 (zh) | 一种启动快应用的方法及相关装置 | |
CN115576623B (zh) | 一种应用程序启动方法及装置 | |
WO2022252804A1 (zh) | 显示视图控件的方法及装置 | |
CN109948095B (zh) | 显示网页内容的方法、装置、终端及存储介质 | |
WO2021238376A1 (zh) | 功能包的加载方法、装置、服务器和电子设备 | |
CN115131470A (zh) | 一种图文素材合成方法、装置、电子设备和存储介质 | |
CN110399040B (zh) | 多模态交互方法、用户端设备、服务器及系统 | |
WO2022188766A1 (zh) | 一种应用程序的显示方法及电子设备 | |
EP4216052A1 (en) | Method for developing mvvm architecture-based application, and terminal | |
CN117130688B (zh) | 快应用卡片加载方法、电子设备及存储介质 | |
WO2024041367A1 (zh) | 一种广告展示的方法、终端、服务器及系统 | |
CN114020309B (zh) | 通过webpack构建多页面应用的方法、装置及存储介质 | |
WO2022194010A1 (zh) | 应用程序的分享方法和分享装置 | |
WO2023125832A1 (zh) | 图片分享方法和电子设备 | |
CN116954612A (zh) | Xml布局文件的处理方法、装置、设备及介质 |
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 |