CN112783574B - 应用程序开发方法、装置、设备和存储介质 - Google Patents
应用程序开发方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN112783574B CN112783574B CN202110141970.3A CN202110141970A CN112783574B CN 112783574 B CN112783574 B CN 112783574B CN 202110141970 A CN202110141970 A CN 202110141970A CN 112783574 B CN112783574 B CN 112783574B
- Authority
- CN
- China
- Prior art keywords
- instructions
- call
- calling
- instruction
- application program
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 238000011161 development Methods 0.000 title claims abstract description 43
- 230000006870 function Effects 0.000 claims description 39
- 230000006399 behavior Effects 0.000 claims description 19
- 238000013500 data storage Methods 0.000 claims description 5
- 230000003993 interaction Effects 0.000 claims description 5
- 238000012216 screening Methods 0.000 claims description 4
- 238000012360 testing method Methods 0.000 description 46
- 239000008186 active pharmaceutical agent Substances 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 11
- 238000004590 computer program Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 238000005457 optimization Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004044 response Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000003339 best practice Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
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
本公开公开了一种应用程序开发方法,涉及计算机技术领域,具体涉及程序开发和小程序领域。该方法包括获取应用程序,应用程序包含针对应用程序接口的多个调用指令;在多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令;对至少两个第一调用指令进行合并,得到第二调用指令;以及利用第二调用指令替换至少两个第一调用指令。本公开还公开了一种应用程序开发装置、设备和存储介质。
Description
技术领域
本公开涉及计算机技术领域,具体涉及程序开发和小程序领域,尤其涉及应用程序开发方法、装置、设备和存储介质。
背景技术
小程序是一种通过渲染层和逻辑层物理隔离的可纯离线工作的运行时生态。基于标准JS(JavaScript)扩展的DSL(Domain Specific Language,领域特定语言)语法,以及依托宿主APP的NA(native,原生)化能力加持,使得小程序拥有更为接近H5的开发效率以及无限接近NA的用户体验而广受开发人员青睐。各种小程序开发平台都提供了诸多功能强大的API(Application Programming Interface,应用程序接口)能力供开发人员使用。但随之而来的,API的调用在方便开发人员完成功能时,也会有一定的操作耗时,若开发人员使用不当,则可能导致开发出的小程序体验不佳的性能问题。
发明内容
本公开提供了一种应用程序开发方法、装置、设备以及存储介质。
根据本公开的一方面,提供了一种应用程序开发方法,包括:
获取应用程序,所述应用程序包含针对应用程序接口的多个调用指令;
在所述多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令;
对至少两个第一调用指令进行合并,得到第二调用指令;以及
利用第二调用指令替换所述至少两个第一调用指令。。
根据本公开的另一方面,提供了一种应用程序开发装置,包括:
获取模块,配置为获取应用程序,所述应用程序包含针对应用程序接口的多个调用指令;
指令确定模块,配置为在所述多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令;
合并模块,配置为对至少两个第一调用指令进行合并,得到第二调用指令;以及
替换模块,配置为利用第二调用指令替换所述至少两个第一调用指令。
根据本公开的另一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行上述方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是本公开实施例所涉及的应用场景的示意图;
图2是根据本公开实施例的应用程序开发方法的流程图;
图3A是小程序运行过程中频繁调用相同API的执行示意图;
图3B是利用根据本公开实施例的应用程序开发方法开发的小程序运行过程中API调用的执行示意图;
图4是利用本公开实施例的应用程序开发方法开发的小程序运行框架的示例;
图5是根据本公开实施例的应用程序开发装置的框图;以及
图6是用来实现本公开实施例的应用程序开发方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是本公开实施例所涉及的应用场景的示意图。在图1中,示意性示出了多个终端设备101、102、103和104。终端设备101、102、103和104可以是任何类型的电子设备,例如台式计算机、膝上型计算机、个人数字助理PDA、智能电话、可穿戴设备等。本公开的实施例对此不做限定。如图1所示,在终端设备101上安装有可以用于小程序开发的开发者工具。开发者工具可以是由小程序开发平台所提供的客户端程序,其中提供有针对小程序开发的编辑、编译、调试、模拟等辅助工具。根据本公开实施例的应用程序开发方法可以在开发者工具中执行,可以帮助小程序开发人员优化程序,从而简化小程序的开发过程并进一步提升所开发的小程序的性能。如图1所示,利用终端设备101上的开发者工具开发出来的小程序可以运行于终端设备102、103和104上,以在终端设备102、103和104上实现所开发的功能。
容易理解的是,终端设备101、102、103和104在图1所示的应用场景中功能相同,可以互换。例如,利用终端设备101上的开发者工具开发出来的小程序也可以运行于终端设备101自身的应用程序上,或者在终端设备102、103和104上也可以安装有开发者工具。另外,在本公开的实施例中,对开发者工具的类型不做限定,根据本公开实施例的应用程序开发方法可以在任何合适的开发工具上执行并提供相关功能。
图2是根据本公开实施例的应用程序开发方法200的流程图。如图2所示,该应用程序开发方法200包括以下步骤:
在步骤S210中,获取应用程序,该应用程序包含针对应用程序接口的多个调用指令。
在步骤S220中,在多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令。
在步骤S230中,对至少两个第一调用指令进行合并,得到第二调用指令。
在步骤S240中,利用第二调用指令替换至少两个第一调用指令。
具体的,在步骤S210中,所获取的应用程序可以是利用开发者工具开发的。在这些应用程序中,可以包含有应用程序开发平台(例如小程序开发平台)所提供各种API的调用指令。例如,由小程序开发平台提供的API具有丰富的端能力,可以帮助开发人员开发出具有原生APP体验的小程序。通过在应用程序中添加API调用指令来使用这些API所提供的功能。下面的表1简单例举了几种常用的API及其功能描述。
表1API示例及功能描述
API名称 | API功能描述 |
setTimeout | 设定一个定时器,在定时到期以后执行注册的回调函数 |
setStorage | 将数据存储在本地缓存指定的key中 |
getStorage | 从本地缓存中获取指定key对应的内容 |
getImageInfo | 获取图片信息 |
getSystemInfo | 获取系统信息 |
showTabBar | 显示tabBar |
接下来,在步骤S220中,在多个API调用指令中选定第一调用指令。在具体的实施例中,可以根据API执行时的行为类型来选定第一调用指令。例如,可以将行为类型为用户交互类行为的API的调用确定为不可合并的,将行为类型为非用户交互类行为(即预设行为类型)的API的调用确定为可合并的。根据实施例,交互类行为类型的API在每次调用时都会产生用户能够感知的影响。例如UI(User Interface,用户界面)类API在每次调用时,都会产生用户可感知的影响。换言之,在调用这类API时,需要实时地返回API执行的返回结果以提供给用户。因此,UI类API的调用被确定为不可合并的。根据实施例,非用户交互类行为的API在每次调用时,其执行过程对用户来说都是透明的。即用户并不需要了解这类API执行的返回结果是何时返回的。
接下来,在步骤S230中,根据实施例,在确保功能能够正确实现的前提下,可以对非用户交互类行为的API的实际执行过程进行控制,例如,将这类API的调用进行批量调用,并批量返回执行的返回结果。
在本公开的实施例中,针对选定的第一调用指令进行合并例如可以是将选定的第一调用指令中的一部分第一调用指令进行合并,以得到一个第二调用指令,该第二调用指令可以实现被合并的第一调用指令的功能。可以将选定的第一调用指令中的另一部分第一调用指令也进行合并,以得到另一个第二调用指令,以实现被合并的该另一部分第一调用指令的功能。即可以分别第一调用指令中的第一调用指令的集合,分别得到多个第二调用指令。
接下来,在步骤S240中,在应用程序中,将经合并的第一调用指令替换为第二调用指令。根据本公开实施例的应用程序开发方法可以在利用开发者工具对应用程序进行编译的过程中执行,即在编译过程中实现对的修改和优化。
在具体的实施例中,应用程序可以包括包含有针对应用程序接口的多个调用指令的应用程序代码。
由于每一次API的调用都会有一定的操作耗时,因此,当开发者使用不当,频繁调用相同API时则可能造成体验不佳的性能问题。图3A是小程序运行过程中频繁调用相同API的执行示意图。如图3A所示,301表示开发的应用程序的代码,其中包含有多个相同API的调用,在图3A中以带有阴影的区块示出。302表示应用程序代码301所实现的小程序依托的宿主APP,例如论坛APP。在小程序执行过程中,通过API调用指令调用相应的API功能,以从宿主APP 301获取相应的服务,例如获取数据。当API调用时会占用较多JS引擎执行时间,频繁API的调用会阻塞JS线程执行,导致性能体验不佳。而API调用过程中,耗时部分主要集中为API调用过程的通信开销。每次API调用都需要启动JS引擎来向宿主APP请求相应的服务,并由宿主APP向API调用提供返回结果来作为响应。如图3A所示,带箭头的虚线表示上述请求和响应的过程,可以看出,多次频繁调用API的通信开销巨大,这对便捷快速的小程序来说,必然导致用户体验不佳。
根据本公开实施例的应用程序开发方法对应用程序的开发代码进行修改和优化。通过将频繁的使用的可合并的API调用指令进行合并,进而通过一次API调用返回一系列操作结果,由此可以有效地节省多次API调用的耗时,优化开发的应用程序代码中频繁调用API所导致的性能问题。
图3B是利用根据本公开实施例的应用程序开发方法开发的小程序运行过程中API调用的执行示意图。如图3B所示,分别将多个API调用指令合并为可以批量执行的一个API调用指令。在修改后的应用程序代码中,不再包含多个相同的API调用指令(例如第一调用指令),而是由对应的一个调用指令(例如第二调用指令)来代替。该第二调用指令在执行时,仅需要启动一次JS引擎来向宿主APP请求相应的服务,宿主APP在响应中提供针对多个第一调用指令的批量返回结果。即根据本公开的实施例开发的小程序在运行时,不需要频繁地与宿主APP进行通信,由此可以优化小程序的性能,提升用户使用小程序时的体验。
此外,应用程序代码中的API调用取决于开发人员的业务逻辑。针对频繁API调用的优化手段,一般只能通过最佳实践的文章或建议触达开发人员,告知其进行修改,同时要求开发人员具有较强的编码意识,因此对代码的优化覆盖能力有限,且优化成本较高,优化效果不理想。
根据本公开实施例的应用程序开发方法的执行过程对开发人员是透明的。换言之,开发人员在应用程序代码的编写阶段无需考虑API调用指令对代码性能的影响,而致力于代码功能的实现。在代码编译过程中,由开发者工具执行根据本公开实施例的合并过程,从而自动地实现对代码的优化,无需开发人员的参与。因此,根据本公开实施例的应用程序开发方法可以极大地简化应用程序的开发过程。
在本公开的另一个实施例中,在确定涉及预设行为类型的多个调用指令作为多个第一调用指令之前,还可以根据调用指令的使用频率和执行调用指令的耗时中的至少一者,对应用程序中包含的多个调用指令进行筛选。以便筛选得到频繁使用的调用指令。根据实施例,可以在筛选得到的频繁使用的调用指令中确定第一调用指令。对于不频繁使用的调用指令,即使每次调用API时都需要较大的通信开销,但若使用不频繁,也可以不必考虑对其进行合并优化。根据实施例,可以基于调用指令的使用频率和执行调用指令的耗时两者综合考察调用指令的使用频繁程度。在具体的实施例中,可以基于由调用指令的使用频率和执行调用指令的耗时的乘积所构成的指标来考察调用指令的使用频繁程度。在另一个具体的实施例中,也可以基于由调用指令的使用频率和执行调用指令的耗时的加权平均所构成的指标来考察调用指令的使用频繁程度。本公开的实施例对此不做限定。
此外,可以离线处理上述筛选过程。根据实施例,可以事先收集应用程序中频繁调用的API的集合。例如,可以通过对线上小程序执行过程进行买点,然后对API调用统计打点来得到频繁使用的API调用的统计数据。对统计数据中的高频API和耗时API进行梳理,获取频繁使用的API列表。根据实施例,可以将获取的API列表植入在开发者工具中,在利用开发者工具优化应用程序代码是,通过将应用程序代码中的API调用指令与API列表中的API进行比较,来获得频繁使用的API。
由于应用程序代码中的API调用取决于开发人员的业务逻辑,因此并不是所确定的所有第一调用指令在任何应用程序代码中都是可合并的,需要针对具体的应用程序代码确定第一调用指令的合并规则。
根据本公开的实施例,在对至少两个第一调用指令进行合并之前,遍历多个第一调用指令,确定第一调用指令的合并规则,以及根据确定的合并规则在多个第一调用指令中确定可合并的至少两个第一调用指令。以下实施例中,以可合并调用指令中的数据存储类指令和信息获取类指令为例说明根据本公开实施例的合并规则的确定。但应理解,所确定的合并规则不仅仅适用于数据存储类指令和信息获取类指令,并且,可以基于下述实施例中确定合并规则的基本思想,确定其他类型的可合并调用指令的合并规则。
根据实施例,在第一调用指令为数据存储类指令的情况下,对代码中位置相邻的两个第一调用指令进行比较,在确定该相邻的两个第一调用指令属于同一个函数,且该相邻的两个第一调用指令用于执行相同操作的情况下,确定该相邻的两个第一调用指令的合并规则为可合并的。
例如,对于连续的set操作进行合并,中间不能存在get操作,以避免数据获取不同步。对于连续的get操作进行合并,中间不能存在set操作,以避免数据存储不同步。举例而言,参考如下所示的一段应用程序代码:
针对第一个get操作“get(‘test1’)”和第二个get操作“get(‘test2’)”进行比较可知,get操作“get(‘test1’)”和get操作“get(‘test2’)”均包含在函数A(由function A()定义)中,并且两者均为get操作,因此可以确定get操作“get(‘test1’)”和get操作“get(‘test2’)”属于同一个函数,且它们是用于执行相同操作的API,由此确定get操作“get(‘test1’)”和get操作“get(‘test2’)”是可合并的。针对第二个get操作“get(‘test2’)”和第三个get操作“get(‘test3’)”进行比较可知,get操作“get(‘test2’)”和get操作“get(‘test3’)”均包含在函数A(由function A()定义)中,并且两者均为get操作,因此可以确定get操作“get(‘test2’)”和get操作“get(‘test3’)”属于同一个函数,且它们是用于执行相同操作的API,由此确定get操作“get(‘test2’)”和get操作“get(‘test3’)”也是可合并的。针对第三个get操作“get(‘test3’)”和第四个set操作“set(‘test4’)”进行比较可知,get操作“get(‘test3’)”和set操作“set(‘test4’)”均包含在函数A(由function A()定义)中,但get操作和set操作不是执行相同操作的API,因此可以确定get操作“get(‘test3’)”和set操作“set(‘test4’)”不是可合并的。针对第六个get操作“get(‘test6’)”和第七个get操作“get(‘test7’)”进行比较可知,get操作“get(‘test6’)”包含在函数A(由function A()定义)中,而get操作“get(‘test7’)”包含在另一函数(参见setTimeout())中,因此,虽然get操作“get(‘test6’)”和get操作“get(‘test7’)”均为get操作,但由于不属于同一个函数,因此确定get操作“get(‘test6’)”和get操作“get(‘test7’)”不是可合并的。以此类推,可以针对任意相邻的两个第一调用指令判断其是否是可合并的,由此得到应用程序代码中所包含的全部第一调用指令的合并规则。
根据实施例,在第一调用指令为信息获取类指令的情况下,对代码中同一个函数中所包含的用于执行相同操作的第一调用指令的返回结果进行查询,将返回结果相同的第一调用指令的合并规则确定为可合并的。若通过信息获取类指令所获取的信息是稳定的,则认为API的调用指令是可合并的。若通过信息获取类指令所获取的信息可能发生变化,则认为API的调用指令是不可合并的。
例如,对于信息获取类API getSwanId的调用指令:getSwanId(https://smartprogram.baidu.com/docs/develop/api/open/userinfo_swan-getSwanId/),认为Id在生成后,在一个函数内是稳定的,即在上述调用指令所属的函数内部,返回结果Id的值是相同的。因此,可以确定getSwanId调用指令是可合并的。又例如,对于信息获取类APIgetSystemInfo的调用指令:getSystemInfo(https://smartprogram.baidu.com/docs/develop/api/device_sys/swan-getSystemInfo/),认为在API多次调用时,数据(例如窗口高度)可能会发生变化,即在一个函数内,窗口高度的返回结果是不相同的。因此,可以确定getSystemInfo调用指令是不可合并的。
根据实施例,在确定合并规则时,可以首先针对每条第一调用指令进行标记,然后根据标记结果确定哪些第一调用指令可以合并在一起。在具体的实施例中,可以通过加批注的方式来进行标记。针对前述实施例中的应用程序代码所添加的标记如下所示:
根据本公开实施例的上述合并规则的确定过程可以由开发者工具执行,无需开发人员参与,简化了应用程序的开发过程,降低了开发成本。
根据实施例,第二调用指令可以包括合并字段和标记字段。其中,合并字段用于批量执行经合并的至少两个第一调用指令,标记字段用于指示经合并的至少两个第一调用指令的返回结果的位置。
进一步地,根据实施例,利用第二调用指令替换至少两个第一调用指令可以包括添加合并字段,并将至少两个第一调用指令在代码中的位置替换为各自对应的标记字段。针对前述实施例中的应用程序代码,利用第二调用指令替换之后的程序代码如下:
如上所示,将第一调用指令get(‘test1’)、get(‘test2’)和get(‘test3’)进行合并,并以第二调用指令的合并字段getTransaction(‘test1’,‘test2’,‘test3’)来进行第一调用指令get(‘test1’)、get(‘test2’)和get(‘test3’)的批量执行。在第一调用指令get(‘test1’)、get(‘test2’)和get(‘test3’)原调用位置分别替换为标记字段getMark(‘test1’)、getMark(‘test2’)和getMark(‘test3’)。
根据实施例,第二调用指令的合并字段可以执行不同情况的第一调用指令的合并。当合并的第一调用指令例如为get(‘test1’)、get(‘test2’)和get(‘test3’)时,第二调用指令可以实现各个第一调用指令的批量执行。例如,可以并行执行或串行执行get(‘test1’)、get(‘test2’)和get(‘test3’)。当合并的第一调用指令例如为getSwanId时,第二调用指令可以将多个第一调用指令合并为一个getSwanId的执行。
根据本公开的实施例,利用第二调用指令替换应用程序代码中的频繁使用的第一调用指令,可以提升代码的性能,并且可以确保代码功能的正确性。
根据实施例,根据本公开实施例的应用程序开发方法开发的小程序可以在用户的终端设备上运行。根据实施例,在运行小程序时,执行相关的应用程序代码,并利用第二调用指令执行对第一调用指令所针对的API的调用。根据实施例,利用第二调用指令对至少两个第一调用指令所针对的应用程序接口进行调用,得到第二调用指令的批量返回结果,并根据标记字段所指示的每个第一调用指令的返回结果的位置,返回批量返回结果。
图4是利用本公开实施例的应用程序开发方法开发的小程序运行框架的示例。如图4所示,渲染层401和逻辑层402在物理上隔离。渲染层401用于控制页面展示,逻辑层402用于事件逻辑处理。JS前端框架403用于解析由应用程序定义的操作。如图4所示,JS前端框架403可以对应用程序代码中的合并操作,例如第二调用指令进行解析,并将解析结果派发给宿主APP,如APP功能404所示。APP功能404响应小程序API合并操作,并组合批量返回结果返回JS前端框架403。JS前端框架403处理APP功能404返回的结果,并通过缓存405对返回结果进行必要的缓存。JS前端框架403继续获取应用程序代码中的标记字段,将返回结果分别返回到对应的标记字段所指示的位置,然后回到小程序代码继续执行。根据实施例,对于同步数据存储类指令,APP功能404可以直接将合并操作的返回结果统一返回JS前端框架403。对于异步数据存储类指令,APP功能404利用合并操作的回调函数方式将返回结果统一返回给JS前端框架403。
根据本公开实施例的应用程序的开发方法,通过开发者工具对应用程序的代码进行分析,将应用程序代码中频繁的API调用进行分类,并基于所确定的合并规则合并成批量API调用,从而能够在运行时通过一次调用将合并结果批量返回。根据本公开实施例的方法,可以有效提升API的响应速度,并且不需要开发人员参与任何代码的修改,由此使得此优化手段可以对所有小程序进行全面覆盖。根据本公开实施例的方法,可以有效解决应用程序代码中频繁调用API带来的性能问题,在对开发人员完全透明和不影响功能的前提下,能够有效提升小程序的性能体验。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图5示出了根据本公开实施例的应用程序开发装置500的框图。如图5所示,该应用程序开发装置500包括获取模块510、指令确定模块520、合并模块530和替换模块540。
根据实施例,获取模块510被配置为获取应用程序的代码,该应用程序的代码包含针对应用程序接口的多个调用指令。指令确定模块520被配置为在多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令。合并模块530被配置为对至少两个第一调用指令进行合并,得到第二调用指令。替换模块540被配置为利用第二调用指令替换至少两个第一调用指令。
以上各功能模块的具体操作可以参考前述实施例中的应用程序开发方法200的操作步骤来获取,此处不再赘述。
图6示出了可以用来实施本公开的实施例的示例电子设备600的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图6所示,设备600包括计算单元601,其可以根据存储在只读存储器(ROM)602中的计算机程序或者从存储单元608加载到随机访问存储器(RAM)603中的计算机程序,来执行各种适当的动作和处理。在RAM 603中,还可存储设备600操作所需的各种程序和数据。计算单元601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
设备600中的多个部件连接至I/O接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元601执行上文所描述的各个方法和处理,例如应用程序开发方法。例如,在一些实施例中,应用程序开发方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由ROM 602和/或通信单元609而被载入和/或安装到设备600上。当计算机程序加载到RAM 603并由计算单元601执行时,可以执行上文描述的应用程序开发方法的一个或多个步骤。备选地,在其他实施例中,计算单元601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行应用程序开发方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (11)
1.一种应用程序开发方法,包括:
获取应用程序,所述应用程序包含针对应用程序接口的多个调用指令;
在所述多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令;
对至少两个第一调用指令进行合并,得到第二调用指令,其中,所述第二调用指令包括合并字段和标记字段,所述合并字段用于批量执行所述至少两个第一调用指令,所述标记字段用于指示所述至少两个第一调用指令的返回结果的位置;以及
利用第二调用指令替换所述至少两个第一调用指令;
所述方法还包括:
在确定涉及预设行为类型的多个调用指令作为多个第一调用指令之前,根据调用指令的使用频率和执行所述调用指令的耗时中的至少一者,对所述应用程序中包含的多个调用指令进行筛选。
2. 根据权利要求1所述的方法,还包括:在对至少两个第一调用指令进行合并之前,
遍历多个第一调用指令,确定第一调用指令的合并规则;以及
根据确定的合并规则在所述多个第一调用指令中确定可合并的至少两个第一调用指令。
3.根据权利要求2所述的方法,其中,所述确定第一调用指令的合并规则包括:
在所述第一调用指令为数据存储类指令的情况下,对所述应用程序中位置相邻的两个第一调用指令进行比较,在确定该相邻的两个第一调用指令属于同一个函数,且该相邻的两个第一调用指令用于执行相同操作的情况下,确定该相邻的两个第一调用指令为可合并的第一调用指令。
4.根据权利要求2所述的方法,其中,所述确定第一调用指令的合并规则还包括:
在所述第一调用指令为信息获取类指令的情况下,对所述应用程序中同一个函数中所包含的用于执行相同操作的第一调用指令的返回结果进行查询,将返回结果相同的第一调用指令确定为可合并的第一调用指令。
5. 根据权利要求1所述的方法,其中,所述利用第二调用指令替换所述至少两个第一调用指令包括:
添加所述合并字段;以及
在所述应用程序中将所述至少两个第一调用指令替换为所述标记字段。
6. 根据权利要求5所述的方法,还包括:
利用所述第二调用指令对所述至少两个第一调用指令所针对的应用程序接口进行调用,得到所述第二调用指令的批量返回结果;以及
根据所述标记字段所指示的每个第一调用指令的返回结果的位置,返回所述批量返回结果。
7.根据权利要求1所述的方法,其中,所述在所述多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令包括:
在所述调用指令涉及的行为是非用户交互类行为的情况下,将所述调用指令确定为第一调用指令。
8.根据权利要求1所述的方法,其中,所述应用程序包括包含有针对应用程序接口的多个调用指令的应用程序代码。
9.一种应用程序开发装置,包括:
获取模块,配置为获取应用程序,所述应用程序包含针对应用程序接口的多个调用指令;
指令确定模块,配置为在所述多个调用指令中确定涉及预设行为类型的多个调用指令作为多个第一调用指令;
合并模块,配置为对至少两个第一调用指令进行合并,得到第二调用指令,其中,所述第二调用指令包括合并字段和标记字段,所述合并字段用于批量执行所述至少两个第一调用指令,所述标记字段用于指示所述至少两个第一调用指令的返回结果的位置;以及
替换模块,配置为利用第二调用指令替换所述至少两个第一调用指令;
所述装置还包括模块,用于在确定涉及预设行为类型的多个调用指令作为多个第一调用指令之前,根据调用指令的使用频率和执行所述调用指令的耗时中的至少一者,对所述应用程序中包含的多个调用指令进行筛选。
10. 一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
11.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110141970.3A CN112783574B (zh) | 2021-02-02 | 2021-02-02 | 应用程序开发方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110141970.3A CN112783574B (zh) | 2021-02-02 | 2021-02-02 | 应用程序开发方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112783574A CN112783574A (zh) | 2021-05-11 |
CN112783574B true CN112783574B (zh) | 2023-10-27 |
Family
ID=75760516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110141970.3A Active CN112783574B (zh) | 2021-02-02 | 2021-02-02 | 应用程序开发方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112783574B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116578647A (zh) * | 2023-05-29 | 2023-08-11 | 玖章算术(浙江)科技有限公司 | 一种数据同步方法、装置、系统、计算机可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001097036A1 (fr) * | 2000-06-14 | 2001-12-20 | Seiko Epson Corporation | Procede et systeme de mise au point d'applicatifs et support de memoire sur lequel est enregistre un logiciel de mise au point d'applicatifs |
CN105610915A (zh) * | 2015-12-15 | 2016-05-25 | 深圳市慧动创想科技有限公司 | 数据上报方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8364750B2 (en) * | 2008-06-24 | 2013-01-29 | Microsoft Corporation | Automated translation of service invocations for batch processing |
US9104525B2 (en) * | 2013-01-22 | 2015-08-11 | Microsoft Technology Licensing, Llc | API usage pattern mining |
-
2021
- 2021-02-02 CN CN202110141970.3A patent/CN112783574B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001097036A1 (fr) * | 2000-06-14 | 2001-12-20 | Seiko Epson Corporation | Procede et systeme de mise au point d'applicatifs et support de memoire sur lequel est enregistre un logiciel de mise au point d'applicatifs |
CN105610915A (zh) * | 2015-12-15 | 2016-05-25 | 深圳市慧动创想科技有限公司 | 数据上报方法和系统 |
Non-Patent Citations (1)
Title |
---|
基于聚类和偏序序列的API用法模式挖掘;王树怡;董东;;计算机科学(S1);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112783574A (zh) | 2021-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113342345A (zh) | 深度学习框架的算子融合方法、装置 | |
CN107632929B (zh) | 一种检测内存泄漏的方法和装置 | |
CN112506581A (zh) | 渲染小程序的方法、装置、电子设备和可读存储介质 | |
CN114816393B (zh) | 信息生成方法、装置、设备以及存储介质 | |
CN116451174A (zh) | 任务执行装置、方法、电子设备和存储介质 | |
CN112783574B (zh) | 应用程序开发方法、装置、设备和存储介质 | |
CN113127357B (zh) | 单元测试方法、装置、设备、存储介质及程序产品 | |
CN107436839B (zh) | 进程负载获取方法、电子终端及计算机可读存储介质 | |
CN115809688B (zh) | 一种模型调试方法、装置、电子设备及存储介质 | |
CN115186738B (zh) | 模型训练方法、装置和存储介质 | |
CN114756211B (zh) | 模型训练方法、装置、电子设备和存储介质 | |
CN115329143A (zh) | 有向无环图评估方法、装置、设备及存储介质 | |
CN116185389A (zh) | 一种代码生成方法、装置、电子设备及介质 | |
CN113377295B (zh) | 多生产者单消费者的数据存储和读取方法、装置、设备 | |
CN115168358A (zh) | 数据库访问方法、装置、电子设备及存储介质 | |
CN115269431A (zh) | 一种接口测试方法、装置、电子设备及存储介质 | |
CN114386577A (zh) | 用于执行深度学习模型的方法、设备和存储介质 | |
CN114741294A (zh) | 一种页面的调试方法、装置、设备及存储介质 | |
CN113495841A (zh) | 一种兼容性检测方法、装置、设备、存储介质及程序产品 | |
CN112860235A (zh) | 处理文本的方法、装置、设备和存储介质 | |
CN113691403A (zh) | 拓扑节点配置方法、相关装置及计算机程序产品 | |
CN113360407B (zh) | 函数的定位方法、装置、电子设备及可读存储介质 | |
CN113900734B (zh) | 一种应用程序文件配置方法、装置、设备及存储介质 | |
CN116341663A (zh) | 深度学习推理框架的扩展方法、装置、设备及介质 | |
CN117093266A (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 |