CN112379885B - 小程序编译方法、装置、设备及可读存储介质 - Google Patents

小程序编译方法、装置、设备及可读存储介质 Download PDF

Info

Publication number
CN112379885B
CN112379885B CN202011308926.9A CN202011308926A CN112379885B CN 112379885 B CN112379885 B CN 112379885B CN 202011308926 A CN202011308926 A CN 202011308926A CN 112379885 B CN112379885 B CN 112379885B
Authority
CN
China
Prior art keywords
file
grammar
applet
auxiliary
auxiliary function
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
CN202011308926.9A
Other languages
English (en)
Other versions
CN112379885A (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 Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and 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 Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202011308926.9A priority Critical patent/CN112379885B/zh
Publication of CN112379885A publication Critical patent/CN112379885A/zh
Application granted granted Critical
Publication of CN112379885B publication Critical patent/CN112379885B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • 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)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了一种小程序编译方法、装置、设备及可读存储介质,涉及小程序领域。具体实现方案为:获取小程序中含有语法的文件所需的辅助函数,并创建所述含有语法的文件与所需的辅助函数的引用关系;其中,所述辅助函数用于将所述含有语法的文件中的语法转换为所述小程序的宿主的内核支持的语法;将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中,所述第一个产出文件是所述小程序运行时第一个加载的产出文件。通过该方法,可以采用跨文件共享的方式将辅助函数加入小程序的产出包中,达到减少产出包大小,提高小程序的启动性能的目的。

Description

小程序编译方法、装置、设备及可读存储介质
技术领域
本申请涉及计算机技术中的小程序技术,尤其涉及一种小程序编译方法、装置、设备及可读存储介质。
背景技术
小程序是一种不需要下载安装即可使用的应用,用户通过电子设备上已安装的应用(即小程序的宿主)的扫一扫或者搜一下功能即可使用小程序。小程序的出现,使应用随时可用,但又无需安装卸载,从而使用户在使用应用时,无需关注电子设备上安装的应用是否过多。
编译小程序是指将开发者编写的小程序的文件,构建打包成小程序运行时所支持的产出包。目前,为了使小程序能够在低版本的小程序宿主内核中正常运行,在编译小程序时,会使用单文件内联的方式,把辅助函数放进小程序中每个需要它的文件中,以将文件中的高阶语法转义成小程序宿主内核支持的低阶语法。
发明内容
本申请提供了一种能够减少小程序的产出包大小的小程序编译方法、装置、设备及可读存储介质。
根据本申请的一方面,提供了一种小程序编译方法,包括:
获取小程序中含有语法的文件所需的辅助函数,并创建所述含有语法的文件与所需的辅助函数的引用关系,其中,所述辅助函数用于将所述含有语法的文件中的语法转换为所述小程序的宿主的内核支持的语法;
将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中,所述第一个产出文件是所述小程序运行时第一个加载的产出文件。
根据本申请的另一方面,提供了一种小程序编译装置,包括:
构建模块,用于获取小程序中含有语法的文件所需的辅助函数,并创建所述含有语法的文件与所需的辅助函数的引用关系;所述辅助函数用于将所述含有语法的文件中的语法转换为所述小程序的宿主的内核支持的语法;
打包模块,用于将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中,所述第一个产出文件是所述小程序运行时第一个加载的产出文件。
根据本申请的再一方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请一方面任一项所述的方法。
根据本申请的又一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行本申请一方面任一项所述的方法。
根据本申请的技术,在编译小程序时,可以把小程序中每个含有语法的文件所需的辅助函数提取出来,以跨文件共享的方式将这些辅助函数加入小程序的产出包中,无需再加入到每个需要使用该辅助函数的文件中,从而达到减少小程序的产出包的大小,提高小程序的启动性能的目的。
应当理解,本部分所描述的内容并非旨在标识本申请的实施例的关键或重要特征,也不用于限制本申请的范围。本申请的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1为小程序的开发流程示意图;
图2为本申请提供的一种小程序编译方法的应用场景示意图;
图3为本申请提供的一种小程序编译方法的流程示意图;
图4为本申请提供的另一种小程序编译方法的流程示意图;
图5为本申请提供的再一种小程序编译方法的流程示意图;
图6为本申请提供的又一种小程序编译方法的流程示意图;
图7为本申请提供的一种小程序编译装置的结构示意图;
图8是用来实现本申请实施例的小程序编译方法的电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1为小程序的开发流程示意图。如图1所示,小程序的开发者通常利用电子设备上部署的小程序开发者工具实现小程序的开发和发布,以使用户可以使用该小程序。其中,小程序的开发包括创建小程序、编写小程序、以及编译小程序等环节。
这里所说的编译小程序是指将开发者编写的小程序的文件,构建打包成小程序运行时所支持的产出包。即,把开发者编写的源代码编译成小程序执行的代码。其中,编译小程序包括构建流程和打包流程。构建流程用于将开发者编写的小程序的文件转换成小程序能够执行的文件,打包用于将部分文件打包成一个产出文件,多个产出文件构成产出包。也就是说,一个产出文件由至少一个小程序的文件构成。
应理解,上述所说的小程序的运行时即小程序的前端框架,也可以称为小程序的运行渲染引擎,用于处理小程序的web页面渲染、数据逻辑交互等。
开发者编写的小程序的文件中包括含有语法的文件。此处所说的含有语法的文件例如可以是小程序中用于实现小程序逻辑层的功能的文件。这里所说的逻辑层的功能例如可以是数据的加工、判断处理等操作。在一些实施例中,小程序中用于实现小程序逻辑层的功能的文件也可以称为小程序的逻辑代码文件。以采用JavaScript语言编写小程序为例,上述所说的小程序中含有语法的文件例如可以是小程序的js文件。
目前,小程序通常运行在应用程序(application,简称APP)或者是浏览器等中,这些小程序的载体可以称为小程序的宿主,即,小程序赖以生存的软件环境。例如,小程序运行在应用程序(application,简称APP)1中,即,用户通过电子设备上已安装的APP1的扫一扫或者搜一下功能即可使用该小程序。则在该示例中,APP1即为该小程序的宿主。
宿主的内核通常负责对用户界面进行语法解释和渲染显示。不同版本的内核支持的语法不同,通常情况下,低版本的内核无法支持高阶语法。目前,为了使小程序能够在低版本的小程序宿主的内核中正常运行,开发者工具中设置有用于转换高阶语法的辅助函数,这样,电子设备在使用开发者工具编译小程序时,会使用单文件内联的方式,把辅助函数放进每个需要它的文件(即含有语法的文件)中,以利用辅助函数将文件中的高阶语法转义成小程序宿主的内核支持的低阶语法。
示例性的,以采用JavaScript语言编写的小程序为例,假定小程序的pages/index/index.js文件和pages/second/second.js文件,均需要使用辅助函数createClass和辅助函数classCallCheck进行语法转义。则在编译该小程序时,会把这两个辅助函数加入pages/index/index.js文件中,以及,加入pages/second/second.js文件中。
也就是说,上述单文件内联的方式,会为小程序中每个含有语法的文件加入其自身所需的辅助函数,导致小程序的产出包较大,进而导致小程序的启动性能较差。
考虑到辅助函数会影响小程序的产出包的大小,而小程序的产出包的大小又会影响小程序的启动性能。因此,本申请提供一种小程序编译方法,应用于计算机技术中的小程序技术,在编译小程序时,可以把小程序中每个含有语法的文件所需的辅助函数提取出来,以跨文件共享的方式将这些辅助函数加入小程序的产出包中,无需再加入到每个需要使用该辅助函数的文件中,从而达到减少小程序的产出包的大小,提高小程序的启动性能的目的。
应理解,本申请提供的方法可以适用于任一使用高级语言编写的小程序。为了便于描述,下述实施例均以JavaScript语言编写的小程序为例,对本申请提供的方法进行示例说明。
另外,虽然本申请提供的方法描述的是针对小程序编译过程中,如何处理“对语法进行转换”的辅助函数的过程。但是应理解,本申请提供的方法对辅助函数的命名并不进行限定。也就是说,当其他函数也具有对语法进行转换(例如从高阶语法转换成低阶语法,或者从低阶语法转换成高阶语法)的功能时,或者,小程序的代码具有对语法进行转换的功能时,也可以采用本申请实施例提供的方法实现,以减小小程序的产出包的大小,本申请对此不再一一赘述。下述实施例为了便于描述,以辅助函数为例进行示例说明。
作为一种可能的实现方式,本申请的方法的执行主体可以是小程序构建装置,该装置例如可以为小程序的开发者工具,也可以为存储有相关执行代码的介质,例如,u盘等;或者,该装置还可以为集成或安装有相关执行代码的实体装置,例如,芯片、微控制单元(Microcontroller Unit,简称MCU)、电子设备(例如电脑、计算机)等。举例来说,该方案可应用于运行有小程序的开发者工具的计算机。
图2为本申请提供的一种小程序编译方法的应用场景示意图。如图2所示,作为另一种可能的实现方式中,本申请提供的小程序编译方法例如可以由云服务提供商在云服务平台抽象成一种小程序编译服务(或者小程序开发服务)提供给小程序的开发者。示例性的,云服务平台利用部署的小程序的开发者工具向小程序的开发者提供小程序编译服务(或者小程序开发服务)。小程序的开发者在使用小程序编译服务(或者小程序开发服务)时,可以通过应用程序接口(application program interface,API)或者GUI指定小程序的宿主内核的版本信息、并上传小程序的文件至云服务平台,云服务平台中的小程序开发者工具接收小程序的宿主内核的版本信息和小程序的文件后,自动执行小程序编译的操作,小程序开发者工具通过API或者GUI向小程序的开发者返回编译好的小程序的产出包。该小程序的产出包可被小程序的开发者发布至发布平台,以为用户提供服务。
下面以执行主体为运行有开发者工具的电子设备(下文简称电子设备)为例,结合具体地实施例对本申请实施例的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或者相似的概念或者过程可能在某些实施例不再赘述。
图3为本申请提供的一种小程序编译方法的流程示意图。如图3所示,该方法可以包括:
S101、获取小程序中含有语法的文件所需的辅助函数,并创建含有语法的文件与所需的辅助函数的引用关系,其中,辅助函数用于将含有语法的文件中的语法转换为小程序的宿主的内核支持的语法。
应理解,上述含有语法的文件例如可以是小程序的逻辑代码文件,具体可以参见前述描述。
如前所述,当含有语法的文件所使用的语法与内核支持的语法不同时,在编译小程序时,需要使用辅助函数对含有语法的文件中的语法转换为内核支持的语法,以使小程序能够在小程序宿主的内核中正常运行。此处所说的不同例如可以是:宿主的内核支持的语法低于小程序中含有语法的文件所使用的语法,或者,宿主的内核支持的语法高于小程序中含有语法的文件所使用的语法。
以宿主的内核支持的语法低于小程序中含有语法的文件所使用的语法为例,在编译小程序时,需要使用辅助函数对含有语法的文件中的高阶语法转换成内核支持的低阶语法。一个含有语法的文件所需的辅助函数可以是一个,也可以多个。当所需的辅助函数为多个时,该多个辅助函数可以包括至少两个相同的辅助函数,或者,所包括的辅助函数均不同。
因此,在本实施例中,对于含有语法的文件所使用的语法与内核支持的语法不同的小程序,电子设备在该对小程序进行编译时(即在编译环节的构建小程序的流程中),可以获取小程序中含有语法的文件所需的辅助函数。例如,电子设备可以基于用户输入的含有语法的文件所需的辅助函数名,获知含有语法的文件所需的辅助函数。
再例如,电子设备可以基于小程序的宿主的内核的版本信息获取小程序中含有语法的文件所需的辅助函数。
示例性的,电子设备可以获取小程序的文件和小程序的宿主的内核的版本信息,其中,小程序的文件包括含有语法的文件,版本信息用于表征内核支持的语法。然后,若含有语法的文件所使用的语法与内核支持的语法不同,则电子设备可以根据内核的版本信息,获取含有语法的文件所需的辅助函数。
以采用JavaScript语言编写的小程序为例,电子设备可以将含有语法的文件转换为抽象语法树(abstract syntax code,AST)。然后,电子设备可以基于内核的版本信息,遍历该AST,以判断含有语法的文件所使用的语法与内核支持的语法是否相同,并在不同时获取该含有语法的文件所需的辅助函数。
上述宿主的内核的版本信息可以是任一能够表征该内核支持的语法的信息,例如可以是内核的版本号等。本实施例不限定电子设备获取小程序的文件和小程序的宿主的内核的版本信息的方式。例如,电子设备接收开发者输入的小程序的文件和小程序的宿主的内核的版本信息,或者,电子设备可以根据开发者输入或选择的存储路径,从云环境或者本地磁盘中,读取预先存储的小程序的文件和小程序的宿主的内核的版本信息。或者,电子设备可以接收开发者输入的小程序的文件,根据开发者输入或选择的存储路径,从云环境或者本地磁盘中,读取预先存储的小程序的宿主的内核的版本信息。或者,电子设备可以接收开发者输入的小程序的宿主的内核的版本信息,根据开发者输入或选择的存储路径,从云环境或者本地磁盘中,读取预先存储的小程序的文件。
在获取到该含有语法的文件所需的辅助函数之后,电子设备可以创建含有语法的文件与所需的辅助函数的引用关系。例如,电子设备可以在含有语法的文件中添加辅助函数的引用声明,或者,电子设备还可以采用现有的其他引用函数的方式,创建含有语法的文件与所需的辅助函数的引用关系,以使该文件后续可以通过该引用关系,通过跨文件共享的方式使用所需的辅助函数。对于上述描述中如何添加引用声明可以参见现有的添加引用声明的方式,对此不再赘述。另外,关于上述如何创建含有语法的文件与所需的辅助函数的引用关系,也可以根据编写小程序时所采用的语言确定。
应理解,上述内容仅是描述了在构建小程序时,如何对含有语法的文件所需使用的辅助函数进行处理,关于构建小程序流程中与辅助函数无关的其他操作,可以遵循原有的方式执行,本申请对此不进行赘述。
另外,对于含有语法的文件所使用的语法与内核支持的语法相同的场景,说明小程序能够在小程序宿主的内核中正常运行,因此,在该场景下,可以采用通用的构建打包流程对其进行处理,无需执行本申请所提供的编译方法,对此不再赘述。
S102、将含有语法的文件所需的辅助函数存储至小程序的产出包的第一个产出文件中,其中,第一个产出文件是小程序运行时第一个加载的产出文件。
该产出文件例如与含有语法的文件的类型相同。以采用JavaScript语言编写的小程序为例,该小程序中含有语法的文件例如可以是js文件,相应地,通过上述编译(即构建+打包)方法得到的产出包中所包括的产出文件也可以是js文件。即,第一个产出文件也是js文件。
通过上述将含有语法的文件所需的辅助函数存储至小程序的产出包的第一个产出文件中的方式,可以使这些辅助函数早于使用他们的文件被声明,以确保后续引用这些辅助函数的文件可以通过跨文件的方式使用这些辅助函数。
例如,电子设备可以将该小程序所有含有语法的文件所需的辅助函数打包成一个产出文件,并将该产出文件作为小程序的产出包的第一个产出文件。在该实现方式下,小程序的第一个产出文件中仅有辅助函数。
或者,电子设备可以将该小程序所有含有语法的文件所需的辅助函数添加至小程序的产出包的第一个产出文件的顶部,或者,添加至第一个产出文件中第一个需要使用辅助函数的语法之前。此处所说的第一个产出文件为对构建好的至少一个含有语法的文件打包生成的。即,在该实现方式下,该第一个产出文件中除了辅助函数,还包括有语法。通过该方式,可以使小程序运行时无感知,从而能够不受小程序运行时的版本所具有的功能的影响,即,任一版本的小程序均可以采用上述方式实现辅助函数的跨文件共享。
示例性的,假定小程序中含有语法的文件有文件1、文件2、文件3和文件4。其中,文件1所需的辅助函数有辅助函数A和辅助函数B,文件2所需的辅助函数有辅助函数A和辅助函数C,文件3所需的辅助函数有辅助函数D,文件4所需的辅助函数有辅助函数E。在打包流程中,文件1和文件2打包生成产出文件1,文件3和文件4打包生成产出文件2。
也就是说,小程序中含有语法的文件所需的辅助函数一共有5个,分别为辅助函数A、辅助函数B、辅助函数C、辅助函数D和辅助函数E。产出文件1为小程序运行时第一个加载的产出文件,则在该示例下,可以将辅助函数A、辅助函数B、辅助函数C、辅助函数D和辅助函数E添加至产出文件1的顶部,以使这些辅助函数先于使用他们的文件被声明。
应理解,上述内容仅是描述了在该对小程序进行编译时(即在编译环节的打包构建好的小程序流程中),如何对辅助函数进行处理,关于打包构建好的小程序流程中与辅助函数无关的其他操作,可以遵循原有的方式执行,本申请对此不进行赘述。
本实施例提供的小程序编译方法,在编译小程序时,可以把小程序中每个含有语法的文件所需的辅助函数提取出来,以跨文件共享的方式将这些辅助函数加入小程序的产出包中,无需再加入到每个需要使用该辅助函数的文件中,从而达到减少小程序的产出包的大小,提高小程序的启动性能的目的。
可选地,在一些实施例中,小程序中含有语法的文件所需的辅助函数在执行时,可能需要调用其他函数实现其自身的功能。以辅助函数A为例,辅助函数A在执行时需要调用函数B,函数B需要调用函数C。
则在该实例下,电子设备可以采用如下方式将含有语法的文件所需的辅助函数存储至小程序的产出包的第一个产出文件中,具体地:
电子设备可以对含有语法的文件所需的辅助函数进行依赖分析,获取至少一个辅助函数的调用函数。继续参照前述辅助函数A的示例,则此处所说的调用函数可以是函数B和函数C。然后,电子设备可以将辅助函数以及辅助函数的调用函数均存储至第一个产出文件中。关于如何将辅助函数以及辅助函数的调用函数均存储至第一个产出文件中,可以参见前述关于如何将辅助函数存储至第一个产出文件中的描述,实现方式类似,对此不再赘述。
应理解,每个辅助函数的调用函数在第一个产出文件中的位置位于该辅助函数之前。仍然参照前述辅助函数A的示例,则辅助函数A、函数B和函数C在第一个产出文件中的位置为:函数B和函数C位于辅助函数A之前,或者,函数C位于函数B之前,函数B位于辅助函数A之前,或者,函数B位于函数C之前,函数C位于辅助函数A之前。通过这种方式,可以确保辅助函数的调用函数先于辅助函数被声明,从而使辅助函数在执行时可以正确调用其所需的调用函数,提高了小程序运行的可靠性。
另外,需要注意的是,若存在多个辅助函数具有相同调用函数的情况,则在第一个产出文件中,可以将这些调用函数位于这多个辅助函数之前,从而可以确保调用函数先于辅助函数被声明。
可选地,在一些实施例中,电子设备在编译小程序的过程中,可以通过磁盘缓存来存储小程序编译过程中的中间产物。例如,利用磁盘缓存小程序的文件的构建信息。则在上述实施例的基础上,电子设备在获取含有语法的文件所需的辅助函数之后,还可以将含有语法的文件与所需的辅助函数的映射关系存储至磁盘缓存中。
示例性的,电子设备可以将含有语法的文件与所需的辅助函数的映射关系单独进行存储,或者,电子设备可以将含有语法的文件的构建信息的存储格式进行修改,以将该映射关系添加至该含有语法的文件的构建信息中进行存储。
例如,电子设备中可以采用key和value的方式存储含有语法的文件的构建信息,则在本示例中,可以为构建信息新添加一组key和value,其中,key为含有语法的文件的名称,value为该文件所需的辅助函数的函数名称。
通过上述方式,当后续再次对该小程序进行编译时,可以通过读取磁盘缓存中所存储的映射关系对小程序执行后续的打包流程,提高了编译效率。
图4为本申请提供的另一种小程序编译方法的流程示意图。如图4所示,当电子设备通过磁盘缓存来存储含有语法的文件与所需的辅助函数的映射关系时,本申请提供的小程序编译方法可以包括如下步骤:
S201、获取小程序的文件和小程序的宿主的内核的版本信息。
S202、确定含有语法的文件所使用的语法与内核支持的语法是否不同,若是,则执行S203,若否,则结束。
应理解,当含有语法的文件所使用的语法与内核支持的语法相同时,可以采用通用的构建打包流程对其进行处理,无需执行本申请所提供的编译方法,对此不再赘述。
可选地,上述步骤S201-S202为可选地步骤。
S203、确定磁盘缓存中是否存储有小程序中含有语法的文件与所需的辅助函数的映射关系。若是,则执行步骤S204,若否,则执行S206。
S204、确定该映射关系的存储时间是否早于含有语法的文件的最后更新时间,若是,则执行S206,若否,则执行S205。
若该映射关系的存储时间早于含有语法的文件的最后更新时间,说明该文件中的语法在获取上述映射关系之后,已被再次修改或者更新。此时,该映射关系所表征的含有语法的文件所需的辅助函数不可用,因此,需要重新获取该含有语法的文件所需的辅助函数,执行步骤S206。
若该映射关系的存储时间等于含有语法的文件的最后更新时间,说明该文件中的语法在获取上述映射关系之后,未被再次修改或者更新。此时,该映射关系所表征的含有语法的文件所需的辅助函数可用,则可以执行步骤S205。
关于文件的最后更新时间的获取可以采用通用的获取文件的更新时间的方式,例如,可以基于开发者在使用电子设备修改或编辑该文件时,电子设备存储的该文件的最后更新时间,获取该更新时间,对此不再赘述。
S205、在打包构建好的小程序时,根据该映射关系,将含有语法的文件所需的辅助函数存储至小程序的产出包的第一个产出文件中。
通过该方式,可以缩短小程序的编译时间,提高小程序的编译效率。
S206、在构建小程序时,获取含有语法的文件所需的辅助函数,并创建含有语法的文件与所需的辅助函数的引用关系。
S207、将含有语法的文件与所需的辅助函数的映射关系存储至磁盘缓存中。
S208、在打包构建好的小程序时,根据所获取的含有语法的文件所需的辅助函数,将含有语法的文件所需的辅助函数存储至小程序的产出包的第一个产出文件中。
应理解,上述步骤S207与步骤S208的执行顺序可以不分先后。例如,可以先执行S207,再执行S208,也可以先执行S208,再执行S207,也可以同时执行S207和S208,对此不进行限定。
应理解,上述内容仅是描述了在小程序编译过程中,如何利用磁盘缓存对含有语法的文件与辅助函数的映射关系进行处理,关于使用磁盘缓存进行的与辅助函数无关的其他操作,可以遵循原有的方式执行,本申请对此不进行赘述。
本实施例提供的小程序编译方法,在编译小程序时,可以利用磁盘缓存存储小程序中含有语法的文件与所需的辅助函数的映射关系的方式,在后续再次编译小程序时,缩短小程序的编译时间,提高小程序的编译效率。
图5为本申请提供的再一种小程序编译方法的流程示意图。如前述所说,开发者工具中设置有用于转换高阶语法的辅助函数。作为一种实施例中,这些辅助函数可以设置在开发者工具的编译工具中,则在一些实施例中,如图5所示,在上述步骤S102之后,本申请提供的小程序编译方法可以包括如下步骤:
S301、确定当前是否为小程序的依赖分析模式。
在本实施例中,小程序存在两种模式,一种是依赖分析模式,另外一种是编译模式。若当前为小程序的依赖分析模式,则执行步骤S502,若当前非小程序的依赖分析模式,即当前为小程序的编译模式,则采用前述实施例描述的编译方法,对小程序进行编译,以采用跨文件共享的方式将辅助函数加入小程序的产出包中,从而达到减少小程序的产出包的大小,提高小程序的启动性能的目的。
当前具体处于哪种模式例如可以根据开发者所选择的模式确定。例如,电子设备可以接收开发者输入的用于确定模式的指令,确定当前处于哪种模式。示例性的,电子设备的用户界面可以显示有供开发者选择的模式组件或控件,以使开发者通过选择该组件或控件向电子设备发送用于确定模式的指令。
S302、根据所获取的含有语法的文件所需的辅助函数,将含有语法的文件中获取辅助函数的路径修改为编译工具所在的路径。
其中,编译工具中含有辅助函数。
若当前为小程序的依赖分析模式,电子设备可以根据采用前述步骤S102所获取的含有语法的文件所需的辅助函数,将含有语法的文件中获取辅助函数的路径修改为编译工具所在的路径。此处所说的编译工具所在的路径也可以称为编译工具所在的目录。该编译工具是指开发者工具中所包括的一个工具。
通过该方式,可以使含有语法的文件能够获取到所需的辅助函数。这样,后续电子设备即便通过其他的编译方式(例如现有的编译方式)对小程序进行编译,也可以使含有语法的文件能够获取到所需的辅助函数,从而可以使小程序能够在小程序宿主的内核中正常运行。
应理解,上述内容仅是描述了在依赖分析模式下,如何对辅助函数进行处理,关于依赖分析模式下与辅助函数无关的其他操作,可以遵循原有的方式执行,本申请对此不进行赘述。
下面通过一个具体的示例来对本申请提供的小程序编译方法进行示例说明。其中,在本示例中,小程序为采用JavaScript语言编写的小程序。电子设备通过其上运行的开发者工具对小程序进行编译。即,对小程序中js文件进行编译。
该开发者工具包括Babel和Webpack。其中,Babel是一个JavaScript编译器,可以把浏览器不认识的语法,编译成浏览器认识的语法。即,Babel是一个编译工具,可以把高版本语法编译成低版本语法,或者将小程序中含有语法的文件按照自定义规则转换成js语法。
Webpack是一个静态模块打包器,也可以说是一个打包工具,用于定义小程序的入口文件,将所有模块引入整理后,通过loader和plugin处理后,打包输出。
目前,Babel虽然能够获取小程序中含有语法的文件需要的辅助函数,但是并没有把这些辅助函数暴露出来,即,在执行打包流程时无法获知这些辅助函数。因此,本申请通过对Babel的功能进行修改,以利用Babel在小程序的构建流程中,执行获取小程序中含有语法的文件所需的辅助函数,以使这些辅助函数暴露出来,并在含有语法的文件中添加辅助函数的引用声明的操作,从而在执行打包流程可以基于这些辅助函数执行跨文件打包。
示例性的,Babel中包括babel-plugin-transform-runtime插件,该插件用于解析含有语法的文件中的语法。当该插件解析到含有语法的文件需要使用辅助函数的语法糖(即计算机语言中添加的某种语法)时,会调用该文件对应的File类的实例中的addHelper方法获知所需的辅助函数。即,每个含有语法的文件对应一个File类的实例。
因此,本申请通过在File的类添加set辅助函数名字的方法和get辅助函数名字的方法,来实现上述功能。其中,set辅助函数名字的方法用于将该含有语法的文件需要使用辅助函数的名称设置到该文件中。即,执行在含有语法的文件中添加辅助函数的引用声明的操作。或者说,将需要使用辅助函数的名称作为该文件的属性添加进去。get辅助函数名字的方法用于使其他流程(例如打包流程)能够获知该含有语法的文件需要使用辅助函数的名称。即,Webpack的loader可以通过调用该get辅助函数名字的方法,获知含有语法的文件需要使用辅助函数的名称。
Webpack中的cache-loader用于执行磁盘缓存操作,即,缓存构建完的小程序的js文件。在本实施例中,对cache-loader进行如下两项改动:
1、在cache-loader中对文件的存储格式进行修改,添加一个MapusedHelplersInfo(该名称仅是一种示例,并不对此进行限定),用来存储(或者称为缓存)js文件对应的辅助函数名(即js文件与辅助函数之间的映射关系),并使其暴露在webpack的compiler实例上(即管理webpack的所有打包方法的实例)。即,webpack的compiler实例可以获取到该映射关系。
2、cache-loader中的pitch方法是所有loader中最先执行的。因此,本申请利用cache-loader的pitch方法判断js文件在磁盘中是否有缓存。若存在缓存、且该映射关系可用,则直接读缓存中的内容,并跳出loader的操作后,直接执行打包流程。
应理解,若利用开发者工具对小程序第一次进行编译,此时磁盘缓存中无该小程序中含有语法的文件的缓存,则忽略pitch方法,直接执行通常的loader方法。
另外,在缓存每个含有语法的文件对应的辅助函数时,可以汇总去重放在磁盘缓存中。该汇总去重可以是对一个含有语法的文件中所需的辅助函数进行汇总去重(例如文件1中需要使用2次辅助函数A,那么可以只存储文件1与辅助函数A的映射关系),也可以是对多个含有语法的文件所需的辅助函数进行汇总去重(例如文件1和文件2均需要使用辅助函数A,那么可以只存储文件1与辅助函数A的映射关系,或者,文件2与辅助函数A的映射关系)。通过该方式,可以节省存储空间。
另外,在Webpack中新建了一个plugin插件,可以对需要打入产出包的辅助函数进行依赖分析,并将将辅助函数以及调用函数均添加至产出包的第一个产出文件的顶部。
同时,修改了Webpack创建依赖模块时的方式,以使Webpack在对js文件进行依赖分析后,可以把js文件所需的辅助函数的模块上下文修改为编译工具所在的目录(也可以称为路径)。即存储有辅助函数的编译工具所在的目录,例如,Babel所在的目录。通过该方式,可以使js文件能够获取到所需的辅助函数。这样,后续电子设备即便通过其他的编译方式(例如现有的编译方式)对小程序进行编译,也可以使js文件能够获取到所需的辅助函数,从而可以使小程序能够在小程序宿主的内核中正常运行。
下面通过一个流程图来说明如何使用上述开发者工具实现本申请提供的小程序编译方法。图6为本申请提供的又一种小程序编译方法的流程示意图。如图6所示,该方法包括:
S401、获取小程序的文件和小程序的宿主的内核的版本信息。
S402、在构建小程序时,使用Babel中的babel-plugin-transform-runtime插件,获取小程序中js文件所需的辅助函数,并在js文件中添加辅助函数的引用声明。
S403、确定当前是否为小程序的依赖分析模式。
若是,执行S404,若否,说明当前为编译模式,执行S405。
S404、使用Webpack进行js文件的依赖分析,把babel辅助函数的模块上下文修改为编译工具所在的目录。
S405、在使用Webpack打包构建好的小程序时,利用get辅助函数名字的方法,获知js文件需要使用辅助函数的名称,并暴露在Webpack的loader的上下文中。
S406、利用cache-loader对每个js文件与所需的辅助函数的映射关系进行磁盘缓存,并暴露在webpack的compiler实例上。
S407、利用Webpack中新建的plugin插件对js文件所需的辅助函数进行依赖分析,获取辅助函数的调用函数,并将辅助函数以及调用函数均添加至第一个产出文件的顶部。
其中,调用函数在所述第一个产出文件中的位置位于辅助函数之前。
可选地,受限于辅助函数的类型不同,对于上述小程序中的async/await所需的辅助函数regenerator-runtime需单独添加至第一个产出文件的顶部,对此不再赘述。
通过将辅助函数以及调用函数均添加至第一个产出文件的顶部的方式,可以使小程序的运行时无感知,从而无需由运行时动态创建script标签加载这些辅助函数,从而能够不受小程序运行时的版本所具有的功能的影响,即,任一版本的小程序均可以采用上述方式实现辅助函数的跨文件共享。
本实施例提供的小程序编译方法,在编译小程序时,可以把小程序中每个含有语法的文件所需的辅助函数提取出来,以跨文件共享的方式将这些辅助函数加入小程序的产出包中,无需再加入到每个需要使用该辅助函数的文件中,从而达到减少小程序的产出包的大小,提高小程序的启动性能的目的。
图7为本申请提供的一种小程序编译装置的结构示意图。该小程序编译装置可以应用于前述所说的电子设备。例如,该小程序编译装置可以为应用于上述电子设备中的芯片,也可以为上述电子设备。如图7所示,该装置可以包括:构建模块11和打包模块12。其中,
构建模块11,用于获取小程序中含有语法的文件所需的辅助函数,并创建所述含有语法的文件与所需的辅助函数的引用关系;所述辅助函数用于将所述含有语法的文件中的语法转换为所述小程序的宿主的内核支持的语法;示例性的,所述含有语法的文件为所述小程序的逻辑代码文件,所述逻辑代码文件用于实现所述小程序逻辑层的功能。
打包模块12,用于将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中,所述第一个产出文件是所述小程序运行时第一个加载的产出文件。
可选地,所述构建模块11,具体用于获取小程序的文件和所述小程序的宿主的内核的版本信息;并在所述含有语法的文件所使用的语法与所述内核支持的语法不同时,根据所述内核的版本信息,获取所述含有语法的文件所需的辅助函数;其中,所述小程序的文件包括含有语法的文件,所述版本信息用于表征所述内核支持的语法。
可选地,所述打包模块12,具体用于将所述含有语法的文件所需的辅助函数添加至所述小程序的产出包的第一个产出文件的顶部,其中,所述第一个产出文件为对构建好的至少一个含有语法的文件打包生成的。例如,所述打包模块12,具体用于对所述含有语法的文件所需的辅助函数进行依赖分析,获取所述辅助函数的调用函数;将所述辅助函数以及所述调用函数均添加至所述第一个产出文件的顶部;其中,所述调用函数在所述第一个产出文件中的位置位于所述辅助函数之前。
继续参照图7,在一些实施例中,上述装置还可以包括:缓存模块13,用于在所述构建模块11获取所述含有语法的文件所需的辅助函数之后,将所述含有语法的文件与所需的辅助函数的映射关系存储至磁盘缓存中。
可选地,所述构建模块11,还用于在获取所述含有语法的文件所需的辅助函数之前,确定磁盘缓存中未存储所述含有语法的文件与所需的辅助函数的映射关系;或者,确定所述磁盘缓存中存储有所述映射关系,且所述映射关系的存储时间早于所述含有语法的文件的最后更新时间。
可选地,所述打包模块12,还用于在所述磁盘缓存中存储有所述映射关系,且所述映射关系的存储时间等于所述含有语法的文件的最后更新时间时,根据所述映射关系,将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中。
继续参照图7,在一些实施例中,上述装置还可以包括:确定模块14和依赖分析模块15。
确定模块14,用于在构建模块11创建所述含有语法的文件与所需的辅助函数的引用关系之后,确定当前是否为所述小程序的依赖分析模式。
依赖分析模块15,用于在当前为所述小程序的依赖分析模式时,根据所获取的所述含有语法的文件所需的辅助函数,将所述含有语法的文件中获取所述辅助函数的路径修改为编译工具所在的路径,其中,所述编译工具中含有所述辅助函数。
本申请提供的小程序编译装置,可以执行上述方法实施例中电子设备的动作,其实现原理和技术效果类似,在此不再赘述。
根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。
图8是用来实现本申请实施例的小程序编译方法的电子设备的框图。如图8所示,电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图8所示,该电子设备包括:一个或多个处理器Y01、存储器Y02,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图8中以一个处理器Y01为例。
存储器Y02即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的小程序编译方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的小程序编译方法。
存储器Y02作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的小程序编译方法对应的程序指令/模块(例如,附图7所示的获取模块11、构建模块12、打包模块13、缓存模块14、确定模块15和依赖分析模块16)。处理器Y01通过运行存储在存储器Y02中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的小程序编译方法。
存储器Y02可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据执行小程序编译方法的电子设备的使用所创建的数据等。此外,存储器Y02可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器Y02可选包括相对于处理器Y01远程设置的存储器,这些远程存储器可以通过网络连接至执行小程序编译方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
执行小程序编译方法的电子设备还可以包括:输入装置Y03和输出装置Y04。处理器Y01、存储器Y02、输入装置Y03和输出装置Y04可以通过总线或者其他方式连接,图8中以通过总线连接为例。
输入装置Y03可接收输入的数字或字符信息,以及产生与执行小程序编译方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置Y04可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算机程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算机程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,在编译小程序时,可以把小程序中每个含有语法的文件所需的辅助函数提取出来,以跨文件共享的方式将这些辅助函数加入小程序的产出包中,无需再加入到每个需要使用该辅助函数的文件中,从而达到减少小程序的产出包的大小,提高小程序的启动性能的目的。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

Claims (16)

1.一种小程序编译方法,包括:
获取小程序中含有语法的文件所需的辅助函数,并创建所述含有语法的文件与所需的辅助函数的引用关系;其中,所述辅助函数用于将所述含有语法的文件中的语法转换为所述小程序的宿主的内核支持的语法;所述含有语法的文件为所述小程序的逻辑代码文件,所述逻辑代码文件用于实现所述小程序逻辑层的功能;
将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中,所述第一个产出文件是所述小程序运行时第一个加载的产出文件;
所述“获取小程序中含有语法的文件所需的辅助函数”,包括:
获取小程序的文件和所述小程序的宿主的内核的版本信息,其中,所述小程序的文件包括含有语法的文件,所述版本信息用于表征所述内核支持的语法;
若所述含有语法的文件所使用的语法与所述内核支持的语法不同,则根据所述内核的版本信息,获取所述含有语法的文件所需的辅助函数。
2.根据权利要求1所述的方法,所述“将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中”,包括:
将所述含有语法的文件所需的辅助函数添加至所述小程序的产出包的第一个产出文件的顶部,其中,所述第一个产出文件为对构建好的至少一个含有语法的文件打包生成的。
3.根据权利要求2所述的方法,所述“将所述含有语法的文件所需的辅助函数添加至所述小程序的产出包的第一个产出文件的顶部”,包括:
对所述含有语法的文件所需的辅助函数进行依赖分析,获取所述辅助函数的调用函数;
将所述辅助函数以及所述调用函数均添加至所述第一个产出文件的顶部;其中,所述调用函数在所述第一个产出文件中的位置位于所述辅助函数之前。
4.根据权利要求1-3任一项所述的方法,所述“获取小程序中含有语法的文件所需的辅助函数”之后,还包括:
将所述含有语法的文件与所需的辅助函数的映射关系存储至磁盘缓存中。
5.根据权利要求1-3任一项所述的方法,所述“获取小程序中含有语法的文件所需的辅助函数”之前,还包括:
确定磁盘缓存中未存储所述含有语法的文件与所需的辅助函数的映射关系;或者,
确定所述磁盘缓存中存储有所述映射关系,且所述映射关系的存储时间早于所述含有语法的文件的最后更新时间。
6.根据权利要求5所述的方法,还包括:
若所述磁盘缓存中存储有所述映射关系,且所述映射关系的存储时间等于所述含有语法的文件的最后更新时间,则根据所述映射关系,将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中。
7.根据权利要求1-3任一项所述的方法,所述“创建所述含有语法的文件与所需的辅助函数的引用关系”之后,还包括:
确定当前是否为所述小程序的依赖分析模式;
若当前为所述小程序的依赖分析模式,则根据所获取的所述含有语法的文件所需的辅助函数,将所述含有语法的文件中获取所述辅助函数的路径修改为编译工具所在的路径,其中,所述编译工具中含有所述辅助函数。
8.一种小程序编译装置,包括:
构建模块,用于获取小程序中含有语法的文件所需的辅助函数,并创建所述含有语法的文件与所需的辅助函数的引用关系;其中,所述辅助函数用于将所述含有语法的文件中的语法转换为所述小程序的宿主的内核支持的语法;所述含有语法的文件为所述小程序的逻辑代码文件,所述逻辑代码文件用于实现所述小程序逻辑层的功能;
打包模块,用于将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中,所述第一个产出文件是所述小程序运行时第一个加载的产出文件;
所述构建模块,具体用于获取小程序的文件和所述小程序的宿主的内核的版本信息;并在所述含有语法的文件所使用的语法与所述内核支持的语法不同时,根据所述内核的版本信息,获取所述含有语法的文件所需的辅助函数;
其中,所述小程序的文件包括含有语法的文件,所述版本信息用于表征所述内核支持的语法。
9.根据权利要求8所述的装置,所述打包模块,具体用于将所述含有语法的文件所需的辅助函数添加至所述小程序的产出包的第一个产出文件的顶部,其中,所述第一个产出文件为对构建好的至少一个含有语法的文件打包生成的。
10.根据权利要求9所述的装置,所述打包模块,具体用于对所述含有语法的文件所需的辅助函数进行依赖分析,获取所述辅助函数的调用函数;将所述辅助函数以及所述调用函数均添加至所述第一个产出文件的顶部;其中,所述调用函数在所述第一个产出文件中的位置位于所述辅助函数之前。
11.根据权利要求8-10任一项所述的装置,所述装置还包括:
缓存模块,用于在所述构建模块获取所述含有语法的文件所需的辅助函数之后,将所述含有语法的文件与所需的辅助函数的映射关系存储至磁盘缓存中。
12.根据权利要求8-10任一项所述的装置,所述构建模块,还用于在获取所述含有语法的文件所需的辅助函数之前,确定磁盘缓存中未存储所述含有语法的文件与所需的辅助函数的映射关系;或者,确定所述磁盘缓存中存储有所述映射关系,且所述映射关系的存储时间早于所述含有语法的文件的最后更新时间。
13.根据权利要求12所述的装置,所述打包模块,还用于在所述磁盘缓存中存储有所述映射关系,且所述映射关系的存储时间等于所述含有语法的文件的最后更新时间时,根据所述映射关系,将所述含有语法的文件所需的辅助函数存储至所述小程序的产出包的第一个产出文件中。
14.根据权利要求8-10任一项所述的装置,所述装置还包括:
确定模块,用于在构建模块创建所述含有语法的文件与所需的辅助函数的引用关系之后,确定当前是否为所述小程序的依赖分析模式;
依赖分析模块,用于在当前为所述小程序的依赖分析模式时,根据所获取的所述含有语法的文件所需的辅助函数,将所述含有语法的文件中获取所述辅助函数的路径修改为编译工具所在的路径,其中,所述编译工具中含有所述辅助函数。
15. 一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的方法。
16.一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行权利要求1-7中任一项所述的方法。
CN202011308926.9A 2020-11-19 2020-11-19 小程序编译方法、装置、设备及可读存储介质 Active CN112379885B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011308926.9A CN112379885B (zh) 2020-11-19 2020-11-19 小程序编译方法、装置、设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011308926.9A CN112379885B (zh) 2020-11-19 2020-11-19 小程序编译方法、装置、设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN112379885A CN112379885A (zh) 2021-02-19
CN112379885B true CN112379885B (zh) 2024-04-09

Family

ID=74584474

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011308926.9A Active CN112379885B (zh) 2020-11-19 2020-11-19 小程序编译方法、装置、设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN112379885B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407165B (zh) * 2021-06-29 2023-04-07 抖音视界有限公司 Sdk的生成和自升级方法、装置、可读介质和设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7263696B1 (en) * 2002-12-10 2007-08-28 Emc Corporation Dynamic web based jar file finder
CN108549535A (zh) * 2018-03-16 2018-09-18 北京大学 一种基于文件依赖关系的高效程序解析方法和系统
CN110442330A (zh) * 2019-07-05 2019-11-12 五八有限公司 列表组件转换方法、装置、电子设备及存储介质
CN111222062A (zh) * 2020-01-09 2020-06-02 百度在线网络技术(北京)有限公司 小程序的运行方法、装置、电子设备和存储介质
CN111736840A (zh) * 2019-09-19 2020-10-02 北京沃东天骏信息技术有限公司 小程序应用的编译方法、运行方法、存储介质及电子设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7263696B1 (en) * 2002-12-10 2007-08-28 Emc Corporation Dynamic web based jar file finder
CN108549535A (zh) * 2018-03-16 2018-09-18 北京大学 一种基于文件依赖关系的高效程序解析方法和系统
CN110442330A (zh) * 2019-07-05 2019-11-12 五八有限公司 列表组件转换方法、装置、电子设备及存储介质
CN111736840A (zh) * 2019-09-19 2020-10-02 北京沃东天骏信息技术有限公司 小程序应用的编译方法、运行方法、存储介质及电子设备
CN111222062A (zh) * 2020-01-09 2020-06-02 百度在线网络技术(北京)有限公司 小程序的运行方法、装置、电子设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
脑卒中智慧医联体平台:打造同质医疗;徐书贤;;中国医院院长(第22期);第48-50页 *

Also Published As

Publication number Publication date
CN112379885A (zh) 2021-02-19

Similar Documents

Publication Publication Date Title
US11461111B2 (en) Method for running applets, and electronic device
CN111740948B (zh) 数据包发布方法、动态更新方法、装置、设备及介质
CN113010181B (zh) 一种深度学习框架之中算子的部署方法、装置及电子设备
US9116680B2 (en) Dynamically building locale objects or subsections of locale objects based on historical data
CN110531962B (zh) 小程序的开发处理方法、设备及计算机可读存储介质
US10162605B2 (en) Code snippet content recommendation to define an object literal
CN113918195A (zh) 应用界面更新方法、装置、电子设备及可读存储介质
CN111880801A (zh) 应用程序动态化方法、装置、电子设备
CN112379885B (zh) 小程序编译方法、装置、设备及可读存储介质
KR20110130611A (ko) 이기종 운영체제 계층 모듈에서 동작하는 웹기반어플리케이션의 연동이 가능한 모바일 단말기용 웹 플랫폼 유닛
CN114217789A (zh) 功能组件拓展方法、装置、设备、存储介质及程序产品
CN116685946A (zh) 在不停止应用的执行的情况下的更新的共享库的重新加载
CN112130888A (zh) 应用程序更新的方法、装置、设备和计算机存储介质
CN109408057B (zh) 自动生成代码的方法、装置、介质和计算设备
CN111158645B (zh) 提供集成开发环境的系统和方法
CN114168151A (zh) 基于容器的程序编译方法、装置、电子设备及存储介质
WO2022019784A1 (en) Assigning computing resources to execution of evaluators for image animation
CN115080077A (zh) 插件更新方法、装置、电子设备、系统和存储介质
CN111782196A (zh) 基于mvp架构的开发方法及装置
CN114911541A (zh) 配置信息的处理方法、装置、电子设备及存储介质
CN116932068A (zh) 基于idea的插件类加载方法、装置及设备
CN117667157A (zh) 热更新方法和系统、客户端应用的更新方法、介质及设备
CN117435276A (zh) 浏览器页面显示方法、装置、设备、存储介质及程序产品
CN117573277A (zh) 微信小程序页面动态化方法、系统、设备及储存介质
CN115878197A (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