CN113885967A - 一种小程序的启动方法、装置、设备及介质 - Google Patents

一种小程序的启动方法、装置、设备及介质 Download PDF

Info

Publication number
CN113885967A
CN113885967A CN202111233076.5A CN202111233076A CN113885967A CN 113885967 A CN113885967 A CN 113885967A CN 202111233076 A CN202111233076 A CN 202111233076A CN 113885967 A CN113885967 A CN 113885967A
Authority
CN
China
Prior art keywords
file
target
starting
snapshot
applet
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
Application number
CN202111233076.5A
Other languages
English (en)
Other versions
CN113885967B (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 Zitiao Network Technology Co Ltd
Original Assignee
Beijing Zitiao Network 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 Zitiao Network Technology Co Ltd filed Critical Beijing Zitiao Network Technology Co Ltd
Priority to CN202111233076.5A priority Critical patent/CN113885967B/zh
Publication of CN113885967A publication Critical patent/CN113885967A/zh
Application granted granted Critical
Publication of CN113885967B publication Critical patent/CN113885967B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

本公开实施例涉及一种小程序的启动方法、装置、设备及介质,其中该方法包括:在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件;其中,快照文件包含目标JS文件的二进制流以及目标JS文件的执行结果,目标JS文件包括公共JS文件和业务JS文件;在目标小程序非首次启动时,加载快照文件,并基于快照文件执行非首次启动操作。本公开实施例可以有效缩短小程序的启动耗时,提升小程序的启动速度。

Description

一种小程序的启动方法、装置、设备及介质
技术领域
本公开涉及计算机技术领域,尤其涉及一种小程序的启动方法、装置、设备及介质。
背景技术
小程序是一种无需安装即可使用的应用程序,用户可利用指定应用的搜索功能、扫码功能等启动所需的小程序,并享受该小程序提供的功能服务。然而,现有的小程序启动速度仍旧有待提升。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种小程序的启动方法、装置、设备及介质。
本公开实施例提供了一种小程序的启动方法,所述方法包括:在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件;其中,所述快照文件包含所述目标JS文件的二进制流以及所述目标JS文件的执行结果,所述目标JS文件包括公共JS文件和业务JS文件;在目标小程序非首次启动时,加载所述快照文件,并基于所述快照文件执行非首次启动操作。
可选的,采用标准启动模式执行首次启动操作的步骤,包括:在第一运行环境中采用标准启动模式执行首次启动操作;通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件的步骤,包括:在第二运行环境中通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件。
可选的,在第二运行环境中通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件的步骤,包括:在用于构建所述目标小程序的目标JS文件均首次完成渲染之后,创建第二运行环境;在所述第二运行环境中通过JS引擎生成所述目标JS文件的快照文件。
可选的,创建第二运行环境的步骤,包括:在JS引擎线程处于空闲状态时,创建第二运行环境。
可选的,在第二运行环境中通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件的步骤,包括:在第二运行环境中注入Native函数,并通过JS引擎对用于构建所述目标小程序的目标JS文件进行序列化处理,得到所述目标JS文件的快照文件。
可选的,加载所述快照文件的步骤,包括:通过mmap内存映射方式加载所述快照文件。
可选的,所述基于所述快照文件执行非首次启动操作的步骤,包括:对所述快照文件进行反序列化处理,得到所述目标JS文件的反序列化结果;注入Native函数以及调用所述目标小程序的生命周期;基于所述目标JS文件的反序列化结果进行视图渲染,以完成非首次启动。
可选的,所述方法还包括:在基于所述快照文件执行非首次启动操作的过程中出现异常的情况下,采用所述标准启动模式执行所述非首次启动操作。
可选的,所述方法还包括:在所述快照文件生成失败的情况下,采用所述标准启动模式执行非首次启动操作。
可选的,采用标准启动模式执行首次启动操作的步骤,包括:通过所述JS引擎加载用于构建所述目标小程序的目标JS文件;对所述目标JS文件进行编译、解析及执行操作,得到所述目标JS文件的执行结果;基于所述执行结果进行视图渲染,以完成首次启动。
本公开实施例还提供了一种小程序的启动装置,包括:首次启动模块,用于在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件;其中,所述快照文件包含所述目标JS文件的二进制流以及所述目标JS文件的执行结果,所述目标JS文件包括公共JS文件和业务JS文件;非首次启动模块,用于在目标小程序非首次启动时,加载所述快照文件,并基于所述快照文件执行非首次启动操作。
本公开实施例还提供了一种电子设备,所述电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如本公开实施例提供的小程序的启动方法。
本公开实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行如本公开实施例提供的小程序的启动方法。
本公开实施例提供的上述技术方案,在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件;其中,快照文件包含目标JS文件的二进制流以及目标JS文件的执行结果,目标JS文件包括公共JS文件和业务JS文件;在目标小程序非首次启动时,加载快照文件,并基于快照文件执行非首次启动操作。通过上述方式,在目标小程序首次启动时生成公共JS文件和业务JS文件的快照文件,使得后续可直接基于存储有JS文件执行结果的快照文件进行非首次启动,无需再对JS文件进行编译解析等处理,有助于缩短目标小程序非首次启动时处理JS文件的耗时,从而有效提升小程序启动速度。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种小程序启动文件的结构示意图;
图2为本公开实施例提供的一种小程序的启动方法的流程示意图;
图3为本公开实施例提供的一种标准启动模式的流程示意图;
图4为本公开实施例提供的snapshot生成时机示意图;
图5为本公开实施例提供的一种快照启动模型示意图;
图6为本公开实施例提供的一种小程序启动流程示意图;
图7为本公开实施例提供的一种小程序的启动装置的结构示意图;
图8为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
现有小程序大多难以达到较快的启动速度,发明人经研究发现,主要原因在于小程序在对诸如公共JS文件(也即JSSDK,software development kit,软件开发包)以及业务JS文件(也可称之为业务代码)进行编译、解析直至最后执行这一处理过程耗时较多,无论是首次启动还是非首次启动,现有的小程序在每次启动时所采用的都是标准启动模式,该标准启动模式中需要对公共JS文件和业务JS文件均执行上述处理操作,耗时较长。为改善此问题,本公开实施例提供了一种小程序的启动方法、装置、设备及介质,可以在目标小程序首次启动时生成公共JS文件和业务JS文件的快照文件,使得后续可直接基于存储有JS文件执行结果的快照文件进行非首次启动,有助于缩短目标小程序非首次启动时处理JS文件的耗时,从而有效提升小程序启动速度,以下进行详细说明。
针对相关技术中的小程序启动方案中所存在的缺陷(每次启动都需要对JS文件进行编译解析执行,导致耗时较长)是申请人在经过实践并仔细研究后得出的结果,因此,上述缺陷的发现过程以及在下文中本公开实施例针对上述缺陷所提出的解决方案,都应该被认定为申请人对本申请做出的贡献。
为便于理解,本公开实施例首先对小程序启动相关的基本概念进行介绍:
JS引擎即为JavaScript引擎,也可称为JS执行引擎。其中JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的脚本语言。JS引擎是一个专门处理JavaScript脚本的虚拟机,JS引擎可以有多种,示例性地,JS引擎可以为V8引擎,V8引擎是google开源高性能JS执行引擎,广泛用于chrome/Node/小程序Worker等JS语言应用场景。
公共JS文件又可称为JSSDK,也即小程序的公共JS库(相当于内置函数),作为小程序的前端框架,负责小程序App/Page管理,提供API/小程序组件的能力,负责业务代码onLaunch(生命周期函数)等函数的调用。
业务JS文件又可称为业务代码,用于执行小程序的逻辑,可在小程序启动阶段下载获取。
进一步,本公开实施例给出了如图1所示的小程序启动文件的结构示意图,其中JSWorker为小程序逻辑层执行单元,主要运行开发者根据小程序DSL(Domain SpecifiedLanguage,领域专用语言)构建产物的执行,小程序通过定义的Worker DSL编译产物在JSWorker运行,其中,JS worker层中的appservice.js是小程序构建产物,作为小程序的启动入口文件,app.js是通过JS Worker加载到引擎后,通过JSSDK管理app生命周期,完成生命周期执行后,运行期间依赖的业务js也会一次性进行加载、编译、解析等阶段。page.js是小程序框架层页面对象,管理对应page(页面)的onLoad/onShow等声明周期。另外应当注意的是,上述js等同JS,在本公开实施例中的字母大小写同义。小程序JSSDK(又可理解为内置函数/框架代码)框架,负责app.js文件中onLaunch的执行和page.js创建和管理。在实际应用中,可基于上述小程序启动文件实现小程序启动。
在前述基本概念的基础上,图2为本公开实施例提供的一种小程序的启动方法的流程示意图,该方法可以由小程序的启动装置执行,其中该装置可以采用软件和/或硬件实现,一般可集成在电子设备中。如图2所示,该方法主要包括如下步骤S202~步骤S204:
步骤S202,在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件;其中,快照(snapshot)文件包含目标JS文件的二进制流以及目标JS文件的执行结果,目标JS文件包括公共JS文件和业务JS文件。也即,目标JS文件基本包含了小程序启动所需的所有JS文件,在一些实施方式中,该JS文件也可称为JS对象。在一些具体的实施示例中,为了较好实现快照,该JS引擎可以选用V8引擎实现。
与现有技术中的小程序启动方案相比,本公开实施例在首次启动时在采用标准启动模式的基础上,还会额外通过JS引擎生成目标JS文件的快照文件,以便于后续直接应用。上述标准启动模式可以为常规的启动模式,也即,在实际应用中可以直接采用现有技术中的小程序启动流程实现,当然也可以在现有的小程序启动流程的基础上进行调整,在此不进行限制。但无论如何实现,在标准启动模式中都需要对目标JS文件进行加载编译解析和执行等完整处理,从而使得JS引擎生成的快照文件中包含有目标JS文件的执行结果。另外,JS引擎生成快照文件的过程即为序列化过程,JS引擎可以针对经首次启动操作处理的目标JS文件进行序列化,得到目标JS文件的二进制流以及目标JS文件的执行结果。
为便于理解,以下示例性说明:常规的JS文件都需要通过编译解析执行等步骤,通过快照文件可以缓存以上步骤的结果,下次基于该快照文件启动时则可以显著减少上述步骤的耗时,诸如,在a.js(一种JS文件的简单示例)中的内容是var a=1+1;生成快照文件后,将快照文件加载到V8虚拟机中,虚拟机中就包含了变量a,同时a的变量已经是2了,因此可以不用再次编译解析执行。
步骤S204,在目标小程序非首次启动时,加载快照文件,并基于快照文件执行非首次启动操作。
在目标小程序非首次启动时,不再执行首次启动时所采用的标准启动模式,而是直接基于首次启动后得到的快照文件执行非首次启动操作(可称之为快照启动模式),不需要再次对目标JS文件进行编译解析执行等操作,因此可有效缩短针对目标JS文件进行处理所需的耗时,实际应用中,对JS文件进行处理所需的耗时通常较长,尤其是业务JS文件耗时更长,大多数的小程序耗时都主要集中在业务JS文件的编译解析执行,而本公开实施例中的快照文件同时包含有公共JS文件和业务JS文件的二进制流及执行结果,可有效缩短处理JSSDK以及业务代码的耗时,在小程序非首次启动时的速度提升效果显著。
在前述基础上,本公开实施例进一步提供了一种采用标准启动模式执行首次启动操作的具体实施方式,包括:通过JS引擎(具体可采用JS Worker)加载用于构建目标小程序的目标JS文件;对目标JS文件进行编译、解析及执行操作,得到目标JS文件的执行结果;基于执行结果进行视图渲染,以完成首次启动;具体的,目标小程序可以调用传递数据到Webview(网页视图)进行渲染,从而完成启动。
在此基础上,可参见图3所示的一种标准启动模式的流程示意图,示意出了通过V8引擎启动小程序的主要流程,在创建JSRuntime(也即,创建V8Isolate、创建V8 Context、创建JSThread)之后,依次执行1.小程序JSSDK框架加载。2.加载编译appservice.js;具体的,加载编译appservice.js和require(app.js)。3.加载编译业务依赖代码js;具体的,加载编译require(taor.js)、require(common.js)、require(xxx.js)等等…在此不再逐一赘述。4.完成业务js代码加载。5.生命周期通知,执行业务代码;具体的,可以调用onLaunch函数以及onshow函数实现。6.创建Page流程,具体的,可以执行当前page、业务逻辑以及调用setData函数,最后完成启动。
上述业务js代码也等同于业务依赖代码js,或者可直接称之为业务代码,均相当于前述业务JS文件。如图3所示,在采用标准启动模式执行首次启动操作时,需要对公共JS文件(JSSDK)以及业务JS文件(业务代码)进行加载编译执行,最后完成启动。
如前所述,相比于现有技术,本公开实施例在首次启动时在采用标准启动模式的基础上,还会额外通过JS引擎生成目标JS文件的快照文件,以便于后续直接应用,为了不影响当前启动时的JS执行环境(运行环境),本公开实施例可启动一个单独的运行环境,以JS引擎是V8为例,则启动一个单独的V8运行环境来生成快照文件,避免影响当前这次启动的运行环境。基于此,采用标准启动模式执行首次启动操作的步骤,包括:在第一运行环境中采用标准启动模式执行首次启动操作;通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件的步骤,包括:在第二运行环境中通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件;其中,第一运行环境和第二运行环境相互独立。也即,在第一运行环境中正常按照标准启动模式执行首次启动操作,而在第二运行环境中生成目标JS文件的快照文件,从而避免快照文件的生成可能影响当前启动的运行环境。在一些具体的实施方式中,可以在用于构建目标小程序的目标JS文件均首次完成渲染之后,创建第二运行环境;然后在第二运行环境中通过JS引擎生成目标JS文件的快照文件。
另外,考虑到对JS文件进行快照可能会占用系统资源,为了不阻塞业务流程的后续执行,在第二运行环境中通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件时,可以选择在JS线程为空闲(IDLE)状态下再开始制作,也即,在JS引擎线程处于空闲状态时,创建第二运行环境。
考虑到JS文件可以内存序列化的方式实现快照,而Native函数相对比较特殊,无法序列化到快照文件,因此本公开实施例选择在启动时注入Native函数,然后再对JS文件进行序列化处理得到快照文件,也即,在第二运行环境中通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件的步骤,包括:在第二运行环境中注入Native函数,并通过JS引擎对用于构建目标小程序的目标JS文件进行序列化处理,得到目标JS文件的快照文件。
在前述基础上,可参见如图4所示的一种快照(snapshot)生成时机示意图,示意出在标准启动模式执行后,具体而言在业务代码完成首次渲染之后,选择JS线程为IDEL状态时生成snapshot,如图4所示,在标准启动模式中主要执行JS线程初始化、创建V8运行环境(上述第一运行环境)、Native函数注入、加载JSSDK、加载业务代码appservice.js、执行App().SraetApp()、App().createPage()生命周期调用、执行业务代码完成首次渲染等操作。而在JS线程为IDEL时,创建snapshot独立V8运行环境(上述第二运行环境),进而注入Native函数,后续加载诸如JSSDK、业务代码appservice.js等JS文件,最后生成snapshot。
综上,基于本公开实施例提供的上述快照生成时机,可以既不影响目标小程序的当前启动,又可以独立平稳的生成快照。
在一些实施方式中,考虑到onLaunch等生命周期函数每次的执行结果都不同,因此设置生成的快照文件中不包含有onLaunch函数的执行结果,也即,设置快照文件的生成流程中不执行startApp,startApp的作用是通过执行onLaunch函数来执行业务代码,换言之,快照文件的生成流程中不会调用app对象的onLaunch函数。在标准启动模式进行首次启动时通常会直接执行startApp以调用Onlaunch函数,而在生成快照文件时,则不创建JS层的app对象,而是直接生成一个不包括执行onLaunch函数的snapshot文件,然后在snapshot启动模式后直接调用StartApp执行业务逻辑。对于前端JSSDK而言,前期需要加载业务代码(加载所有依赖业务的js文件),但是不调用onLaunch等生命周期函数,原因即为前述所提,类比于通过网络拉取数据,每次得到的数据可能不一样,生命周期的每次调用结果也是不确定的。
基于上述原因,在一些具体的实施示例中,可以在完成以下步骤之后再进行snapshot生成:加载JSSDK框架代码、加载appservice.js、业务依赖js代码,包括框架(taro/uniapp/weppy等)、JSSDK执行生成业务代码的创建App流程,但是不执行生命周期调用;在前述步骤均执行之后生成不包含有onLaunch函数执行结果的序列化文件,即为snapshot产物,以便于小程序在后续启动时,可以直接读取snapshot文件,并将其进行反序列化处理,从而缩短编译解析执行的耗时。
在一些具体的实施方式中,以JS引擎是V8为例,则snapshot产物是V8虚拟机中的内存对象,虚拟机是V8通过C++实现的,因此本公开实施例还提供了C++侧生成快照的具体方式,主要包括:步骤1,执行context的scope函数;步骤2,设置js中启动模式为snapshotLaunch;步骤3,mmap加载tma-core文件在V8虚拟机中编译运行;步骤4,执行appservice.js生成startApp方法;步骤5,遍历所拥有persist和object添加到snapshotCreator中;步骤6,设置snapshotCreator上下文;步骤7,生成snapshot的blob二进制文件。
在生成快照之后,当目标小程序非首次启动时,可以首先加载快照文件,然后基于快照文件执行快速的非首次启动操作。考虑到快照文件中包含了一些运行中产生的数据,因此快照文件所包含的数据量大于小程序启动时所需的JS代码的数据量,为了提升快照文件的加载速度,本公开实施例对加载快照文件的方式进行优化,通过mmap内存映射方式加载快照文件。mmap是一种Liunx的内存方案方式,具体是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,mmap对文件的读取操作跨过了页缓存,减少了数据的拷贝次数,用内存读写取代IO读写,提高了文件读取效率。因此,本公开实施例通过mmap这种内存映射方式可快速加载快照文件,减少文件加载耗时。
当目标小程序非首次启动且加载了快照文件之后,可以基于快照文件执行非首次启动操作,具体的,可以对快照文件进行反序列化处理,得到目标JS文件的反序列化结果;以及注入Native函数以及调用目标小程序的生命周期;最后基于目标JS文件的反序列化结果进行视图渲染,以完成非首次启动。可以理解的是,由于Native函数无法被序列化到快照文件中,所以在执行非首次启动操作时,也需要对快照文件进行反序列化,以及额外注入Native函数。Native函数作为小程序调用客户端能力的桥梁,需要在启动阶段就完成注入,本公开实施例给出来一种注入Native函数的具体实现方式,主要利用V8提供的FunctionTemplate(函数模板)实现,具体包括:步骤1.通过快照文件创建设置FunctionTemplate占位;步骤2.生成callback(回调)对象;步骤3.设置callback和function名称到全局对象中;也即,在全局对象中设置回调对象名称以及函数名称;步骤4.创建上下文(context),并将上下文传入全局(global)对象。通过上述方式即可实现Native函数的注入流程。
另外,如前所述,在一些实施方式中,生成的快照文件中不包含有onLaunch的执行结果,快照文件的生成流程不执行startApp,因此会在Native函数注入之后再调用目标小程序的生命周期,诸如执行startApp以调用onLaunch函数,最终实现目标小程序的正常启动。
在前述基础上,本公开实施例提供了基于JSSDK和业务代码的快照启动模型,参见图5所示的一种快照启动模型示意图,示意出了标准启动流程、V8虚拟机利用后台IDLE线程生成snapshot,以及第二次(非首次)使用snapshot启动的流程,结合图5具体而言:
1.标准启动流程(首次启动)
在标准启动流程(后续也可称为标准启动模式)中可以主要执行如下步骤:
1.1创建V8运行环境。具体的,可以首先创建JSRuntime,然后注入Native函数,之后加载小程序框架JSSDK;
1.2加载编译appservice.js。
1.3加载/编译/解析业务依赖代码。具体的,执行业务代码加载、业务代码编译、业务代码解析操作。
1.4业务逻辑执行。此时调取生命周期,也即调用onLaunch函数,以及调用onshow函数。
1.5创建Page流程。具体的,执行当前page、业务逻辑以及setData函数。
1.6完成首屏幕渲染。
2.V8虚拟机在后台IDLE线程生成snapshot
在snapshot生成流程中可以主要执行如下步骤:
2.1线程空闲状态,额外创建独立的Isolate(也即前述第二运行环境),隔离环境减少对主Isolate(也即前述第一运行环境)的JS执行影响。
2.2加载app.service.js,执行业务逻辑。
2.3生成snapshot。
3.第二次使用snapshot启动
3.1不需要编译解析执行JSSDK和业务代码,直接触发生命周期,更快的开始执行业务逻辑。具体的,可以首先创建JSRuntime、加载snapshot文件、创建JSThread并注入ttjscore&config,之后调用onLaunch函数、onshow函数。
3.2App业务逻辑执行。具体的,可以执行当前page、业务逻辑以及setData函数。
3.3完成首屏幕渲染,大幅度提升启动性能。
应当注意的是,图5中仅示意的是第二次使用snapshot启动,旨在表述非首次启动基于快照文件启动,也即,第N次启动均可按照图5中所示意的snapshot启动流程进行启动,其中,N大于或等于2。
在实际应用中,可参照如图5所示的快照启动模型实现小程序启动,具体的,在首次启动时可采用图5中的标准启动流程(上述步骤1.1~1.6),并按照图5中的snapshot生成流程(上述2.1~2.3)生成snapshot。在非首次启动时可采用图5所示的snapshot启动流程(上述3.1~3.3)实现,由于无需再变异解析执行JSSDK和业务代码,因此可以显著提升非首次启动的速度。
应当注意的是,图5仅为一种具体实施方式中的主要步骤示意,不应当被视为限制,在实际应用中可以包含比图5中步骤更多或者更少的步骤,或者对图5中的步骤进行调整,在此不进行限制。
进一步,本公开实施例充分考虑到快照文件生成过程或者基于快照文件进行启动的过程可能存在异常,对于此提出来兜底策略,具体可参照如下(1)和(2)实现:
(1)在快照文件生成失败的情况下,采用标准启动模式执行非首次启动操作。也即,在快照文件生成流程出现异常导致快照文件生成失败时,下次启动不再走快照文件生成流程,而是直接采用标准启动模式。
(2)在基于快照文件执行非首次启动操作的过程中出现异常的情况下,采用标准启动模式执行非首次启动操作。也即,倘若快照文件生成正常,但是基于快照文件启动异常,则采用标准启动模式。
在前述内容的基础上,本公开实施例提供了如图6所示的一种小程序启动流程示意图,在该图中主要示意出了Snapshot启动模式(基于快照文件启动)、首次启动或者Snapshot启动异常时所采用的标准启动模式以及快照生成时机。如图6所示,虚线框整体表示小程序的应用及版本控制方式,具体而言,首先进行JSRuntime/线程初始化,然后进行AB分桶,如果未命中则直接降级为标准启动模式,如果AB分桶命中,则进行应用开关检测,如果未开启则直接降级为标准启动模式,如果开启则进行客户端/JSSDK/应用版本check(检查),如果失败则直接降级为标准启动模式,如果成功则创建Isolate并初始化Context,也即创建运行环境并进行上下文对象初始化,之后执行加载snapshot文件、Native函数注入、App().onLaunch()生命周期执行以及执行业务代码,完成首次渲染,从而实现基于快照文件的正常启动。以上步骤均属于Snapshot启动模式的步骤,而如图6所示,倘若Snapshot启动模式中出现异常或者启动失败,则降级到标准启动模式。具体的,图6中所示意的标准启动模式主要执行如下步骤:创建Isolate并初始化Context,Native函数注入、加载Tma-core.js(小程序框架,负责app.js和page.js的创建和管理)、加载app-service.js、执行App().sraetApp()、App().createPage()生命周期执行以及执行业务代码完成首次渲染。在图6中,首次启动时或者snapshot启动失败时均执行标准启动模式的步骤。另外,在图6中还示意出了首次启动执行标准启动模式时的snapshot生成时机,也即在JS线程处于IDEL时生成snapshot,同时也示意出来生成snapshot的主要步骤,包括:在JS线程IDLE时创建Snapshot独立Isolate并初始化Context,也即,创建生成快照所需的独立的运行环境并进行上下文对象初始化、Native函数注入、加载Tma-core.js、加载app-service.js、生成snapshot,如果snapshot生成成功,则进行文件hash校验,校验成功则得到所需的snapshot,如果snapshot生成失败或者校验失败,则可以删除snapshot、上报错误并且下次使用标准启动,也即,在后续启动时均使用标准启动模式启动。
通过上述图6,清楚展示了Snapshot启动模式、标准启动模式以及snapshot生成时机和生成流程、Snapshot启动模式降级为标准启动模式的情况。在实际应用中,小程序在非首次启动时采用Snapshot启动模式,在首次启动时采用标准启动模式并且按照snapshot生成时机生成snapshot,在小程序采用Snapshot启动模式的流程中出现异常或者在snapshot生成失败时,则后续启动均采用标准启动模式启动,但不再生成snapshot。通过上述方式,通过Snapshot启动模式可有效提升小程序的非首次启动速度,而在异常时降级至标准启动模式,可有效保障小程序能够正常启动运行。
应当注意的是,图6仅为一种具体实施方式中的主要步骤示意,不应当被视为限制,在实际应用中可以包含比图6中步骤更多或者更少的步骤,或者对图6中的步骤进行调整,在此不进行限制。
应当理解的是,相比于仅对公共库/JSSDK中内置函数和对象进行序列化而言,即便基于JSSDK生成snapshot文件,在基于snapshot文件启动后依然需要编译解析执行业务代码,而大部分小程序的启动耗时主要集中在业务代码的处理上,因此小程序的启动速度仍有待提升,基于以上考虑,本公开实施例中不仅针对JSSDK的内置函数(对应前述公共JS文件)进行序列化,而且也对业务代码进行序列化,生成的snapshot文件基本上包含有所有所需的JS文件的二进制流及执行结果,从而显著缩短JS文件处理耗时,可进一步提升小程序的启动速度。
综上所述,本公开实施例提供的上述小程序的启动方法,在目标小程序首次启动时生成公共JS文件和业务JS文件的快照文件,使得后续可直接基于存储有JS文件执行结果的快照文件进行非首次启动,无需再对JS文件进行编译解析等处理,有助于缩短目标小程序非首次启动时处理JS文件的耗时,从而有效提升小程序启动速度。另外,如果快照文件生成失败或者基于快照启动失败,仍可以降级为标准启动模式,可充分保障小程序正常启动。
对应于前述小程序的启动方法,本公开实施例提供了一种小程序的启动装置,图7为本公开实施例提供的一种小程序的启动装置的结构示意图,该装置可由软件和/或硬件实现,一般可集成在电子设备中,如图7所示,包括:
首次启动模块702,用于在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建目标小程序的目标JS文件的快照文件;其中,快照文件包含目标JS文件的二进制流以及目标JS文件的执行结果,目标JS文件包括公共JS文件和业务JS文件;
非首次启动模块704,用于在目标小程序非首次启动时,加载快照文件,并基于快照文件执行非首次启动操作。
通过上述装置,在目标小程序首次启动时生成公共JS文件和业务JS文件的快照文件,使得后续可直接基于存储有JS文件执行结果的快照文件进行非首次启动,有助于缩短目标小程序非首次启动时处理JS文件的耗时,从而有效提升小程序启动速度。
在一些实施方式中,首次启动模块702具体用于:在第一运行环境中采用标准启动模式执行首次启动操作;在第二运行环境中通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件。
在一些实施方式中,首次启动模块702具体用于:在用于构建所述目标小程序的目标JS文件均首次完成渲染之后,创建第二运行环境;在所述第二运行环境中通过JS引擎生成所述目标JS文件的快照文件。
在一些实施方式中,首次启动模块702具体用于:在JS引擎线程处于空闲状态时,创建第二运行环境。
在一些实施方式中,首次启动模块702具体用于:在第二运行环境中注入Native函数,并通过JS引擎对用于构建所述目标小程序的目标JS文件进行序列化处理,得到所述目标JS文件的快照文件。
在一些实施方式中,非首次启动模块704具体用于:通过mmap内存映射方式加载所述快照文件。
在一些实施方式中,非首次启动模块704具体用于:对所述快照文件进行反序列化处理,得到所述目标JS文件的反序列化结果;注入Native函数以及调用所述目标小程序的生命周期;基于所述目标JS文件的反序列化结果进行视图渲染,以完成非首次启动。
在一些实施方式中,所述装置还包括:非首次启动异常模块,用于在基于所述快照文件执行非首次启动操作的过程中出现异常的情况下,采用所述标准启动模式执行所述非首次启动操作。
在一些实施方式中,所述装置还包括:快照生成失败模块,用于在所述快照文件生成失败的情况下,采用所述标准启动模式执行非首次启动操作。
在一些实施方式中,采用标准启动模式执行首次启动操作的步骤,包括:
通过所述JS引擎加载用于构建所述目标小程序的目标JS文件;
对所述目标JS文件进行编译、解析及执行操作,得到所述目标JS文件的执行结果;
基于所述执行结果进行视图渲染,以完成首次启动。
本公开实施例所提供的小程序的启动装置可执行本公开任意实施例所提供的小程序的启动方法,具备执行方法相应的功能模块和有益效果。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置实施例的具体工作过程,可以参考方法实施例中的对应过程,在此不再赘述。
本公开实施例还提供了一种电子设备,电子设备包括:处理器;用于存储处理器可执行指令的存储器;处理器,用于从存储器中读取可执行指令,并执行指令以实现上述任一项小程序的启动方法。
图8为本公开实施例提供的一种电子设备的结构示意图。如图8所示,电子设备800包括一个或多个处理器801和存储器802。
处理器801可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备800中的其他组件以执行期望的功能。
存储器802可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器801可以运行所述程序指令,以实现上文所述的本公开的实施例的小程序的启动方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
在一个示例中,电子设备800还可以包括:输入装置803和输出装置804,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入装置803还可以包括例如键盘、鼠标等等。
该输出装置804可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置804可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图8中仅示出了该电子设备800中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备800还可以包括任何其他适当的组件。
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的小程序的启动方法。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的小程序的启动方法。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本公开实施例还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现本公开实施例中的小程序的启动方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (13)

1.一种小程序的启动方法,其特征在于,包括:
在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件;其中,所述快照文件包含所述目标JS文件的二进制流以及所述目标JS文件的执行结果,所述目标JS文件包括公共JS文件和业务JS文件;
在目标小程序非首次启动时,加载所述快照文件,并基于所述快照文件执行非首次启动操作。
2.根据权利要求1所述的方法,其特征在于,采用标准启动模式执行首次启动操作的步骤,包括:
在第一运行环境中采用标准启动模式执行首次启动操作;
通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件的步骤,包括:
在第二运行环境中通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件。
3.根据权利要求2所述的方法,其特征在于,在第二运行环境中通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件的步骤,包括:
在用于构建所述目标小程序的目标JS文件均首次完成渲染之后,创建第二运行环境;
在所述第二运行环境中通过JS引擎生成所述目标JS文件的快照文件。
4.根据权利要求3所述的方法,其特征在于,创建第二运行环境的步骤,包括:
在JS引擎线程处于空闲状态时,创建第二运行环境。
5.根据权利要求2所述的方法,其特征在于,在第二运行环境中通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件的步骤,包括:
在第二运行环境中注入Native函数,并通过JS引擎对用于构建所述目标小程序的目标JS文件进行序列化处理,得到所述目标JS文件的快照文件。
6.根据权利要求1所述的方法,其特征在于,加载所述快照文件的步骤,包括:
通过mmap内存映射方式加载所述快照文件。
7.根据权利要求1所述的方法,其特征在于,所述基于所述快照文件执行非首次启动操作的步骤,包括:
对所述快照文件进行反序列化处理,得到所述目标JS文件的反序列化结果;
注入Native函数以及调用所述目标小程序的生命周期;
基于所述目标JS文件的反序列化结果进行视图渲染,以完成非首次启动。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在基于所述快照文件执行非首次启动操作的过程中出现异常的情况下,采用所述标准启动模式执行所述非首次启动操作。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述快照文件生成失败的情况下,采用所述标准启动模式执行非首次启动操作。
10.根据权利要求1所述的方法,其特征在于,采用标准启动模式执行首次启动操作的步骤,包括:
通过所述JS引擎加载用于构建所述目标小程序的目标JS文件;
对所述目标JS文件进行编译、解析及执行操作,得到所述目标JS文件的执行结果;
基于所述执行结果进行视图渲染,以完成首次启动。
11.一种小程序的启动装置,其特征在于,包括:
首次启动模块,用于在目标小程序首次启动时,采用标准启动模式执行首次启动操作,并通过JS引擎生成用于构建所述目标小程序的目标JS文件的快照文件;其中,所述快照文件包含所述目标JS文件的二进制流以及所述目标JS文件的执行结果,所述目标JS文件包括公共JS文件和业务JS文件;
非首次启动模块,用于在目标小程序非首次启动时,加载所述快照文件,并基于所述快照文件执行非首次启动操作。
12.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-10中任一所述的小程序的启动方法。
13.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-10中任一所述的小程序的启动方法。
CN202111233076.5A 2021-10-22 2021-10-22 一种小程序的启动方法、装置、设备及介质 Active CN113885967B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111233076.5A CN113885967B (zh) 2021-10-22 2021-10-22 一种小程序的启动方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111233076.5A CN113885967B (zh) 2021-10-22 2021-10-22 一种小程序的启动方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN113885967A true CN113885967A (zh) 2022-01-04
CN113885967B CN113885967B (zh) 2024-02-13

Family

ID=79004180

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111233076.5A Active CN113885967B (zh) 2021-10-22 2021-10-22 一种小程序的启动方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN113885967B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114299647A (zh) * 2022-01-27 2022-04-08 支付宝(杭州)信息技术有限公司 基于小程序的无感入车方法和系统
CN114489850A (zh) * 2022-01-20 2022-05-13 中广核工程有限公司 一种设计软件的调用方法、装置、计算机设备及存储介质
CN114647477A (zh) * 2022-04-19 2022-06-21 挂号网(杭州)科技有限公司 一种确定目标显示页面的方法、装置、设备及介质
WO2023168875A1 (zh) * 2022-03-10 2023-09-14 北京百度网讯科技有限公司 启动模型服务的方法、装置、设备、介质及产品
CN117348948A (zh) * 2023-12-04 2024-01-05 南京掌控网络科技有限公司 一种在自有App上运行的小程序引擎

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140040897A1 (en) * 2012-08-04 2014-02-06 Microsoft Corporation Function Evaluation using Lightweight Process Snapshots
US20160323160A1 (en) * 2015-04-29 2016-11-03 AppDynamics, Inc. Detection of node.js memory leaks
US20180123921A1 (en) * 2016-10-31 2018-05-03 Appdynamics Llc Automatic web page load detection
CN111026462A (zh) * 2019-12-10 2020-04-17 百度在线网络技术(北京)有限公司 小程序控制方法、装置、设备和介质
CN111209110A (zh) * 2019-12-31 2020-05-29 浙江明度智控科技有限公司 一种实现负载均衡的任务调度管理方法、系统和存储介质
CN111488185A (zh) * 2020-04-15 2020-08-04 北京字节跳动网络技术有限公司 页面数据处理方法、装置、电子设备和可读介质
CN111597113A (zh) * 2020-05-18 2020-08-28 北京百度网讯科技有限公司 小程序的验证方法、装置、设备及存储介质
CN111949328A (zh) * 2020-08-06 2020-11-17 中国工商银行股份有限公司 一种启动加速方法、装置、计算机设备及存储介质
CN112114808A (zh) * 2020-09-29 2020-12-22 深圳市欢太科技有限公司 页面渲染方法、装置、电子设备
CN112115396A (zh) * 2020-09-21 2020-12-22 北京达佳互联信息技术有限公司 网页页面渲染方法、装置、设备及存储介质
CN112214702A (zh) * 2020-10-19 2021-01-12 天翼电子商务有限公司 一种提升网页呈现速度的方法
CN112379945A (zh) * 2020-11-20 2021-02-19 北京百度网讯科技有限公司 用于运行应用的方法、装置、设备以及存储介质
WO2021057674A1 (zh) * 2019-09-26 2021-04-01 华为技术有限公司 一种卡片渲染方法及电子设备

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140040897A1 (en) * 2012-08-04 2014-02-06 Microsoft Corporation Function Evaluation using Lightweight Process Snapshots
US20160323160A1 (en) * 2015-04-29 2016-11-03 AppDynamics, Inc. Detection of node.js memory leaks
US20180123921A1 (en) * 2016-10-31 2018-05-03 Appdynamics Llc Automatic web page load detection
WO2021057674A1 (zh) * 2019-09-26 2021-04-01 华为技术有限公司 一种卡片渲染方法及电子设备
CN111026462A (zh) * 2019-12-10 2020-04-17 百度在线网络技术(北京)有限公司 小程序控制方法、装置、设备和介质
CN111209110A (zh) * 2019-12-31 2020-05-29 浙江明度智控科技有限公司 一种实现负载均衡的任务调度管理方法、系统和存储介质
CN111488185A (zh) * 2020-04-15 2020-08-04 北京字节跳动网络技术有限公司 页面数据处理方法、装置、电子设备和可读介质
CN111597113A (zh) * 2020-05-18 2020-08-28 北京百度网讯科技有限公司 小程序的验证方法、装置、设备及存储介质
CN111949328A (zh) * 2020-08-06 2020-11-17 中国工商银行股份有限公司 一种启动加速方法、装置、计算机设备及存储介质
CN112115396A (zh) * 2020-09-21 2020-12-22 北京达佳互联信息技术有限公司 网页页面渲染方法、装置、设备及存储介质
CN112114808A (zh) * 2020-09-29 2020-12-22 深圳市欢太科技有限公司 页面渲染方法、装置、电子设备
CN112214702A (zh) * 2020-10-19 2021-01-12 天翼电子商务有限公司 一种提升网页呈现速度的方法
CN112379945A (zh) * 2020-11-20 2021-02-19 北京百度网讯科技有限公司 用于运行应用的方法、装置、设备以及存储介质

Non-Patent Citations (10)

* Cited by examiner, † Cited by third party
Title
CHRISTIAN WIMMER 等: "Initialize once, start fast: application initialization at build time", PROCEEDINGS OF THE ACM ON PROGRAMMING LANGUAGES, vol. 3, no. 1, 10 October 2019 (2019-10-10), pages 1 - 29, XP058451073, DOI: 10.1145/3360610 *
CLÉMENT BÉRA 等: "Sista: Saving Optimized Code in Snapshots for Fast Start-Up", MANLANG 2017:PROCEEDINGS OF THE 14TH INTERNATIONAL CONFERENCE ON MANAGED LANGUAGES AND RUNTIMES, 27 September 2017 (2017-09-27), pages 1 - 11 *
DANBEV: "learning-v8", Retrieved from the Internet <URL:https://github.com/danbev/learning-v8/blob/master/notes/snapshots.md> *
HEINER LITZ 等: "Extending the Virtual Memory System to Support Snapshot Isolation Transactions", PACT \'16: PROCEEDINGS OF THE 2016 INTERNATIONAL CONFERENCE ON PARALLEL ARCHITECTURES AND COMPILATION, 30 September 2016 (2016-09-30), pages 401, XP033013623, DOI: 10.1145/2967938.2967955 *
JINSEOK 等: "Snapshot-based loading-time acceleration for web applications", 2015 IEEE/ACM INTERNATIONAL SYMPOSIUM ON CODE GENERATION AND OPTIMIZATION (CGO), 17 February 2015 (2015-02-17), pages 2215 - 2224 *
THORNWU: "V8 是怎么跑起来的 —— V8 中的对象表示", Retrieved from the Internet <URL:https://segmentfault.com/a/1190000021355439?utm_source=tag-newest> *
YANGGUO@CHROMIUM.ORG: "Speeding up Node.js startup using V8 snapshot", Retrieved from the Internet <URL:https://docs.google.com/document/d/1YEIBdH7ocJfm6PWISKw03szNAgnstA2B3e8PZr_-Gp4/edit> *
李为民 等: "基于网页快照的网页预览技术研究", 电子世界, vol. 2017, no. 6, 30 June 2017 (2017-06-30), pages 1 - 73 *
王硕: "基于Web技术的三维客流呈现系统", 计算机与网络, vol. 43, no. 8, 15 November 2018 (2018-11-15), pages 1 - 82 *
项阳阳: "网站图片加载技术的设计与实现", 冶金与材料, vol. 39, no. 5, 31 May 2019 (2019-05-31), pages 77 - 79 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114489850A (zh) * 2022-01-20 2022-05-13 中广核工程有限公司 一种设计软件的调用方法、装置、计算机设备及存储介质
CN114489850B (zh) * 2022-01-20 2023-08-22 中广核工程有限公司 一种设计软件的调用方法、装置、计算机设备及存储介质
CN114299647A (zh) * 2022-01-27 2022-04-08 支付宝(杭州)信息技术有限公司 基于小程序的无感入车方法和系统
WO2023168875A1 (zh) * 2022-03-10 2023-09-14 北京百度网讯科技有限公司 启动模型服务的方法、装置、设备、介质及产品
CN114647477A (zh) * 2022-04-19 2022-06-21 挂号网(杭州)科技有限公司 一种确定目标显示页面的方法、装置、设备及介质
CN117348948A (zh) * 2023-12-04 2024-01-05 南京掌控网络科技有限公司 一种在自有App上运行的小程序引擎
CN117348948B (zh) * 2023-12-04 2024-03-22 南京掌控网络科技有限公司 一种在自有App上运行的小程序引擎

Also Published As

Publication number Publication date
CN113885967B (zh) 2024-02-13

Similar Documents

Publication Publication Date Title
CN113885967B (zh) 一种小程序的启动方法、装置、设备及介质
US8924922B2 (en) Pre-compiling hosted managed code
RU2520344C2 (ru) Кэширование генерируемого во время выполнения кода
RU2646329C2 (ru) Генерирование и кэширование кода программного обеспечения
US8738589B2 (en) Classloading technique for an application server that provides dependency enforcement
US11366643B2 (en) Generating dynamic modular proxies
US20090024986A1 (en) Runtime code modification
US8607203B1 (en) Test automation framework using dependency injection
US20080282238A1 (en) Static type for late binding
US8543991B2 (en) Profile driven multicore background compilation
US8539506B2 (en) Dynamic injection of code into running process
US20120266149A1 (en) Class isolation to minimize memory usage in a device
US20190129733A1 (en) Android dynamic framework and a method thereof
US20070250825A1 (en) Compiling Alternative Source Code Based on a Metafunction
JP2011515741A (ja) 非同期メソッドのための宣言型サポート
US11663020B2 (en) Bootstrapping frameworks from a generated static initialization method for faster booting
US9009667B2 (en) Application server that supports multiple component models
US8762976B2 (en) Static extensibility models with dynamic languages and scripts
US8875089B2 (en) Workspace model for interrelated projects
US9841982B2 (en) Locating import class files at alternate locations than specified in classpath information
US11366657B2 (en) Inferring code deprecation from module deprecation
US20090049423A1 (en) Javascripttm programming extension
CN111949301A (zh) 应用程序热更新方法、装置、计算机可读存储介质和计算机设备
Liang et al. Towards Lightweight Javascript Engine Acceleration for Privacy-Aware Distributed Learning in Large Language Models

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