CN113849248B - 小程序加载方法、设备、存储介质及程序产品 - Google Patents

小程序加载方法、设备、存储介质及程序产品 Download PDF

Info

Publication number
CN113849248B
CN113849248B CN202111141250.3A CN202111141250A CN113849248B CN 113849248 B CN113849248 B CN 113849248B CN 202111141250 A CN202111141250 A CN 202111141250A CN 113849248 B CN113849248 B CN 113849248B
Authority
CN
China
Prior art keywords
subcontracting
page
code data
target
data
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.)
Active
Application number
CN202111141250.3A
Other languages
English (en)
Other versions
CN113849248A (zh
Inventor
张俊峰
王明鑫
李松
杜广东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Zhenshi Information Technology Co Ltd
Original Assignee
Beijing Jingdong Zhenshi Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Zhenshi Information Technology Co Ltd filed Critical Beijing Jingdong Zhenshi Information Technology Co Ltd
Priority to CN202111141250.3A priority Critical patent/CN113849248B/zh
Publication of CN113849248A publication Critical patent/CN113849248A/zh
Application granted granted Critical
Publication of CN113849248B publication Critical patent/CN113849248B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Abstract

本申请实施例提供一种小程序加载方法、设备、存储介质及程序产品,通过从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中;响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。本申请实施例不需要以分包形式加载小程序,而是通过请求分包代码数据,动态进行编译和执行,不受到小程序平台对分包大小的限制,避免了分包大小超限对小程序发布的影响以及对用户体验的影响。

Description

小程序加载方法、设备、存储介质及程序产品
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种小程序加载方法、设备、存储介质及程序产品。
背景技术
在多端小程序应用中,程序代码包往往分为主包和分包。而各小程序平台从小程序的产品定位以及用户体验出发,对小程序应用的主包和分包大小进行了限制,例如微信小程序主包大小限制为2M,分包大小限制为8M。
随着应用需求迭代,程序代码体积越来越大,程序代码经构建打包后的小程序应用也越来越大。导致包大小超过小程序平台的包大小限制值,而包大小超限后会严重影响小程序应用的发布,影响用户体验,造成用户流失。
发明内容
本申请实施例提供一种小程序加载方法、设备、存储介质及程序产品,用以解决小程序分包大小超限的问题。
第一方面,本申请实施例提供一种小程序加载方法,应用于终端设备,所述方法包括:
从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中;
响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。
第二方面,本申请实施例提供一种小程序加载方法,应用于服务器,所述方法包括:
接收终端设备发送的对小程序至少一个页面对应的分包代码数据的获取请求;
根据所述获取请求获取所述至少一个页面对应的分包代码数据,并发送给所述终端设备,以使所述终端设备将至少一个页面对应的分包代码数据持久化到缓存中,并响应任一目标页面进入指令从所述缓存中获取所述目标页面对应的目标分包数据代码进行代码加载。
第三方面,本申请实施例提供一种小程序加载装置,应用于终端设备,所述装置包括:
获取模块,用于从服务器获取小程序至少一个页面对应的分包代码数据;
持久化模块,用于将至少一个页面对应的分包代码数据持久化到缓存中;
加载模块,用于响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。
第四方面,本申请实施例提供一种小程序加载装置,应用于服务器,所述装置包括:
接收模块,用于接收终端设备发送的对小程序至少一个页面对应的分包代码数据的获取请求;
发送模块,用于根据所述获取请求获取所述至少一个页面对应的分包代码数据,并发送给所述终端设备,以使所述终端设备将至少一个页面对应的分包代码数据持久化到缓存中,并响应任一目标页面进入指令从所述缓存中获取所述目标页面对应的目标分包数据代码进行代码加载。
第五方面,本申请实施例提供一种电子设备,包括:至少一个处理器;以及存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面所述的方法。
第六方面,本申请实施例提供一种电子设备,包括:至少一个处理器;以及存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第二方面所述的方法。
第七方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面或第二方面所述的方法。
第八方面,本申请实施例提供一种计算机程序产品,包括计算机指令,该计算机指令被处理器执行时实现如第一方面或第二方面所述的方法。
本申请实施例提供的小程序加载方法、设备、存储介质及程序产品,通过从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中;响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。本申请实施例不需要以分包形式加载小程序,而是通过请求分包代码数据,动态进行编译和执行,不受到小程序平台对分包大小的限制,避免了分包大小超限对小程序发布的影响以及对用户体验的影响。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请一实施例提供的小程序加载方法应用场景图;
图2为本申请一实施例提供的小程序加载方法的流程图;
图3为本申请另一实施例提供的小程序加载方法的流程图;
图4为本申请另一实施例提供的小程序加载方法的流程图;
图5为本申请另一实施例提供的小程序加载方法的流程图;
图6为本申请一实施例提供的小程序加载装置的结构图;
图7为本申请另一实施例提供的小程序加载装置的结构图;
图8为本申请一实施例提供的电子设备的结构图;
图9为本申请另一实施例提供的电子设备的结构图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在多端小程序应用中,程序代码包往往分为主包和分包。而各小程序平台从小程序的产品定位以及用户体验出发,对小程序应用的主包和分包大小进行了限制,例如微信小程序主包大小限制为2M,分包大小限制为8M。
随着应用需求迭代,程序代码体积越来越大,程序代码经构建打包后的小程序应用也越来越大。虽然通过webpack等打包工具可以临时减少部分代码体积,但也绕不过小程序平台对包大小的限制,应用长期迭代还会使得包大小超限,而包大小超限后会严重影响小程序应用的发布,影响用户体验,造成用户流失。
为了解决上述技术问题,本申请实施例中不对分包代码数据进行构建打包,从而使得分包代码数据并不采用现有技术中分包的形式,从而也不受到小程序平台对分包大小的限制,而分包代码数据由服务器发送给终端设备后终端设备将分包代码数据持久化到缓存中,在需要进入某一页面后从缓存获取分包代码数据进行动态执行。
本申请实施例的小程序加载方法具体应用于如图1所示的应用场景,包括终端设备101以及服务器102,服务器102可以向终端设备101提供小程序的至少一个页面对应的分包代码数据,以供终端设备101动态执行。可选的,终端设备101可以向服务器102发送分包代码数据的获取请求,服务器102向终端设备101返回小程序的至少一个页面对应的分包代码数据,终端设备101将至少一个页面对应的分包代码数据持久化到缓存中,并且响应于对至少一个页面中的任一目标页面进入指令,从缓存中获取目标页面对应的目标分包数据代码,并对目标分包代码数据进行代码加载。其中,终端设备可不限于智能手机、平板电脑、可穿戴设备等,服务器可以是一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2为本申请实施例提供的小程序加载方法流程图。本实施例提供了一种小程序加载方法,其执行主体为终端设备,该小程序加载方法具体步骤如下:
S201、从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中。
在本实施例中,服务器中预先存储有小程序至少一个页面对应的分包代码数据,其中,任一分包代码数据为未经过编译构建的程序代码段,可以通过数据包或者报文等方式进行传输,不需要编译构建后再打包为分包,因此分包代码数据无需受到小程序平台对分包大小的限制。
其中,分包代码数据可以由小程序的开发者进行编写,并通过开发者终端上传到服务器。其中,在编写分包代码数据时,可以先创建页面-分包代码数据之间的映射关系,可选的,小程序的一个页面对应一个分包代码数据,开发者可根据页面来编写分包代码数据,其中,每个页面配置有路由信息,因此开发者可根据路由信息来编写页面对应的分包代码数据;开发者还可创建分包代码数据与版本信息的映射关系,以便于进行版本更新。在此基础上,开发者可将至少一个页面对应的分包代码数据、以及所述分包代码数据与页面和版本信息的映射关系上传服务器,以便于服务器根据分包代码数据与页面和版本信息的映射关系向终端设备发送小程序至少一个页面对应的分包代码数据。可选的,可以采用Taro开放式跨端跨框架解决方案,支持使用React/Vue/Nerv等框架来开发小程序多端应用,而每一应用可能具有不同的页面,相应的,配置该页面对应的分包代码数据即可。
而在从服务器获取到小程序至少一个页面对应的分包代码数据后,则可将至少一个页面对应的分包代码数据持久化到缓存中,以便于后续进入页面后从缓存中查找对应的分包代码数据进行执行。
可选的,本实施例中终端设备从服务器获取小程序至少一个页面对应的分包代码数据,具体可包括:
可选方式一:响应于小程序启动指令,向所述服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求,并接收所述服务器根据所述第一获取请求发送的至少一个页面对应的分包代码数据,将至少一个页面对应的分包代码数据持久化到缓存;或者
可选方式二:响应于对至少一个页面中的任一目标页面进入指令,向所述服务器发送对目标页面对应的分包代码数据的第二获取请求,并接收所述服务器根据所述第二获取请求发送的目标页面对应的分包代码数据,将目标页面对应的分包代码数据持久化到缓存。
在可选方式一中,当小程序启动时,可向服务器请求小程序至少一个页面对应的分包代码数据,进而服务器返回小程序至少一个页面对应的分包代码数据。可选的,可以在小程序的onLaunch生命周期中向服务器请求小程序至少一个页面对应的分包代码数据,也即响应于小程序启动指令,在小程序的onLaunch生命周期中,向服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求。
在可选方式二中,可以在小程序进入某一个目标页面时,针对性的向服务器请求该目标页面对应的分包代码数据;或者在小程序进入某一个目标页面后在检测到缓存中不存在该目标页面对应的分包代码数据,也可向服务器请求该目标页面对应的分包代码数据。
可选的,其中第一获取请求和第二获取请求可以为Http请求。
S202、响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。
在本实施例中,在接收到对目标页面进入指令后,可以从缓存中获取目标页面对应的目标分包数据代码,可选的,可通过Taro.getStorageSync API从缓存中获取目标页面对应的目标分包数据代码。
可选的,可校验缓存中是否存在目标页面对应的目标分包数据代码,若存在,则获取目标分包数据代码,并进行后续的代码加载;若不存在,则可向服务器请求目标分包数据代码,并进行代码加载以及持久化,或者也可不向服务器请求目标分包数据代码,而是直接结束或者返回错误信息等。
在获取到目标页面对应的目标分包数据代码后,则可进行代码加载。由于目标分包数据代码未经过分包的编译构建过程,因此本实施例中需要在进入目标页面后对目标分包代码数据的字符串进行编译过程,将目标分包代码数据的字符串转换成能够执行的指令,进而进行执行实现对目标页面的渲染。具体的,如图3所示,所述对所述目标分包代码数据进行代码加载,可以包括:
S301、对所述目标分包代码数据的字符串进行词法分析,获取字符串中单词及对应的类型标识;
S302、根据字符串中单词及对应的类型标识进行语法解析,获取目标分包代码数据对应的抽象语法树AST;
S303、通过JavaScript解释器遍历AST节点,根据AST节点执行对应操作。
在本实施例中,获取目标分包代码数据的字符串,先对字符串进行词法分析,得到字符串中的单词以及对应的类型标识(token),然后基于token进行语法解析,转换得到AST(Abstract Syntax Tree,抽象语法树),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码,AST的每个节点都表示源代码中的一种结构;进一步可将AST输入JavaScript解释器进行处理,其中JavaScript解释器是一种计算器程序,能够把JavaScript编程语言一行一行直接转译运行,具体的,通过JavaScript解释器遍历AST节点,根据AST节点执行对应操作,实现分包代码数据的运行。
可选的,本实施例中可引入工具库js-interpreter,通过js-interpreter的apiInterpreter.evaluate()方法,执行AST不同节点的代码,即执行分包代码数据,实现了小程序的分包代码加载。
本实施例提供的小程序加载方法,通过从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中;响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。本实施例不需要以分包形式加载小程序,而是通过请求分包代码数据,动态进行编译和执行,不受到小程序平台对分包大小的限制,避免了分包大小超限对小程序发布的影响以及对用户体验的影响。
在上述任一实施例的基础上,如图4所述将至少一个页面对应的分包代码数据持久化到缓存中,包括:
S401、对于任一页面对应的分包代码数据,根据该分包代码数据的路由信息以及版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据;
S402、若确定该分包代码数据为该页面的最新版本的分包代码数据,则将该分包代码数据持久化到所述缓存。
在本实施例中,在将任一页面对应的待持久化的分包代码数据持久化到缓存的过程中,可以先判断该待持久化的分包代码数据是否是该页面最新版本的分包代码数据,如果是最新版本的分包代码数据才将其持久化到缓存中,如果不是,则说明缓存中该页面对应的已缓存的分包代码数据版本较新,因此不需要将再将待持久化的分包代码数据进行持久化。
可选的,S401所述根据该分包代码数据的路由信息以及版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据,具体可包括:
根据路由信息查找该页面当前缓存的第二分包代码数据;
若查找到第二分包代码数据,则对比该分包代码数据与第二分包代码数据的版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据;或者
若未查找到第二分包代码数据,则确定该分包代码数据为该页面的最新版本的分包代码数据。
在本实施例中,首先在缓存中根据路由信息查找该页面当前是否存在已缓存的第二分包代码数据,具体的可通过Taro.getStorageSync API从缓存中查找该页面是否存在已缓存的第二分包代码数据,如果在缓存中根据路由信息查找到该页面存在已缓存的第二分包代码数据,则比较该已缓存的第二分包代码数据和待缓存的分包代码数据的版本信息,若待缓存的分包代码数据的版本较新,则说明待缓存的分包代码数据为最新版本的分包代码数据,可将待缓存的分包代码数据覆盖已缓存的第二分包代码数据;若已缓存的第二分包代码数据的版本较新,则说明待缓存的分包代码数据不是最新版本的分包代码数据,则保留第二分包代码数据,忽略待缓存的分包代码数据;
此外,如果在缓存中根据路由信息查找到该页面不存在已缓存的第二分包代码数据,则说明该页面可能是新功能、或以前未加载过的页面,将待缓存的分包代码数据确定为最新版本的分包代码数据,持久化到缓存中,具体的,可根据待缓存的分包代码数据的路由信息在缓存中确定目标存储位置,并将分包代码数据持久化到目标存储位置。本实施例中可找出要更新的分区后,按页面维度归类代码段,最后通过Taro.setStorageSync API进行代分包码数据持久化。
也即综上,所述将该分包代码数据持久化到所述缓存,可以包括:
将该分包代码数据覆盖所述第二分包代码数据;或者
根据所述分包代码数据的路由信息在所述缓存中确定目标存储位置,并将所述分包代码数据持久化到所述目标存储位置。
通过上述的分包代码数据持久化到缓存,可以在进入页面时无需再次向服务器请求对应的分包代码数据,提高了进入页面、并加载运行实现页面渲染过程的速度。
在上述任一实施例的基础上,所述方法还包括:
接收所述服务器发送的主包和/或分包,对所述主包和/或分包进行加载。
在本实施例中,通过分包代码数据加载小程序的方案可以和现有的通过主包和/或分包加载小程序的方法相互结合,也即如果接收到服务器发送的主包和/或分包,则通过接收到的主包和/或分包进行小程序页面加载,若接收到服务器发送的分包代码数据,则通过上述实施例中的通过分包代码数据加载小程序的方式进行小程序页面的加载。本实施例可实现在不改变当前已存在的小程序主包和/或分包的加载方式的基础上,在需要对小程序进行需求迭代时新的需求可通过分包代码数据实现,为开发人员提供了便利。
图5为本申请实施例提供的小程序加载方法流程图。本实施例提供了一种小程序加载方法,其执行主体为服务器,该小程序加载方法具体步骤如下:
S501、接收终端设备发送的对小程序至少一个页面对应的分包代码数据的获取请求;
S502、根据所述获取请求获取所述至少一个页面对应的分包代码数据,并发送给所述终端设备,以使所述终端设备将至少一个页面对应的分包代码数据持久化到缓存中,并响应任一目标页面进入指令从所述缓存中获取所述目标页面对应的目标分包数据代码进行代码加载。
本实施例为上述实施例对应的服务器侧的方法实施例,其具体实现原理和技术效果可参见上述实施例,此处不再赘述。
在上述实施例的基础上,所述方法还包括:
接收开发者终端上传的至少一个页面对应的分包代码数据、以及所述分包代码数据与页面和版本信息的映射关系。
在本实施例中,小程序的开发者可以在编写分包代码数据时,可以先创建页面-分包代码数据之间的映射关系,可选的,小程序的一个页面对应一个分包代码数据,开发者可根据页面来编写分包代码数据,其中,每个页面配置有路由信息,因此开发者可根据路由信息来编写页面对应的分包代码数据;开发者还可创建分包代码数据与版本信息的映射关系,以便于进行版本更新。在此基础上,开发者可将至少一个页面对应的分包代码数据、以及所述分包代码数据与页面和版本信息的映射关系上传服务器,以便于服务器根据分包代码数据与页面和版本信息的映射关系向终端设备发送小程序至少一个页面对应的分包代码数据。
图6为本申请实施例小程序加载装置的结构图。本实施例提供的小程序加载装置可以执行终端设备侧的方法实施例提供的处理流程,如图5所示,所述小程序加载装置600包括获取模块601、持久化模块602及加载模块603。
获取模块601,用于从服务器获取小程序至少一个页面对应的分包代码数据;
持久化模块602,用于将至少一个页面对应的分包代码数据持久化到缓存中;
加载模块603,用于响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。
在上述任一实施例的基础上,所述获取模块601在从服务器获取小程序至少一个页面对应的分包代码数据时,用于:
响应于小程序启动指令,向所述服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求,并接收所述服务器根据所述第一获取请求发送的至少一个页面对应的分包代码数据,将至少一个页面对应的分包代码数据持久化到缓存;或者
响应于对至少一个页面中的任一目标页面进入指令,向所述服务器发送对目标页面对应的分包代码数据的第二获取请求,并接收所述服务器根据所述第二获取请求发送的目标页面对应的分包代码数据,将目标页面对应的分包代码数据持久化到缓存。
在上述任一实施例的基础上,所述获取模块601在响应于小程序启动指令,向服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求时,用于:
响应于小程序启动指令,在小程序的onLaunch生命周期中,向服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求。
在上述任一实施例的基础上,所述持久化模块602在将至少一个页面对应的分包代码数据持久化到缓存中时,用于:
对于任一页面对应的分包代码数据,根据该分包代码数据的路由信息以及版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据;
若确定该分包代码数据为该页面的最新版本的分包代码数据,则将该分包代码数据持久化到所述缓存。
在上述任一实施例的基础上,所述持久化模块602在根据该分包代码数据的路由信息以及版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据时,用于:
根据路由信息查找该页面当前缓存的第二分包代码数据;
若查找到第二分包代码数据,则对比该分包代码数据与第二分包代码数据的版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据;或者
若未查找到第二分包代码数据,则确定该分包代码数据为该页面的最新版本的分包代码数据。
在上述任一实施例的基础上,所述持久化模块602在将该分包代码数据持久化到所述缓存时,用于:
将该分包代码数据覆盖所述第二分包代码数据;或者
根据所述分包代码数据的路由信息在所述缓存中确定目标存储位置,并将所述分包代码数据持久化到所述目标存储位置。
在上述任一实施例的基础上,所述加载模块603在对所述目标分包代码数据进行代码加载时,用于:
对所述目标分包代码数据的字符串进行词法分析,获取字符串中单词及对应的类型标识;
根据字符串中单词及对应的类型标识进行语法解析,获取目标分包代码数据对应的抽象语法树AST;
通过JavaScript解释器遍历AST节点,根据AST节点执行对应操作。
在上述任一实施例的基础上,所述方法还包括:
所述获取模块601还用于,接收所述服务器发送的主包和/或分包;
所述加载模块603还用于,对所述主包和/或分包进行加载。
本申请实施例提供的小程序加载装置可以具体用于执行上述图2-4所提供的终端设备侧的方法实施例,具体功能此处不再赘述。
本申请实施例提供的小程序加载装置,通过从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中;响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。本实施例不需要以分包形式加载小程序,而是通过请求分包代码数据,动态进行编译和执行,不受到小程序平台对分包大小的限制,避免了分包大小超限对小程序发布的影响以及对用户体验的影响。
图7为本申请实施例小程序加载装置的结构图。本实施例提供的小程序加载装置可以执行服务器侧的方法实施例提供的处理流程,如图7所示,所述小程序加载装置700包括接收模块701、发送模块702。
接收模块701,用于接收终端设备发送的对小程序至少一个页面对应的分包代码数据的获取请求;
发送模块702,用于根据所述获取请求获取所述至少一个页面对应的分包代码数据,并发送给所述终端设备,以使所述终端设备将至少一个页面对应的分包代码数据持久化到缓存中,并响应任一目标页面进入指令从所述缓存中获取所述目标页面对应的目标分包数据代码进行代码加载。
在上述任一实施例的基础上,所述接收模块701还用于,接收开发者终端上传的至少一个页面对应的分包代码数据、以及所述分包代码数据与页面和版本信息的映射关系。
本申请实施例提供的小程序加载装置可以具体用于执行上述图5所提供的服务器侧的方法实施例,具体功能此处不再赘述。
本申请实施例提供的小程序加载装置,通过从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中;响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据进行代码加载。本实施例不需要以分包形式加载小程序,而是通过请求分包代码数据,动态进行编译和执行,不受到小程序平台对分包大小的限制,避免了分包大小超限对小程序发布的影响以及对用户体验的影响。
图8为本申请实施例提供的电子设备的结构示意图。本申请实施例提供的电子设备可以执行终端设备侧的小程序加载方法实施例提供的处理流程,如图8所示,电子设备800包括存储器801、处理器802、计算机程序;其中,计算机程序存储在存储器801中,并被配置为由处理器802执行以上实施例所述的终端设备侧的小程序加载方法。此外,电子设备800还可具有通讯接口803,用于传输控制指令和/或数据。
图8所示实施例的电子设备可用于执行上述终端设备侧的小程序加载方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本申请实施例提供的电子设备的结构示意图。本申请实施例提供的电子设备可以执行服务器侧的小程序加载方法实施例提供的处理流程,如图9所示,电子设备900包括存储器901、处理器902、计算机程序;其中,计算机程序存储在存储器901中,并被配置为由处理器902执行以上实施例所述的服务器侧的小程序加载方法。此外,电子设备900还可具有通讯接口903,用于传输控制指令和/或数据。
图9所示实施例的电子设备可用于执行上述服务器侧的小程序加载方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
另外,本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的终端设备侧的小程序加载方法。
另外,本实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的服务器侧的小程序加载方法。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请实施例各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上各实施例仅用以说明本申请实施例的技术方案,而非对其限制;尽管参照前述各实施例对本申请实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请实施例各实施例技术方案的范围。本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。

Claims (14)

1.一种小程序加载方法,其特征在于,应用于终端设备,所述方法包括:
从服务器获取小程序至少一个页面对应的分包代码数据,并将至少一个页面对应的分包代码数据持久化到缓存中;
响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据的字符串进行词法分析,获取字符串中单词及对应的类型标识;根据字符串中单词及对应的类型标识进行语法解析,获取目标分包代码数据对应的抽象语法树AST;通过JavaScript解释器遍历AST节点,根据AST节点执行对应操作。
2.根据权利要求1所述的方法,其特征在于,所述从服务器获取小程序至少一个页面对应的分包代码数据,包括:
响应于小程序启动指令,向所述服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求,并接收所述服务器根据所述第一获取请求发送的至少一个页面对应的分包代码数据,将至少一个页面对应的分包代码数据持久化到缓存;或者
响应于对至少一个页面中的任一目标页面进入指令,向所述服务器发送对目标页面对应的分包代码数据的第二获取请求,并接收所述服务器根据所述第二获取请求发送的目标页面对应的分包代码数据,将目标页面对应的分包代码数据持久化到缓存。
3.根据权利要求2所述的方法,其特征在于,所述响应于小程序启动指令,向服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求,包括:
响应于小程序启动指令,在小程序的onLaunch生命周期中,向服务器发送对小程序至少一个页面对应的分包代码数据的第一获取请求。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述将至少一个页面对应的分包代码数据持久化到缓存中,包括:
对于任一页面对应的分包代码数据,根据该分包代码数据的路由信息以及版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据;
若确定该分包代码数据为该页面的最新版本的分包代码数据,则将该分包代码数据持久化到所述缓存。
5.根据权利要求2所述的方法,其特征在于,所述根据该分包代码数据的路由信息以及版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据,包括:
根据路由信息查找该页面当前缓存的第二分包代码数据;
若查找到第二分包代码数据,则对比该分包代码数据与第二分包代码数据的版本信息,判断该分包代码数据是否为该页面的最新版本的分包代码数据;或者
若未查找到第二分包代码数据,则确定该分包代码数据为该页面的最新版本的分包代码数据。
6.根据权利要求5所述的方法,其特征在于,所述将该分包代码数据持久化到所述缓存,包括:
将该分包代码数据覆盖所述第二分包代码数据;或者
根据所述分包代码数据的路由信息在所述缓存中确定目标存储位置,并将所述分包代码数据持久化到所述目标存储位置。
7.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
接收所述服务器发送的主包和/或分包,对所述主包和/或分包进行加载。
8.一种小程序加载方法,其特征在于,应用于服务器,所述方法包括:
接收终端设备发送的对小程序至少一个页面对应的分包代码数据的获取请求;
根据所述获取请求获取所述至少一个页面对应的分包代码数据,并发送给所述终端设备,以使所述终端设备将至少一个页面对应的分包代码数据持久化到缓存中,并响应任一目标页面进入指令从所述缓存中获取所述目标页面对应的目标分包数据代码进行代码加载;其中,对所述目标页面对应的目标分包数据代码进行代码加载是通过对所述目标分包代码数据的字符串进行词法分析,获取字符串中单词及对应的类型标识;根据字符串中单词及对应的类型标识进行语法解析,获取目标分包代码数据对应的抽象语法树AST;通过JavaScript解释器遍历AST节点,根据AST节点执行对应操作实现的。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
接收开发者终端上传的至少一个页面对应的分包代码数据、以及所述分包代码数据与页面和版本信息的映射关系。
10.一种小程序加载装置,其特征在于,应用于终端设备,所述装置包括:
获取模块,用于从服务器获取小程序至少一个页面对应的分包代码数据;
持久化模块,用于将至少一个页面对应的分包代码数据持久化到缓存中;
加载模块,用于响应于对至少一个页面中的任一目标页面进入指令,从所述缓存中获取所述目标页面对应的目标分包数据代码,并对所述目标分包代码数据的字符串进行词法分析,获取字符串中单词及对应的类型标识;根据字符串中单词及对应的类型标识进行语法解析,获取目标分包代码数据对应的抽象语法树AST;通过JavaScript解释器遍历AST节点,根据AST节点执行对应操作。
11.一种小程序加载装置,其特征在于,应用于服务器,所述装置包括:
接收模块,用于接收终端设备发送的对小程序至少一个页面对应的分包代码数据的获取请求;
发送模块,用于根据所述获取请求获取所述至少一个页面对应的分包代码数据,并发送给所述终端设备,以使所述终端设备将至少一个页面对应的分包代码数据持久化到缓存中,并响应任一目标页面进入指令从所述缓存中获取所述目标页面对应的目标分包数据代码进行代码加载;其中,对所述目标页面对应的目标分包数据代码进行代码加载是通过对所述目标分包代码数据的字符串进行词法分析,获取字符串中单词及对应的类型标识;根据字符串中单词及对应的类型标识进行语法解析,获取目标分包代码数据对应的抽象语法树AST;通过JavaScript解释器遍历AST节点,根据AST节点执行对应操作实现的。
12.一种电子设备,其特征在于,包括:至少一个处理器;以及存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1-7任一项所述的方法。
13.一种电子设备,其特征在于,包括:至少一个处理器;以及存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求8-9任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1-7或8-9任一项所述的方法。
CN202111141250.3A 2021-09-28 2021-09-28 小程序加载方法、设备、存储介质及程序产品 Active CN113849248B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111141250.3A CN113849248B (zh) 2021-09-28 2021-09-28 小程序加载方法、设备、存储介质及程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111141250.3A CN113849248B (zh) 2021-09-28 2021-09-28 小程序加载方法、设备、存储介质及程序产品

Publications (2)

Publication Number Publication Date
CN113849248A CN113849248A (zh) 2021-12-28
CN113849248B true CN113849248B (zh) 2023-09-26

Family

ID=78980738

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111141250.3A Active CN113849248B (zh) 2021-09-28 2021-09-28 小程序加载方法、设备、存储介质及程序产品

Country Status (1)

Country Link
CN (1) CN113849248B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6636863B1 (en) * 1999-09-13 2003-10-21 E. Lane Friesen System and method for generating persistence on the web
CN106502646A (zh) * 2016-09-23 2017-03-15 北京五八信息技术有限公司 应用的页面信息处理方法及装置
CN110187931A (zh) * 2019-05-17 2019-08-30 北京百度网讯科技有限公司 小程序的运行方法及装置
WO2020007146A1 (zh) * 2018-07-05 2020-01-09 腾讯科技(深圳)有限公司 程序的运行方法、装置、计算设备以及存储介质
CN110795731A (zh) * 2019-10-09 2020-02-14 新华三信息安全技术有限公司 一种页面检测方法及装置
CN110928543A (zh) * 2019-11-04 2020-03-27 北京小米移动软件有限公司 页面处理方法、装置及存储介质
WO2020078136A1 (zh) * 2018-10-15 2020-04-23 华为技术有限公司 应用下载和发送的方法、装置及系统
CN111222062A (zh) * 2020-01-09 2020-06-02 百度在线网络技术(北京)有限公司 小程序的运行方法、装置、电子设备和存储介质
CN112052064A (zh) * 2020-09-28 2020-12-08 深圳前海微众银行股份有限公司 小程序页面跳转方法、装置、设备与计算机可读存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6636863B1 (en) * 1999-09-13 2003-10-21 E. Lane Friesen System and method for generating persistence on the web
CN106502646A (zh) * 2016-09-23 2017-03-15 北京五八信息技术有限公司 应用的页面信息处理方法及装置
WO2020007146A1 (zh) * 2018-07-05 2020-01-09 腾讯科技(深圳)有限公司 程序的运行方法、装置、计算设备以及存储介质
WO2020078136A1 (zh) * 2018-10-15 2020-04-23 华为技术有限公司 应用下载和发送的方法、装置及系统
CN110187931A (zh) * 2019-05-17 2019-08-30 北京百度网讯科技有限公司 小程序的运行方法及装置
CN110795731A (zh) * 2019-10-09 2020-02-14 新华三信息安全技术有限公司 一种页面检测方法及装置
CN110928543A (zh) * 2019-11-04 2020-03-27 北京小米移动软件有限公司 页面处理方法、装置及存储介质
CN111222062A (zh) * 2020-01-09 2020-06-02 百度在线网络技术(北京)有限公司 小程序的运行方法、装置、电子设备和存储介质
CN112052064A (zh) * 2020-09-28 2020-12-08 深圳前海微众银行股份有限公司 小程序页面跳转方法、装置、设备与计算机可读存储介质

Also Published As

Publication number Publication date
CN113849248A (zh) 2021-12-28

Similar Documents

Publication Publication Date Title
US9875118B2 (en) Method and embedded device for loading driver
US8104034B2 (en) Purpose domain for in-kernel virtual machine for low overhead startup and low resource usage
US10761867B2 (en) Nested emulation and dynamic linking environment
US8429629B2 (en) In-kernel virtual machine for low overhead startup and low resource usage
CN107885540A (zh) 一种加载应用程序静态资源的方法、装置及终端
US11556348B2 (en) Bootstrapping profile-guided compilation and verification
US20180060048A1 (en) Hybrid Deoptimization Mechanism for Class Hierarchy Analysis
CN111736913B (zh) 类加载方法和装置
CN103412754A (zh) 动态语言代码执行方法和装置
CN106796525A (zh) 按需加载动态脚本语言代码以减少内存使用
US9632804B2 (en) Method, apparatus, and communication system for implementing internet application
CN103338233A (zh) 负载均衡设备、Web服务器及请求信息处理方法和系统
CN113849248B (zh) 小程序加载方法、设备、存储介质及程序产品
CN106484375B (zh) 一种指令块加载方法、软交换设备及系统
CN116909613A (zh) 前端增量更新方法、装置及其应用
KR101092019B1 (ko) 모바일 웹 브라우저를 이용한 웹 브라우징 시스템 및 방법과 이에 사용되는 모바일 단말기
CN113157274B (zh) 基于微前端的软件开发方法、装置、电子设备及存储介质
CN112379885B (zh) 小程序编译方法、装置、设备及可读存储介质
CN113791870A (zh) 一种WebAssembly虚拟机分布式系统细粒度迁移方法及系统
CN112612530B (zh) 类查询方法及装置
CN114764354A (zh) 基于paas的依赖管理方法、装置、电子设备及介质
CN109947407B (zh) 一种数据获取方法及装置
CN115237489A (zh) 页面资源加载方法、装置、电子设备和存储介质
CN115827138A (zh) 一种多语言配置方法、装置、计算机设备及存储介质
CN112612754A (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
GR01 Patent grant
GR01 Patent grant