首页> 中国专利> 基于Javascript引擎的性能优化方法和装置

基于Javascript引擎的性能优化方法和装置

摘要

本公开关于一种基于Javascript引擎的性能优化方法和装置,所述性能优化方法包括:获取Javascript代码和WebAssembly包,其中,所述WebAssembly包包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,所述二级引擎、所述静态代码和所述基础能力库从静态语言代码被编译成WebAssembly代码,所述基础能力库包括系统层API;通过所述Javascript引擎解析并执行所述Javascript代码,并且编译并执行所述WebAssembly包。

著录项

  • 公开/公告号CN112433816A

    专利类型发明专利

  • 公开/公告日2021-03-02

    原文格式PDF

  • 申请/专利权人 北京达佳互联信息技术有限公司;

    申请/专利号CN202011359122.1

  • 发明设计人 刘博杰;

    申请日2020-11-27

  • 分类号G06F9/455(20060101);

  • 代理机构11286 北京铭硕知识产权代理有限公司;

  • 代理人苏银虹;曾世骁

  • 地址 100085 北京市海淀区上地西路6号1幢1层101D1-7

  • 入库时间 2023-06-19 10:05:17

说明书

技术领域

本公开涉及计算机技术领域,更具体地说,涉及一种基于Javascript/WebAssembly引擎的性能优化方法和装置以及一种产生WebAssembly包的方法和装置。

背景技术

Javascript(以下,可简称为JS)是动态执行的语言,即不需要提前编译,在执行时将代码塞给Javascript引擎(以下,可简称为JS引擎),JS引擎会负责解析、编译、执行。静态语言(例如,C语言等)必须提前编译,打包在可执行文件中,最终随文件执行。JS的优点是可以在不改变应用的情况下,动态下载代码改变执行逻辑,但是缺点是执行效率不如静态语言,也无法直接调用系统接口。静态语言与JS相反,优点是执行效率高,与系统语言一致,但缺点是不能快速更新。WebAssembly是Web为了在JS引擎中能执行高效代码提出的一种技术。但是原生WebAssembly方案虽然可提高一定的执行效率,但又带来了基础能力模块的能力无法快速更新的问题。

发明内容

本公开提供一种基于Javascript引擎的性能优化方法和装置、一种基于WebAssembly引擎的性能优化方法和装置、一种产生WebAssembly包的方法和装置,可至少解决上述相关技术中的问题,也可不解决任何上述问题。

根据本公开实施例的第一方面,提供一种基于Javascript引擎的性能优化方法,包括:获取Javascript代码和WebAssembly包,其中,所述WebAssembly包包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,所述二级引擎、所述静态代码和所述基础能力库从静态语言代码被编译成WebAssembly代码,所述基础能力库包括系统层API;通过所述Javascript引擎解析并执行所述Javascript代码,并且编译并执行所述WebAssembly包。

可选地,所述通过所述Javascript引擎执行所述WebAssembly包,可包括:在所述Javascript引擎执行所述Javascript代码时,通过所述Javascript代码来调用并执行所述WebAssembly包。

可选地,所述通过所述Javascript代码来调用并执行所述WebAssembly包,可包括:通过所述Javascript代码调用所述二级引擎;通过所述二级引擎调用所述基础能力库;通过所述基础能力库经由所述系统层API来调用系统层的基础能力。

可选地,所述WebAssembly包可通过所述二级引擎和所述基础能力库被更新而被更新;其中,所述性能优化方法还可包括:获取所述Javascript代码以及更新后的WebAssembly包;通过所述Javascript引擎解析并执行所述Javascript代码,并且编译并执行所述更新后的WebAssembly包。

可选地,与所述静态代码相应的WebAssembly代码可被打包成第一WebAssembly包,并且第一WebAssembly包、与所述二级引擎相应的WebAssembly代码和与所述基础能力库相应的WebAssembly代码可被打包成第二WebAssembly包,作为所述WebAssembly包。

可选地,所述二级引擎可为Javascript引擎或WebAssembly引擎。

根据本公开实施例的第二方面,提供一种产生WebAssembly包的方法,包括:将二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库从静态语言代码编译成WebAssembly代码,其中,所述基础能力库包括系统层API;将被编译成WebAssembly代码的所述二级引擎、所述静态代码和所述基础能力库打包成一个WebAssembly包,其中,所述WebAssembly包在客户端被Javascript引擎或WebAssembly引擎编译并执行。

可选地,所述WebAssembly包可在所述Javascript引擎执行Javascript代码时,通过所述Javascript代码被调用并执行;或者可在所述WebAssembly引擎执行WebAssembly代码时,通过所述WebAssembly代码被调用并执行。

可选地,所述二级引擎可被所述Javascript代码或所述WebAssembly代码调用,所述基础能力库可被所述二级引擎调用,系统层的基础能力可被所述基础能力库经由所述系统层API调用。

可选地,所述方法还包括:通过更新所述二级引擎和所述基础能力库来更新所述WebAssembly包;其中,更新后的所述WebAssembly包可在客户端被Javascript引擎或WebAssembly引擎编译并执行。

可选地,所述将被编译成WebAssembly代码的所述二级引擎、所述静态代码和所述基础能力库打包成一个WebAssembly包,可包括:将与所述静态代码相应的WebAssembly代码打包成第一WebAssembly包;将第一WebAssembly包、与所述二级引擎相应的WebAssembly代码和与所述基础能力库相应的WebAssembly代码打包成第二WebAssembly包,作为所述WebAssembly包。

可选地,所述二级引擎可为Javascript引擎或WebAssembly引擎。

根据本公开实施例的第三方面,提供一种基于Javascript引擎的性能优化装置,包括:获取单元,被配置为获取Javascript代码和WebAssembly包,其中,所述WebAssembly包包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,所述二级引擎、所述静态代码和所述基础能力库从静态语言代码被编译成WebAssembly代码,所述基础能力库包括系统层API;执行单元,被配置为通过所述Javascript引擎解析并执行所述Javascript代码,并且编译并执行所述WebAssembly包。

可选地,所述Javascript引擎在执行所述Javascript代码时,可通过所述Javascript代码来调用并执行所述WebAssembly包。

可选地,可通过所述Javascript代码调用所述二级引擎,可通过所述二级引擎调用所述基础能力库,可通过所述基础能力库经由所述系统层API来调用系统层的基础能力。

可选地,所述WebAssembly包可通过所述二级引擎和所述基础能力库被更新而被更新;其中,获取单元还可被配置为:获取所述Javascript代码以及更新后的WebAssembly包;执行单元还可被配置为:通过所述Javascript引擎解析并执行所述Javascript代码,并且编译并执行所述更新后的WebAssembly包。

可选地,与所述静态代码相应的WebAssembly代码可被打包成第一WebAssembly包,并且第一WebAssembly包、与所述二级引擎相应的WebAssembly代码和与所述基础能力库相应的WebAssembly代码可被打包成第二WebAssembly包,作为所述WebAssembly包。

可选地,所述二级引擎可为Javascript引擎或WebAssembly引擎。

根据本公开实施例的第四方面,提供一种产生WebAssembly包的装置,包括:编译单元,被配置为将二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库从静态语言代码编译成WebAssembly代码,其中,所述基础能力库包括系统层API;打包单元,被配置为将被编译成WebAssembly代码的所述二级引擎、所述静态代码和所述基础能力库打包成一个WebAssembly包,其中,所述WebAssembly包在客户端被Javascript引擎或WebAssembly引擎编译并执行。

可选地,所述WebAssembly包可在所述Javascript引擎执行Javascript代码时,通过所述Javascript代码被调用并执行;或者可在所述WebAssembly引擎执行WebAssembly代码时,通过所述WebAssembly代码被调用并执行。

可选地,所述二级引擎可被所述Javascript代码或所述WebAssembly代码调用,所述基础能力库可被所述二级引擎调用,系统层的基础能力可被所述基础能力库经由所述系统层API调用。

可选地,所述装置还可包括:更新单元,被配置为:通过更新所述二级引擎和所述基础能力库来更新所述WebAssembly包;其中,更新后的所述WebAssembly包可在客户端被Javascript引擎或WebAssembly引擎编译并执行。

可选地,打包单元可被配置为:将与所述静态代码相应的WebAssembly代码打包成第一WebAssembly包;将第一WebAssembly包、与所述二级引擎相应的WebAssembly代码和与所述基础能力库相应的WebAssembly代码打包成第二WebAssembly包,作为所述WebAssembly包。

可选地,所述二级引擎可为Javascript引擎或WebAssembly引擎。

根据本公开实施例的第五方面,提供一种基于WebAssembly引擎的性能优化方法,包括:获取WebAssembly代码和WebAssembly包,其中,所述WebAssembly包包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,所述二级引擎、所述静态代码和所述基础能力库从静态语言代码被编译成WebAssembly代码,所述基础能力库包括系统层API;通过所述WebAssembly引擎编译并执行所述WebAssembly代码,并且编译并执行所述WebAssembly包。

根据本公开实施例的第六方面,提供一种基于WebAssembly引擎的性能优化装置,包括:获取单元,被配置为获取WebAssembly代码和WebAssembly包,其中,所述WebAssembly包包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,所述二级引擎、所述静态代码和所述基础能力库从静态语言代码被编译成WebAssembly代码,所述基础能力库包括系统层API;执行单元,被配置为由所述WebAssembly引擎编译并执行所述WebAssembly代码,并且编译并执行所述WebAssembly包。

根据本公开实施例的第七方面,提供一种电子设备,包括:至少一个处理器;至少一个存储计算机可执行指令的存储器,其中,所述计算机可执行指令在被所述至少一个处理器运行时,促使所述至少一个处理器执行根据本公开的基于Javascript引擎的性能优化方法或基于WebAssembly引擎的性能优化方法或产生WebAssembly包的方法。

根据本公开实施例的第八方面,提供一种存储指令的计算机可读存储介质,其特征在于,当所述指令被至少一个处理器运行时,促使所述至少一个处理器执行根据本公开的基于Javascript引擎的性能优化方法或基于WebAssembly引擎的性能优化方法或产生WebAssembly包的方法。

根据本公开实施例的第八方面,提供一种计算机程序产品,该计算机程序产品中的指令可由计算机设备的处理器执行以完成根据本公开的基于Javascript引擎的性能优化方法或基于WebAssembly引擎的性能优化方法或产生WebAssembly包的方法。

本公开的实施例提供的技术方案至少带来以下有益效果:

根据本公开的根据本公开的基于Javascript引擎的性能优化方法和装置、基于WebAssembly引擎的性能优化方法和装置、产生WebAssembly包的方法和装置,可将一个单独的二级引擎和包括系统层API的基础能力库编译打包成WebAssembly格式,使得二级引擎和基础能力库具有动态更新的能力,使得客户端的引擎可动态地编译并执行动态的二级引擎和基础能力库,从而实现系统层API的动态更新,从而达到既可提高引擎执行效率,又可快速更新引擎提供的接口能力的效果。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。

图1是示出相关技术的基于JS引擎的原生WebAssembly方案的示意图。

图2是示出根据本公开的示例性实施例的基于Javascript/WebAssembly引擎的性能优化方法和产生WebAssembly包的方法的实施场景示意图。

图3是示出根据本公开的示例性实施例的基于JS引擎的WebAssembly方案的示意图。

图4是示出根据本公开的示例性实施例的基于JS引擎的性能优化方法的流程图。

图5是示出根据本公开的示例性实施例的产生WebAssembly包的方法的流程图。

图6是示出根据本公开的示例性实施例的基于JS引擎的性能优化装置600的框图。

图7是示出根据本公开的示例性实施例的产生WebAssembly包的装置的框图。图7示出的产生WebAssembly包的装置可应用于开发端。

图8是示出根据本公开的示例性实施例的基于WebAssembly引擎的性能优化方法的流程图。

图9是示出根据本公开的示例性实施例的基于WebAssembly引擎的性能优化装置的框图。

图10是根据本公开的示例性实施例的电子设备1000的框图。

具体实施方式

为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。

需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

在此需要说明的是,在本公开中出现的“若干项之中的至少一项”均表示包含“该若干项中的任意一项”、“该若干项中的任意多项的组合”、“该若干项的全体”这三类并列的情况。例如“包括A和B之中的至少一个”即包括如下三种并列的情况:(1)包括A;(2)包括B;(3)包括A和B。又例如“执行步骤一和步骤二之中的至少一个”,即表示如下三种并列的情况:(1)执行步骤一;(2)执行步骤二;(3)执行步骤一和步骤二。

JavaScript(以下,可简称为JS)是一种采用事件驱动的脚本语言,不需要经过Web服务器就可以对用户的输入做出响应,具有动态化、可快速更新的优点。另外,JS也是一种解释型的脚本语言,在程序的运行过程中逐行进行解释,也带来了执行效率与静态语言相比会更低的问题。WebAssembly是一种新的字节码格式,主流浏览器都已经支持WebAssembly。其原理是通过特殊的编译工具将静态语言编译成JS引擎能运行的字节码,运行时JS引擎将其二次编译成特定硬件指令平台的机器码执行。与JS需要解释执行不同的是,WebAssembly字节码和底层机器码很相似可快速装载运行,因此其执行效率相对于JS解释执行大大提升。图1是示出相关技术的基于JS引擎的原生WebAssembly方案的示意图。如图1所示,WebAssembly包可以通过网络动态随时下载到终端,并可利用JS引擎运行时编译的技术,被JS引擎调用,进入JS上下文,在应用运行时执行静态语言的代码,实现静态语言的动态化。然而,WebAssembly代码中调用到的非JS引擎功能时,例如,系统层的网络、文件、线程、OpenGL等,需要JS引擎间接调用基础能力模块的代码,而基础能力模块也是在应用编译期跟JS引擎一起打包,所以这样技术存在的一个限制是静态语言编写的项目只能调用JS引擎环境提供的系统接口,而JS引擎所能提供的API是静态打包,所以动态化会受限于预先打包的引擎能力,即,WebAssembly的动态化最终受限于如图1所示的基础能力模块能提供的接口。为了解决此问题,本公开通过将一个二级引擎(例如,JS引擎或者WebAssembly引擎)和一个包括系统层API的基础能力库预先编译并打包为WebAssembly包,通过终端中的客户端的JS引擎来运行该WebAssembly包,并可通过动态地更新该WebAssembly包中的二级引擎和基础能力库,并通过网络将更新的WebAssembly包随时下载到客户端执行,来实现客户端的JS引擎通过中间层(二级引擎)来动态地改变客户端的JS引擎所提供的基础能力,从而解决了原生WebAssembly方案中JS引擎跟基础能力模块不可动态更新的问题。此外,上述方案不仅可应用于终端中的客户端的JS引擎,还可应用于终端中的客户端的WebAssembly引擎。

下面,将参照图2至图10来详细地描述根据本公开的示例性实施例的基于Javascript引擎的性能优化方法和装置。

图2是示出根据本公开的示例性实施例的基于Javascript/WebAssembly引擎的性能优化方法和产生WebAssembly包的方法的实施场景示意图。

参照图2,开发人员可在开发端101将开发或更新的程序代码编译并打包,部署到服务器102。当用户终端103或104在客户端例如打开相应的网页或游戏时,可通过网络从服务器102下载相应的代码包,并进行解析或编译以运行。

图3是示出根据本公开的示例性实施例的基于JS引擎的WebAssembly方案的示意图。

参照图3,可执行文件(即,应用)在打包时还是静态集成JS引擎以及使用系统接口的基础能力模块。JS引擎可通过WeblDL(Web接口定义语言)接口来调用基础能力模块,基础能力模块静态打包了系统层API,从而JS引擎可通过基础能力模块来调用系统层基础能力,例如,文件、网络、线程、OpenGL等。这里,基础能力模块固定在应用中的模块,不能动态变更。

在动态运行时(例如,当用户通过浏览器打开一网页时,可获取与该网页相关的JS代码和WebAssembly包),客户端的JS引擎可解析并执行JS代码,并二次编译执行WebAssembly包。这里,将静态语言代码编译为WebAssembly代码可被称为首次编译,将WebAssembly代码编译为特定硬件指令平台的机器代码可被称为二次编译。JS代码和WebAssembly包在开发端被开发并上传到服务器,并在客户端从服务器被下载并被运行。

根据本公开的WebAssembly包与相关技术的WebAssembly包不同,根据本公开的WebAssembly包可包括一个被编译成WebAssembly代码的二级引擎以及被编译成WebAssembly代码的能够在二级引擎运行的静态代码和基础能力库,该基础能力库在预编译成WebAssembly代码时包含对系统层API的调用。这里,二级引擎可以是JS引擎或WebAssembly引擎(例如,wasm3引擎)。此外,在开发端,可将根据本公开的WebAssembly包中的二级引擎、静态代码和基础能力库从静态语言代码编译成WebAssembly代码,例如,从C语言编译成WebAssembly代码。此外,在开发端,可将与静态代码相应的WebAssembly代码打包成第一WebAssembly包,并将第一WebAssembly包、与二级引擎相应的WebAssembly代码和与基础能力库相应的WebAssembly代码打包成第二WebAssembly包,作为根据本公开的WebAssembly包。

在动态运行时,客户端的JS引擎可执行JS代码,通过JS代码调用并执行所述WebAssembly包。例如,JS代码可通过WeblDL接口与二级引擎通信,使客户端的JS引擎间接调用静态代码以及基础能力库。具体地说,JS代码可通过WeblDL接口调用二级引擎,二级引擎在被调用可执行静态代码或者调用基础能力库,基础能力库在被调用后可经由系统层API来调用系统层的基础能力。此外,根据本公开的WebAssembly包还可被动态的更新。具体地说,在开发端,通过更新WebAssembly包中的二级引擎和基础能力库来更新WebAssembly包。在客户端,当获取到JS代码以及更新后的WebAssembly包时,可由客户端的JS引擎解析并执行所述Javascript代码,并且编译并执行所述更新后的WebAssembly包。

也就是说,一个单独的二级引擎和包括系统层API的基础能力库被编译打包成WebAssembly格式,使得二级引擎和基础能力库具有动态更新的能力。可在动态更新的二级引擎中运行静态代码和调用基础能力库。此外,基础能力库是可以动态更新的库,例如,第一次客户端通过网络下载能够调用系统层的文件能力的基础能力库,第二次客户端通过网络下载能够调用系统层的文件能力和网络能力的基础能力库。因此,在运行时动态地由客户端的JS引擎来编译并执行动态的二级引擎和基础能力库,从而实现系统层API的动态更新。

此外,根据本公开的上述技术方案也可应用于客户端的WebAssembly引擎(例如,wasm3引擎)。在客户端,当获取到WebAssembly代码和根据本公开的WebAssembly包时,可由客户端的WebAssembly引擎编译并执行所述WebAssembly代码,并且编译并执行根据本公开的WebAssembly包。WebAssembly代码和根据本公开的WebAssembly包是在开发端被开发并上传到服务器,并在客户端从服务器被下载并被运行。当根据本公开的WebAssembly包被更新后并被客户端获取时,客户端的WebAssembly引擎可执行更新后的WebAssembly包。因此,也可实现系统层API的动态更新。

图4是示出根据本公开的示例性实施例的基于JS引擎的性能优化方法的流程图。图4示出的基于JS引擎的性能优化方法可应用于客户端。

参照图4,在步骤401,可获取JS代码和WebAssembly包。例如,当用户通过客户端的浏览器打开一网页或者通过客户端打开游戏时,可获取与该网页或游戏相关的JS代码和WebAssembly包。

根据本发明的示例性实施例,WebAssembly包可包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,其中,所述二级引擎、所述静态代码和所述基础能力库可从静态语言(例如,C语言等)代码被编译成WebAssembly代码,此外,所述基础能力库可包括系统层API。这里,二级引擎和基础能力库被编译成WebAssembly代码,从而具有动态更新的能力。具体地说,可在动态更新的二级引擎中运行静态代码和调用基础能力库,并且基础能力库也可动态地更新其接口能力。例如,第一次客户端可通过网络下载到能够调用系统层的文件能力的基础能力库,当基础能力库被更新后,第二次客户端可通过网络下载到能够调用系统层的文件能力和网络能力的基础能力库。

根据本发明的示例性实施例,二级引擎可以是JS引擎或者WebAssembly引擎(例如,wasm3引擎)。

根据本发明的示例性实施例,与静态代码相应的WebAssembly代码可被打包成第一WebAssembly包,并且第一WebAssembly包、与二级引擎相应的WebAssembly代码和与基础能力库相应的WebAssembly代码可被打包成第二WebAssembly包,作为所述WebAssembly包。

在步骤402,可通过JS引擎解析并执行JS代码,并且编译并执行WebAssembly包。

根据本发明的示例性实施例,JS引擎在执行JS代码时,通过JS代码来调用并执行所述WebAssembly包。例如,JS引擎在执行JS代码时,JS代码通过WeblDL接口将WebAssembly包加载到JS引擎中,JS引擎对WebAssembly包进行编译和执行。具体地说,JS代码在被执行时可调用WebAssembly包中的二级引擎,二级引擎在被调用后可执行WebAssembly包中的静态代码或者可调用WebAssembly包中的基础能力库,基础能力库在被调用后可经由基础能力库中的系统层API来调用系统层的基础能力。

根据本发明的示例性实施例,所述WebAssembly包通过所述二级引擎和所述基础能力库被更新而被更新。当获取到JS代码和更新后的WebAssembly包时,可通过JS引擎解析并执行JS代码,并且编译并执行更新后的WebAssembly包。例如,在WebAssembly包在开发端被更新并被传送到服务器后,客户端再次打开网页或游戏时,可获取到相关的JS代码和更新后的WebAssembly包,客户端的JS引擎可通过执行JS代码来执行更新后的WebAssembly包,从而实现了系统层API调用的动态更新。

图5是示出根据本公开的示例性实施例的产生WebAssembly包的方法的流程图。图5示出的产生WebAssembly包的方法可应用于开发端。

参照图5,在步骤501,可将二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库从静态语言代码编译成WebAssembly代码。例如,可将二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库从C语言代码编译成WebAssembly代码。这里,基础能力库可包括系统层API。这里,二级引擎和基础能力库被编译成WebAssembly代码,从而具有动态更新的能力。具体地说,可在动态更新的二级引擎中运行静态代码和调用基础能力库,并且基础能力库也可动态地更新其接口能力。例如,第一次客户端可通过网络下载到能够调用系统层的文件能力的基础能力库,当基础能力库被更新后,第二次客户端可通过网络下载到能够调用系统层的文件能力和网络能力的基础能力库。

根据本公开的示例性实施例,二级引擎可为JS引擎或WebAssembly引擎。

在步骤502,可将被编译成WebAssembly代码的二级引擎、静态代码和基础能力库打包成一个WebAssembly包。

根据本公开的示例性实施例,可将与静态代码相应的WebAssembly代码打包成第一WebAssembly包;将第一WebAssembly包、与二级引擎相应的WebAssembly代码和与基础能力库相应的WebAssembly代码打包成第二WebAssembly包,作为WebAssembly包。当然,本公开不限于该打包方式,还可使用任何可能的形式进行打包。

根据本公开的示例性实施例,WebAssembly包可在客户端被JS引擎或WebAssembly引擎编译并执行。例如,WebAssembly包在JS引擎执行Javascript代码时,通过所述JS代码被调用并执行。具体地说,在JS代码被执行时,二级引擎可被JS代码调用,基础能力库可被二级引擎调用,系统层的基础能力被基础能力库经由系统层API调用。又例如,所述WebAssembly包在WebAssembly引擎执行WebAssembly代码时,通过所述WebAssembly代码被调用并执行。具体地说,在WebAssembly代码被执行时,二级引擎可被WebAssembly代码调用,基础能力库被二级引擎调用,系统层的基础能力被基础能力库经由系统层API调用。

根据本公开的示例性实施例,可通过更新二级引擎和基础能力库来更新WebAssembly包。被更新后的WebAssembly包可被部署到服务器,当客户端从服务器下载到更新后的WebAssembly包时,在客户端可由Javascript引擎或WebAssembly引擎编译并执行更新后的WebAssembly包。

图6是示出根据本公开的示例性实施例的基于JS引擎的性能优化装置600的框图。图6示出的基于JS引擎的性能优化装置600可应用于客户端。

参照图6,根据本公开的示例性实施例的基于JS引擎的性能优化装置600可包括获取单元601和执行单元602。

获取单元601可获取JS代码和WebAssembly包。例如,当用户通过客户端的浏览器打开一网页或者通过客户端打开游戏时,获取单元601可获取与该网页或游戏相关的JS代码和WebAssembly包。

根据本发明的示例性实施例,WebAssembly包可包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,其中,所述二级引擎、所述静态代码和所述基础能力库可从静态语言(例如,C语言等)代码被编译成WebAssembly代码,此外,所述基础能力库可包括系统层API。这里,二级引擎和基础能力库被编译成WebAssembly代码,从而具有动态更新的能力。具体地说,可在动态更新的二级引擎中运行静态代码和调用基础能力库,并且基础能力库也可动态地更新其接口能力。例如,第一次客户端可通过网络下载到能够调用系统层的文件能力的基础能力库,当基础能力库被更新后,第二次客户端可通过网络下载到能够调用系统层的文件能力和网络能力的基础能力库。

根据本发明的示例性实施例,二级引擎可以是JS引擎或者WebAssembly引擎。

根据本发明的示例性实施例,与静态代码相应的WebAssembly代码可被打包成第一WebAssembly包,并且第一WebAssembly包、与二级引擎相应的WebAssembly代码和与基础能力库相应的WebAssembly代码可被打包成第二WebAssembly包,作为所述WebAssembly包。

执行单元602可通过JS引擎解析并执行JS代码,并且编译并执行WebAssembly包。

根据本发明的示例性实施例,JS引擎在执行JS代码时,通过JS代码来调用并执行所述WebAssembly包。例如,JS引擎在执行JS代码时,JS代码通过WeblDL接口将WebAssembly包加载到JS引擎中,JS引擎对WebAssembly包进行编译和执行。具体地说,JS代码在被执行时可调用WebAssembly包中的二级引擎,二级引擎在被调用后可执行WebAssembly包中的静态代码或者可调用WebAssembly包中的基础能力库,基础能力库在被调用后可经由基础能力库中的系统层API来调用系统层的基础能力。

根据本发明的示例性实施例,所述WebAssembly包通过所述二级引擎和所述基础能力库被更新而被更新。当获取单元601获取到JS代码和更新后的WebAssembly包时,执行单元602可通过客户端的JS引擎解析并执行JS代码,并且编译并执行更新后的WebAssembly包。例如,在WebAssembly包在开发端被更新并被传送到服务器后,客户端再次打开网页或游戏时,获取单元601可获取到相关的JS代码和更新后的WebAssembly包,执行单元602可通过客户端的JS引擎通过执行JS代码来执行更新后的WebAssembly包,从而实现了系统层API调用的动态更新。

图7是示出根据本公开的示例性实施例的产生WebAssembly包的装置的框图。图7示出的产生WebAssembly包的装置可应用于开发端。

参照图7,根据本公开的示例性实施例的产生WebAssembly包的装置700可包括编译单元701和打包单元702。

编译单元701可将二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库从静态语言代码编译成WebAssembly代码。例如,可将二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库从C语言代码编译成WebAssembly代码。这里,基础能力库可包括系统层API。这里,二级引擎和基础能力库被编译成WebAssembly代码,从而具有动态更新的能力。具体地说,可在动态更新的二级引擎中运行静态代码和调用基础能力库,并且基础能力库也可动态地更新其接口能力。例如,第一次客户端可通过网络下载到能够调用系统层的文件能力的基础能力库,当基础能力库被更新后,第二次客户端可通过网络下载到能够调用系统层的文件能力和网络能力的基础能力库。

根据本公开的示例性实施例,二级引擎可为JS引擎或WebAssembly引擎。

打包单元702可将被编译成WebAssembly代码的二级引擎、静态代码和基础能力库打包成一个WebAssembly包。

根据本公开的示例性实施例,打包单元702可将与静态代码相应的WebAssembly代码打包成第一WebAssembly包,并将第一WebAssembly包、与二级引擎相应的WebAssembly代码和与基础能力库相应的WebAssembly代码打包成第二WebAssembly包,作为WebAssembly包。当然,本公开不限于该打包方式,还可使用任何可能的形式进行打包。

根据本公开的示例性实施例,WebAssembly包可在客户端被JS引擎或WebAssembly引擎编译并执行。例如,WebAssembly包在JS引擎执行Javascript代码时,通过所述JS代码被调用并执行。具体地说,在JS代码被执行时,二级引擎可被JS代码调用,基础能力库可被二级引擎调用,系统层的基础能力被基础能力库经由系统层API调用。又例如,所述WebAssembly包在WebAssembly引擎执行WebAssembly代码时,通过所述WebAssembly代码被调用并执行。具体地说,在WebAssembly代码被执行时,二级引擎可被WebAssembly代码调用,基础能力库被二级引擎调用,系统层的基础能力被基础能力库经由系统层API调用。

根据本公开的示例性实施例,装置700还可包括更新单元(未示出)。更更新单元可通过更新二级引擎和基础能力库来更新WebAssembly包。被更新后的WebAssembly包可被部署到服务器,当客户端从服务器下载到更新后的WebAssembly包时,在客户端可由Javascript引擎或WebAssembly引擎编译并执行更新后的WebAssembly包。

图8是示出根据本公开的示例性实施例的基于WebAssembly引擎的性能优化方法的流程图。图8示出的基于WebAssembly引擎的性能优化方法可应用于客户端。

参照图8,在步骤801,可获取WebAssembly代码和WebAssembly包。例如,当用户通过客户端的浏览器打开一网页或者通过客户端打开游戏时,可获取与该网页或游戏相关的WebAssembly代码和WebAssembly包。

根据本发明的示例性实施例,WebAssembly包可包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,其中,所述二级引擎、所述静态代码和所述基础能力库可从静态语言(例如,C语言等)代码被编译成WebAssembly代码,此外,所述基础能力库可包括系统层API。这里,二级引擎和基础能力库被编译成WebAssembly代码,从而具有动态更新的能力。具体地说,可在动态更新的二级引擎中运行静态代码和调用基础能力库,并且基础能力库也可动态地更新其接口能力。例如,第一次客户端可通过网络下载到能够调用系统层的文件能力的基础能力库,当基础能力库被更新后,第二次客户端可通过网络下载到能够调用系统层的文件能力和网络能力的基础能力库。

根据本发明的示例性实施例,二级引擎可以是JS引擎或者WebAssembly引擎。

根据本发明的示例性实施例,与静态代码相应的WebAssembly代码可被打包成第一WebAssembly包,并且第一WebAssembly包、与二级引擎相应的WebAssembly代码和与基础能力库相应的WebAssembly代码可被打包成第二WebAssembly包,作为所述WebAssembly包。

在步骤802,可通过WebAssembly引擎解析并执行WebAssembly代码,并且编译并执行WebAssembly包。

根据本发明的示例性实施例,WebAssembly引擎(例如,wasm3引擎)在执行WebAssembly代码时,通过WebAssembly代码来调用并执行所述WebAssembly包。例如,WebAssembly引擎在执行WebAssembly代码时,WebAssembly代码通过WeblDL接口将WebAssembly包加载到WebAssembly引擎中,WebAssembly引擎对WebAssembly包进行编译和执行。具体地说,WebAssembly代码在被执行时可调用WebAssembly包中的二级引擎,二级引擎在被调用后可执行WebAssembly包中的静态代码或者可调用WebAssembly包中的基础能力库,基础能力库在被调用后可经由基础能力库中的系统层API来调用系统层的基础能力。

根据本发明的示例性实施例,所述WebAssembly包通过所述二级引擎和所述基础能力库被更新而被更新。当获取到WebAssembly代码和更新后的WebAssembly包时,可通过WebAssembly引擎解析并执行WebAssembly代码,并且编译并执行更新后的WebAssembly包。例如,在WebAssembly包在开发端被更新并被传送到服务器后,客户端再次打开网页或游戏时,可获取到相关的WebAssembly代码和更新后的WebAssembly包,客户端的WebAssembly引擎可通过执行WebAssembly代码来执行更新后的WebAssembly包,从而实现了系统层API调用的动态更新。

图9是示出根据本公开的示例性实施例的基于WebAssembly引擎的性能优化装置的框图。图9示出的基于WebAssembly引擎的性能优化装置可应用于客户端。

参照图9,根据本公开的示例性实施例的基于WebAssembly引擎的性能优化装置900可包括获取单元901和执行单元902。

获取单元901可获取WebAssembly代码和WebAssembly包。例如,当用户通过客户端的浏览器打开一网页或者通过客户端打开游戏时,获取单元901可获取与该网页或游戏相关的WebAssembly代码和WebAssembly包。

根据本发明的示例性实施例,WebAssembly包可包括二级引擎以及能够在所述二级引擎运行的静态代码和基础能力库,其中,所述二级引擎、所述静态代码和所述基础能力库可从静态语言(例如,C语言等)代码被编译成WebAssembly代码,此外,所述基础能力库可包括系统层API。这里,二级引擎和基础能力库被编译成WebAssembly代码,从而具有动态更新的能力。具体地说,可在动态更新的二级引擎中运行静态代码和调用基础能力库,并且基础能力库也可动态地更新其接口能力。例如,第一次客户端可通过网络下载到能够调用系统层的文件能力的基础能力库,当基础能力库被更新后,第二次客户端可通过网络下载到能够调用系统层的文件能力和网络能力的基础能力库。

根据本发明的示例性实施例,二级引擎可以是JS引擎或者WebAssembly引擎。

根据本发明的示例性实施例,与静态代码相应的WebAssembly代码可被打包成第一WebAssembly包,并且第一WebAssembly包、与二级引擎相应的WebAssembly代码和与基础能力库相应的WebAssembly代码可被打包成第二WebAssembly包,作为所述WebAssembly包。

执行单元902可通过WebAssembly引擎解析并执行WebAssembly代码,并且编译并执行WebAssembly包。

根据本发明的示例性实施例,WebAssembly引擎在执行WebAssembly代码时,通过WebAssembly代码来调用并执行所述WebAssembly包。例如,WebAssembly引擎在执行WebAssembly代码时,WebAssembly代码通过WeblDL接口将WebAssembly包加载到WebAssembly引擎中,WebAssembly引擎对WebAssembly包进行编译和执行。具体地说,WebAssembly代码在被执行时可调用WebAssembly包中的二级引擎,二级引擎在被调用后可执行WebAssembly包中的静态代码或者可调用WebAssembly包中的基础能力库,基础能力库在被调用后可经由基础能力库中的系统层API来调用系统层的基础能力。

根据本发明的示例性实施例,所述WebAssembly包通过所述二级引擎和所述基础能力库被更新而被更新。当获取单元901获取到WebAssembly代码和更新后的WebAssembly包时,执行单元902可通过客户端的WebAssembly引擎解析并执行WebAssembly代码,并且编译并执行更新后的WebAssembly包。例如,在WebAssembly包在开发端被更新并被传送到服务器后,客户端再次打开网页或游戏时,获取单元901可获取到相关的WebAssembly代码和更新后的WebAssembly包,执行单元902可通过客户端的WebAssembly引擎可通过执行WebAssembly代码来执行更新后的WebAssembly包,从而实现了系统层API调用的动态更新。

图10是根据本公开的示例性实施例的电子设备1000的框图。

参照图10,电子设备1000包括至少一个存储器1001和至少一个处理器1002,所述至少一个存储器1001中存储有计算机可执行指令集合,当计算机可执行指令集合被至少一个处理器1002执行时,执行根据本公开的示例性实施例的基于Javascript引擎的性能优化方法、基于WebAssembly引擎的性能优化方法或产生WebAssembly包的方法。

作为示例,电子设备1000可以是PC计算机、平板装置、个人数字助理、智能手机、或其他能够执行上述指令集合的装置。这里,电子设备1000并非必须是单个的电子设备,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。电子设备1000还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子设备。

在电子设备1000中,处理器1002可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。

处理器1002可运行存储在存储器1001中的指令或代码,其中,存储器1001还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,例如,通过网络与服务器通信指令和/或数据,其中,网络接口装置可采用任何已知的传输协议。

存储器1001可与处理器1002集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储器1001可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储器1001和处理器1002可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器602能够读取存储在存储器中的文件。

此外,电子设备1000还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。电子设备1000的所有组件可经由总线和/或网络而彼此连接。

根据本公开的示例性实施例,还可提供一种存储指令的计算机可读存储介质,其中,当指令被至少一个处理器运行时,促使至少一个处理器执行根据本公开的基于Javascript引擎的性能优化方法、基于WebAssembly引擎的性能优化方法或产生WebAssembly包的方法。这里的计算机可读存储介质的示例包括:只读存储器(ROM)、随机存取可编程只读存储器(PROM)、电可擦除可编程只读存储器(EEPROM)、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存、非易失性存储器、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、蓝光或光盘存储器、硬盘驱动器(HDD)、固态硬盘(SSD)、卡式存储器(诸如,多媒体卡、安全数字(SD)卡或极速数字(XD)卡)、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘以及任何其他装置,所述任何其他装置被配置为以非暂时性方式存储计算机程序以及任何相关联的数据、数据文件和数据结构并将所述计算机程序以及任何相关联的数据、数据文件和数据结构提供给处理器或计算机使得处理器或计算机能执行所述计算机程序。上述计算机可读存储介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,此外,在一个示例中,计算机程序以及任何相关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得计算机程序以及任何相关联的数据、数据文件和数据结构通过一个或多个处理器或计算机以分布式方式存储、访问和执行。

根据本公开的示例性实施例,还可提供一种计算机程序产品,该计算机程序产品中的指令可由计算机设备的处理器执行以完成根据本公开的示例性实施例的基于Javascript引擎的性能优化方法、基于WebAssembly引擎的性能优化方法或产生WebAssembly包的方法。

根据本公开的基于Javascript引擎的性能优化方法和装置、基于WebAssembly引擎的性能优化方法和装置、产生WebAssembly包的方法和装置,可将一个单独的二级引擎和包括系统层API的基础能力库编译打包成WebAssembly格式,使得二级引擎和基础能力库具有动态更新的能力,使得客户端的引擎可动态地编译并执行动态的二级引擎和基础能力库,从而实现系统层API的动态更新,从而达到既可提高引擎执行效率,又可快速更新引擎提供的接口能力的效果。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号