一种界面动态渲染方法及装置

文档序号:1904704 发布日期:2021-11-30 浏览:12次 >En<

阅读说明:本技术 一种界面动态渲染方法及装置 (Interface dynamic rendering method and device ) 是由 甘泉 于 2021-09-08 设计创作,主要内容包括:本发明实施例提供了一种界面动态渲染方法及装置。其中,所述方法包括:获取界面代码,所述界面代码用于描述界面;若界面代码中包含脚本字符串,则执行所述脚本字符串,以在用于渲染界面的预设引擎中加载所述脚本字符串所表示的组件,得到加载有所述组件的预设引擎,其中,所述脚本字符串用于表示实现指定功能的组件;利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面。可以使得用户能够根据实际需求对引擎进行定制,进而使用经过定制的引擎渲染得到符合不同需求的界面,使得界面渲染不再受限制于引擎,有效提高了引擎的适用性。(The embodiment of the invention provides a method and a device for dynamically rendering an interface. Wherein the method comprises the following steps: acquiring an interface code, wherein the interface code is used for describing an interface; if the interface code contains the script character string, executing the script character string to load the component represented by the script character string in a preset engine for rendering the interface to obtain the preset engine loaded with the component, wherein the script character string is used for representing the component for realizing the specified function; and rendering the interface described by the interface code by utilizing the preset engine loaded with the component. The engine can be customized according to actual requirements by a user, and then interfaces meeting different requirements are rendered by using the customized engine, so that the interface rendering is not limited by the engine any more, and the applicability of the engine is effectively improved.)

一种界面动态渲染方法及装置

技术领域

本发明涉及界面渲染技术领域,特别是涉及一种界面动态渲染方法及装置。

背景技术

应用程序可能需要根据实际需求的不同设置不同的界面,以用于观看视频的应用程序为例,由于不同时期推荐观看的视频不同,需要根据推荐观看的视频设置不同的用户界面(User Interface,下文简称界面)。

相关技术中,开发人员可以基于用于界面渲染的引擎针对不同需求开发不同的界面,但是一方面引擎能够提供的功能往往有限,无法满足各种不同的实际需求。另一方面,如果引擎提供数量较多的功能则会导致引擎的开发和运维成本较高。

因此,相关技术中受限制于引擎,渲染出的界面可能难以满足实际需求。

发明内容

本发明实施例的目的在于提供一种界面动态渲染方法及装置,以实现提高引擎的适用性。具体技术方案如下:

在本发明实施的第一方面,首先提供了一种界面动态渲染方法,所述方法包括:

获取界面代码,所述界面代码用于描述界面;

若界面代码中包含脚本字符串,则执行所述脚本字符串,以在用于渲染界面的预设引擎中加载所述脚本字符串所表示的组件,得到加载有所述组件的预设引擎,其中,所述脚本字符串用于表示实现指定功能的组件;

利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面。

在一种可能的实施例中,所述界面代码中包含嵌套信息,所述嵌套信息用于表示所述界面代码所描述的界面中各界面元素之间的嵌套关系;

所述利用所述更新引擎渲染所述界面代码所描述的界面,包括:

根据所述界面代码,确定所述界面代码所描述的界面中包含的各个界面元素;

通过加载有所述组件的预设引擎按照所述嵌套信息所表示的嵌套关系建立所述界面中包含的各个界面元素之间的嵌套关系,得到界面模板;

利用加载有所述组件的预设引擎将所述界面中包含的各个界面元素加载至所述界面模板,得到所述界面代码所描述的界面。

在一种可能的实施例中,所述界面代码中包含配置信息,所述配置信息用于表示已配置界面元素的加载方式,所述已配置界面元素为所述各个界面元素中的至少一个界面元素;

所述利用加载有所述组件的预设引擎将所述界面中包含的各个界面元素加载至所述界面模板,得到所述界面代码所描述的界面,包括:

针对每个已配置界面元素,按照所述配置信息所表示的该已配置界面元素的加载方式加载该已配置界面元素;

针对每个未配置界面元素,按照该未配置界面元素的上级界面元素的加载方式加载该未配置界面元素,其中,所述未配置界面元素为所述各个界面元素中不为已配置界面元素的界面元素,所述上级界面元素为嵌套有该未配置界面元素的界面元素。

在一种可能的实施例中,所述利用所述组件渲染所述界面代码所描述的界面,包括:

利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面,所述预设引擎为React Native框架的界面渲染引擎。

在一种可能的实施例中,在所述利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面之前,所述方法还包括:

对预设引擎进行热更新;

所述利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面,包括:

利用加载有所述组件的经过热更新的所述预设引擎渲染所述界面代码所描述的界面。

在一种可能的实施例中,所述脚本字符串中声明的对象在所述加载有所述组件的预设引擎中被声明为全局对象。。

在本发明实施的第二方面,还提供了一种界面动态渲染装置,所述装置包括:

数据获取模块,用于获取界面代码,所述界面代码用于描述界面;

脚本执行模块,用于若界面代码中包含脚本字符串,则执行所述脚本字符串,以在用于渲染界面的预设引擎中加载所述脚本字符串所表示的组件,得到加载有所述组件的预设引擎,其中,所述脚本字符串用于表示实现指定功能的组件;

界面渲染模块,用于利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面。

在一种可能的实施例中,所述界面代码中包含嵌套信息,所述嵌套信息用于表示所述界面代码所描述的界面中各对象之间的嵌套关系;

所述界面渲染模块利用所述更新引擎渲染所述界面代码所描述的界面,包括:

根据所述界面代码,确定所述界面代码所描述的界面中包含的各个界面元素;

通过加载有所述组件的预设引擎按照所述嵌套信息所表示的嵌套关系建立所述界面中包含的各个界面元素之间的嵌套关系,得到界面模板;

利用加载有所述组件的预设引擎将所述界面中包含的各个界面元素加载至所述界面模板,得到所述界面代码所描述的界面。

在一种可能的实施例中,所述界面代码中包含配置信息,所述配置信息用于表示所述各个界面元素中的已配置界面元素的加载方式,所述已配置界面元素为所述各个界面元素中的至少一个界面元素;

所述界面渲染模块利用加载有所述组件的预设引擎将所述界面中包含的各个界面元素加载至所述界面模板,得到所述界面代码所描述的界面,包括:

针对每个已配置界面元素,,按照所述配置信息所表示的该已配置界面元素的加载方式加载该已配置界面元素;

针对每个未配置界面元素,按照该未配置界面元素的上级界面元素的加载方式加载该未配置界面元素,其中,所述未配置界面元素为所述各个界面元素中不为已配置界面元素的界面元素,所述上级界面元素为嵌套有该未配置界面元素的界面元素。

在一种可能的实施例中,所述装置还包括热更新模块,用于对预设引擎进行热更新;

所述利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面,包括:

利用加载有所述组件的经过热更新的所述预设引擎渲染所述界面代码所描述的界面。

在一种可能的实施例中,所述脚本字符串中声明的对象在所述加载有所述组件的预设引擎中被声明为全局对象。

在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的界面动态渲染方法。

在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的界面动态渲染方法。

本发明实施例提供的界面动态渲染方法及装置,可以通过在界面代码中携带脚本字符串的方式,在用于渲染界面的预设引擎中加载脚本字符串所表示的组件,从而可以在界面渲染过程中动态的调整引擎中的组件,使得用户能够根据实际需求对引擎进行定制,进而使用经过定制的引擎渲染得到符合不同需求的界面,使得界面渲染不再受限制于引擎,有效提高了引擎的适用性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为本发明实施例中提供的界面动态渲染方法的一种流程示意图;

图2为本发明实施例中提供的引擎热更新方法的一种流程示意图;

图3为本发明实施例提供的预设引擎的一种系统架构示意图;

图4为本发明实施例提供的界面动态渲染装置的一种结构示意图;

图5为本发明实施例提供的电子设备的一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

参见图1,图1所示为本发明实施例提供的界面动态渲染方法的一种流程示意图,可以包括:

S101,获取界面代码。

S102,若界面代码中包含脚本字符串,则执行脚本字符串,以在用于渲染界面的预设引擎中加载脚本字符串所表示的组件,得到加载有组件的预设引擎。

S103,利用加载有组件的预设引擎渲染界面代码所描述的界面。

选用该实施例,可以通过在界面代码中携带脚本字符串的方式,在用于渲染界面的预设引擎中加载脚本字符串所表示的组件,从而可以在界面渲染过程中动态的调整引擎中的组件,使得用户能够根据实际需求对引擎进行定制,进而使用经过定制的引擎渲染得到符合不同需求的界面,使得界面渲染不再受限制于引擎,有效提高了引擎的适用性。

示例性的,假设某个应用的1.0版本中使用引擎A渲染用户界面,随着用户需求的拓展,引擎A所支持的功能逐渐无法满足用户的需求,相关技术中,开发人员可以对引擎A进行升级,假设升级后的引擎为引擎B,并在该应用的2.0版本中使用引擎B渲染用户界面。

如果该应用提供商需要根据所开展的活动适应性地更新该用户的用户界面,则开发人员可以编写用于描述更新后的用户界面的界面代码,并通过服务器将界面代码推送至安装有该应用的用户终端,用户终端通过该应用中的引擎解析并执行界面代码,以渲染得到界面代码所描述的界面,从而实现用户界面的更新。

但是由于引擎A与引擎B的不同,同一界面代码无法适用于该引擎A和引擎B。而部分用户可能使用1.0版本的应用,而另一部分用户可能使用2.0版本的应用,因此开发人员需要针对引擎A和引擎B分别编写界面代码,导致成本较高。

而选用本发明实施例提供的界面动态渲染方法,如果引擎A所支持的功能无法满足用户的需求,则用户可以在编写的界面代码中添加脚本字符串,则用户终端在接收到界面代码时可以根据脚本字符串,将脚本字符串所表示的组件加载至引擎A中,以得到加载有这些组件的引擎A(下文记为引擎C),由于引擎C相比于引擎A额外加载有新的组件,因此引擎C相比于引擎A具有更多的功能,从而能够满足用户的实际需求,因此即使随着用户需求的拓展,开发人员也无需升级引擎A,即在该应用的2.0版本中可以仍然适用引擎A,因此可以避免开发人员针对不同引擎分别编写界面代码导致的成本较高。

并且,即使在应用的1.0版本使用引擎A而应用的2.0版本使用引擎B的场景,开发人员可以在针对引擎B编写的界面代码的基础上添加脚本字符串,以使得用户终端在接收到界面代码后,可以根据脚本字符串在引擎A中加载脚本字符串所表示的组件,这些组件用于使得引擎A具备正常解析并运行该界面代码的能力,从而使得开发人员无需针对引擎A重新编写界面代码,可以最大程度上复用针对引擎B编写的界面代码,从而降低成本。

在S101中,界面代码用于描述界面,根据应用场景的不同,界面代码可以是以不同的能够用于描述界面的语言编写的代码,示例性的,界面代码可以是以以下任一语言编写的代码,包括但不限于:JSON、XML、HTML。并且界面代码所使用的语音应当为用于渲染界面的预设引擎所支持的语言,示例性的,用于渲染界面的预设引擎支持XML语言,则界面代码可以是使用XML语言编写得到的代码。

界面代码中包含脚本字符串,脚本字符串用于表示实现指定功能的组件。并且,界面代码中可以包含脚本字符串,也可以不包含脚本字符串。脚本字符串所使用的语言可以是任一脚本语言,并且脚本所使用的脚本语言理论上应当与渲染界面所使用的预设引擎所使用的编程语言一致。例如,引擎所使用的编程语言可以是JavaScript,则脚本字符串可以为使用JavaScript语言编写的字符串,又例如,引擎所使用的编程语言可以是PHP,则脚本字符串可以为使用PHP语言编写的字符串。

界面代码可以是从执行主体从预设存储介质中读取得到的,也可以是执行主体以外的其他设备发送至执行主体的。示例性的,以执行主体为用户端设备为例,用户端设备可以从预设存储介质,如接入用户端设备的U盘、设置于用户端设备的硬盘等,中读取界面代码,用户端设备也可以是接收服务端设备通过网络发送的界面代码。

脚本字符串所表示的组件可以是一个也可以是多个,并且组件所实现的功能与预设引擎所具有的功能的集合应当包含用于渲染界面代码所描述的界面所需的所有功能,例如,假设预设引擎不具备渲染具有复杂交互和业务逻辑的条目的功能,而界面代码所描述的界面中包含该条目,则组件至少可以实现渲染该条目的功能。又例如,假设预设引擎不具备渲染该条目的能力,而界面代码所描述的界面中不包含该条目,则组件可以不具备实现渲染该条目的功能。

脚本字符串所表示的组件所基于的框架,理论上应当与引擎所基于的框架相同,为方便描述,假设引擎为基于React Native框架的引擎,则脚本字符串可以是用于表示基于React Native框架编写的组件。脚本字符串可以是通过React Native的打包工具生成的精简版JavaScript代码并通过字符转义得到的,从而使得脚本字符串能够被包含在一个双引号中而不会产生JSON语法错误。

在S102中,可以是从界面代码中解析脚本字符串,并执行解析得到的脚本字符串。示例性的,可以是调用eval函数执行脚本字符串,在其他可能的实施例中也可以是调用其他具备执行脚本字符串能力的函数执行脚本字符串。

执行脚本字符串将在用于渲染界面的预设引擎中加载脚本字符串所表示的组件。组件可以是由一个或多个功能函数组成的,引擎在渲染界面时可以通过调用这些功能函数实现该组件被配置用于实现的功能,示例性的,假设组件被配置用于在界面中渲染特定样式的窗口,并且界面代码所描述的界面中包括该特定样式的窗口,引擎在渲染界面代码所描述的界面时,可以调用组成该组件的函数以渲染该特定样式的窗口。

可以理解的是,在调用一个功能函数之前需要声明该功能函数,而组件是由功能函数组成的,因此在使用一个组件之前需要声明该组件。在一种可能的实施例中,可以在局部对象中声明组件,也可以在全局对象中声明组件。根据声明组件的方式不同,组件的作用域也将不同,但是无论是在局部对象中声明组件还是在全局对象中声明组件,组件的作用域应当包含所要需要调用组件的代码范围。

在一种可能的实施例中,为最大化该脚本字符串所表示的组件的作用域,可以在指定的全局对象中声明该脚本字符串所表示的组件。示例性的,可以如下代码所示:

Module.exports=DemoCard/执行脚本字符串后导出DemoCard组件

global[‘_qyrn_js_card_’]={…global[‘_qyrn_js_card_’],DemoCard}/在全局对象qyrn_js_card中声明组件DemoCard。

在S103中,在渲染界面代码所描述的界面过程中,可以调用脚本字符串所表示的组件,以通过这些组件被配置用于实现的功能渲染得到界面代码所描述的界面。

由于可以通过在界面代码中携带脚本字符串的方式,在界面渲染过程中为预设引擎加载组件,从而使得引擎能够具备这些组件被配置用于实现的功能,即本发明实施例中可以根据实际需求在渲染过程中为引擎动态加载具有不同功能的组件,因此可以不受引擎功能的限制,渲染得到满足不同实际需求的界面。

为更清楚对本发明实施例提供的界面动态渲染方法进行说明,下面将对界面代码进行说明:

在一种可能的实施例中,界面代码中还可以包括嵌套关系,嵌套关系用于表示界面代码所描述的界面中各界面元素之间的嵌套关系。

各界面元素之间的嵌套关系可以视为各界面元素之间的从属关系,示例性的,假设界面元素“窗口1”为界面元素“窗口2”中的一个子窗口,则界面元素“窗口1”嵌套于界面元素“窗口2”。

嵌套关系的表示形式根据应用场景的不同可以不同,示例性的,在一种可能的实施例中,嵌套关系可以是以树型结构的方式表示的,树型结构中每个节点用于表示一个界面元素,树型结构中任一节点所表示的界面元素嵌套于该节点的父节点所表示的界面元素。例如假设树型结构中包括节点A、节点B以及节点C,并且节点A表示界面元素A,节点B表示界面元素B,节点C表示界面元素C,如果树型结构中节点B为节点A的子节点,并且节点C为节点B的子节点,则该树型结构表示界面元素B嵌套于界面元素A,并且界面元素C嵌套于界面元素B。

则在利用加载有组建的预设引擎渲染界面代码所描述的界面时,可以是根据界面代码,确定界面代码所描述的界面中包含的各个界面元素,通过加载有组件的预设引擎按照嵌套信息所表示的嵌套关系建立界面中包含的各个界面元素之间的嵌套关系,得到界面模板。并利用加载有组件的预设引擎将界面中所包含的各个界面元素加载至界面模板,得到界面代码所描述的界面。

可以理解的是,界面模板中仅包含界面元素之间的嵌套关系而并不包含界面元素,因此在得到界面模板后需要利用加载有组件的预设引擎将界面中所包含的各个界面元素加载至界面模板,得到的界面中包含各个界面元素,并且所包含的各个界面元素之间的嵌套关系与界面模板中的关系相同。

选用该实施例,可以通过对象之间的嵌套关系使得界面中的各对象可以根据实际需求进行自由组合,丰富了界面样式,使得开发人员可以根据实际需求灵活的设计界面。

在另一种可能的实施例中,界面代码中还可以包括配置信息,配置信息用于表示已配置界面元素的加载方式,已配置界面元素为各个界面元素中的至少一个界面元素。

在利用加载有组件的预设引擎将界面中包含的各个界面元素加载至界面模板,得到界面代码所描述的界面时,可以针对每个已配置界面元素,按照已配置信息所表示的该已配置界面元素的加载方式加载该已配置界面元素。

针对每个未配置界面元素,按照该未配置界面元素的上级界面元素的加载方式加载该未配置界面元素,其中,未配置界面元素为各个界面元素中不为已配置界面元素的界面元素,上级界面元素为嵌套有该未配置界面元素的界面元素。

其中,已配置界面元素可以是界面代码所描述的界面中的一个界面元素,也可以是该界面中的多个界面元素,并且已配置界面元素可以是界面中的部分元素,也可以是该界面中的所有元素。

该界面的各个元素中不为已配置界面元素的界面元素即为未配置界面元素,示例性的,假设该界面中包含3个界面元素,分别记为界面元素A、界面元素B以及界面元素C,则如果已配置界面元素仅包括界面元素A,则界面元素B以及界面元素C为未配置界面元素。并且,在本发明实施例中,如果一个界面元素未嵌套于其他界面元素,已配置界面元素应当至少包含该界面元素,示例性的,假设界面元素B嵌套于界面元素A,界面元素C嵌套于界面元素B,且界面元素A不嵌套于其他元素,则已配置界面元素中应当至少包括界面元素A。

对于已配置界面元素,由于配置信息已经表示有该已配置界面元素的加载方式,因此可以认为用户希望按照用户配置的的加载方式加载该已配置界面元素,即按照配置信息所表示的该已配置界面元素的加载方式记载该已配置界面元素。

而对于未配置界面元素,由于配置信息未表示该未配置界面元素的加载方式,因此可以认为用户并未为该未配置界面元素配置加载方式,因此可以沿用该未配置界面元素的上级界面元素的加载方式加载该未配置界面元素。

示例性的,假设界面代码所描述的界面中一共包含三个界面元素,分别记为界面元素A、界面元素B以及界面元素C,且界面元素B嵌套于界面元素A,界面元素C嵌套于界面元素B,则在该示例中界面元素A为界面元素B的上级界面元素,界面元素B为界面元素C的上级界面元素。

假设界面元素A、界面元素B为已配置界面元素,界面元素C为未配置界面元素C,并且配置信息所表示的界面元素A的加载方式为加载方式1,配置信息所表示的界面元素B的加载方式为加载方式2。

则按照加载方式1对界面元素A进行加载,并按照加载方式2对界面元素B进行加载,并按照加载方式2对界面元素C进行加载。可以理解的是,由于界面元素A与界面元素B的加载方式不同,因此在一种可能的实施例中,可以是分别加载界面元素A和界面元素B。在另一种可能的实施例中,也可以是按照加载方式1加载界面元素A和界面元素B,再根据加载方式1和加载方式2的不同对界面元素B进行调整,以实现按照加载方式2对界面元素B进行加载。

选用该实施例,可以实现配置信息的继承(如前述界面元素B与界面元素C)和覆盖(如前述界面元素A与界面元素B),并在各界面元素之间灵活地复用加载方式,从而有效减少界面代码的数据量。

本发明实施例提供的界面动态渲染方法中,渲染界面所使用的预设引擎根据应用场景的不同可以不同,示例性的,可以是基于React Native框架的界面渲染引擎。

React Native框架是基于JavaScript语言的框架,由于IOS系统和Android系统提供有JavaScript语言的接口,因此基于React Native框架的预设引擎可以应用于IOS系统和Android系统,而无需针对IOS系统和Android系统分别开发不同的引擎,进一步提高了引擎的适用性,降低了引擎的开发和运维成本。

并且,可以理解的是,在预设引擎中加载脚本字符串所表示的组件可以视为对预设引擎进行了更新,在一些应用场景中,对预设引擎进行更新后需要重新启动引起,以应用对预设引擎的更新,即这些应用场景中对预设引擎更新的方式为冷更新。冷更新由于需要消耗一定时间用于重新启动引擎,因此将导致界面渲染的效率降低。

而如果预设引擎为基于React Native框架的引擎,则由于React Native框架所基于的JavaScript语言不需要编译,是解释执行的,可以在运行时动态加载和执行JS代码,因此基于JavaScript语言和React Native框架开发的预设引擎可以热更新,在其他可能的实施例中,预设引擎在加载。热更新的原理可以参见图2,图2所示为本发明实施例提供的热更新方法的一种流程示意图,可以包括:

S201,应用程序启动。

该应用程序为需要进行界面渲染的应用程序,并且应用程序根据应用场景的不同可以是指不同的应用程序,如用于观看视频的应用程序,用于阅读书籍的应用程序等。

S202,应用程序向接口服务器请求热更新接口。

S203,接口服务器向应用程序发送RN Patch列表。

其中,RN Patch列表中包括一个或多个RN Patch,每个RN Patch为对引擎的部分代码进行打包得到的数据包。并且,每个RN Patch对应有版本号,用于表示该RN Patch中所包含的代码所属引擎的引擎版本。

S204,应用程序根据RN Patch列表和应用程序已经加载的预设引擎,确定需要更新的RN Patch。

可以是根据应用程序中已经加载的预设引擎的版本和RN Patch列表中各个RNPatch对应的版本号,从RN Patch列表中筛除对应的版本号与应用程序中已经加载的预设引擎的版本一致的RN Patch列表,将剩余的RN Patch作为需要更新的RN Patch。

S205,应用程序从内容分发网络下载需要更新的RN Patch。

在一种可能的实施例中,为降低下载所花费的时间,应用程序可以是多线程并行下载需要更新的RN Patch。

S206,内容分发网络向应用程序返回需要更新的RN Patch。

可以理解的是,图2所示仅为本发明实施例提供的引擎热更新方法的一种流程示意图,在其他可能的实施例中,需要更新的RN Patch也可以不是存储在内容分发网络中的,本实施例对此不做限制。

S207,应用程序对内容分发网络返回的RN Patch进行签名校验,如果通过签名校验,执行S209,如果签名校验未通过,执行S208。

签名可以是在发布到内容分发网络前用前面所述的接口服务器的第一密钥加密RN Patch的摘要得到的,应用程序可以利用应用程序本地的第二密钥对RN Patch的摘要进行加密,如果加密得到的密文与RN Patch的签名一致,则确认RN Patch通过签名校验,如果加密得到的密文与RN Patch的签名不一致,则确认RN Patch未通过签名校验。第一密钥和第二密钥是相同的密钥,也可以是一对非对称式的密钥中的两个密钥。

S208,应用程序删除该RN Patch。

如果RN Patch未通过签名校验,则可以认为RN Patch的安全性较低,因此可以删除该RN Patch。

S209,应用程序将RN Patch解压缩至应用程序的临时目录

在该实施例中,为保证解压得到完整的文件,可以首先将RN Patch解压至预设的临时目录。

S210,应用程序将解压缩的RN Patch从临时目录转移至最终目录。

可以是在确定已经完整解压RN Patch后,将临时目录中解压得到的文件转移至最终目录,从而确保最终目录中具有完整的文件。

S211,应用程序将各业务方面最近jsbundle版本对应关系持久化保存在用户首选项里。

持久化保存该对应关系,可以使得在再次启动检查更新时,可以根据该对应关系从用户首选项中方便快速的查询本地缓存的jsbundle版本,以判断是否需要更新。

选用该实施例,可以实现预设引擎的热更新,使得消耗时间重新启动引擎,从而可以有效提高界面渲染效率。

在一些应用场景中,一个应用程序可以用于实现多种不同的业务,因此该应用程序中的预设引擎承担了多种不同的业务,例如可以参见图3,图3所示为本发明实施例提供的预设引擎的系统架构示意图,由图3可见预设引擎承担了专题页业务、频道页业务、播单页业务等多种业务。

不同业务的实现之间可能相互依赖,例如专题页业务的实现可能依赖于频道页业务的实现,则如果需要对频道页业务的实现方式进行更改,则需要适应性修改专题页业务的实现方式,即对多个业务中的一个业务的实现方式进行更改,则可能需要适应性的修改其他业务的实现方式,导致难以对特定的业务的实现方式进行定制化更改。

基于此,在一种可能的实施例中,预设引擎中各业务的实现可以被注入到全局对象中,示例性的,在一种可能的实施例中,预设引擎可以将核心类抽象为Page、Item、Element、Component和Service5个类别,每个类别下面允许注册一个或多个实现,并给出一个唯一的名字,预设引擎启动时将各业务所需的实现注入到一个全局可引用的对象中,这些实现之间相互引用需通过该全局可引用的对象以及实现的名字来获取,因此各个类之间实现了解耦合,并且每个类别下的具体实现类都可以被复用、替换或者剪裁。

选用该实施例,一方面实现了各业务之间的解耦合,可以使得开发人员能够根据实际需求对特定业务进行高度的定制化更改,另一方面可以使得各个业务之间重复复用代码,降低预设引擎的数据量。

参见图4,图4所示为本发明实施例提供的界面动态渲染装置的一种结构示意图,可以包括:

数据获取模块401,用于获取界面代码,所述界面代码用于描述界面;

脚本执行模块402,用于若界面代码中包含脚本字符串,则执行所述脚本字符串,以在用于渲染界面的预设引擎中加载所述脚本字符串所表示的组件,得到加载有所述组件的预设引擎,其中,所述脚本字符串用于表示实现指定功能的组件;

界面渲染模块403,用于利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面。

在一种可能的实施例中,所述界面代码中包含嵌套信息,所述嵌套信息用于表示所述界面代码所描述的界面中各对象之间的嵌套关系;

所述界面渲染模块403利用所述更新引擎渲染所述界面代码所描述的界面,包括:

根据所述界面代码,确定所述界面代码所描述的界面中包含的各个界面元素;

通过加载有所述组件的预设引擎按照所述嵌套信息所表示的嵌套关系建立所述界面中包含的各个界面元素之间的嵌套关系,得到界面模板;

利用加载有所述组件的预设引擎将所述界面中包含的各个界面元素加载至所述界面模板,得到所述界面代码所描述的界面。

在一种可能的实施例中,所述界面代码中包含配置信息,所述配置信息用于表示所述各个界面元素中的已配置界面元素的加载方式,所述已配置界面元素为所述各个界面元素中的至少一个界面元素;

所述界面渲染模块403利用加载有所述组件的预设引擎将所述界面中包含的各个界面元素加载至所述界面模板,得到所述界面代码所描述的界面,包括:

针对每个已配置界面元素,,按照所述配置信息所表示的该已配置界面元素的加载方式加载该已配置界面元素;

针对每个未配置界面元素,按照该未配置界面元素的上级界面元素的加载方式加载该未配置界面元素,其中,所述未配置界面元素为所述各个界面元素中不为已配置界面元素的界面元素,所述上级界面元素为嵌套有该未配置界面元素的界面元素。

在一种可能的实施例中,所述装置还包括热更新模块,用于对预设引擎进行热更新;

所述利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面,包括:

利用加载有所述组件的经过热更新的所述预设引擎渲染所述界面代码所描述的界面。

在一种可能的实施例中,所述脚本字符串中声明的对象在所述加载有所述组件的预设引擎中被声明为全局对象。

本发明实施例还提供了一种电子设备,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,

存储器503,用于存放计算机程序;

处理器501,用于执行存储器503上所存放的程序时,实现如下步骤:

获取界面代码,所述界面代码用于描述界面;若界面代码中包含脚本字符串,则执行所述脚本字符串,以在用于渲染界面的预设引擎中加载所述脚本字符串所表示的组件,得到加载有所述组件的预设引擎,其中,所述脚本字符串用于表示实现指定功能的组件;利用加载有所述组件的预设引擎渲染所述界面代码所描述的界面。

上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述终端与其他设备之间的通信。

存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中任一所述的界面动态渲染方法。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的界面动态渲染方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质以及计算机程序产品的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

17页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:视频分类方法、装置、电子设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!