CN114489859A - 脚本代码的执行方法、装置、存储介质及设备 - Google Patents

脚本代码的执行方法、装置、存储介质及设备 Download PDF

Info

Publication number
CN114489859A
CN114489859A CN202210130536.XA CN202210130536A CN114489859A CN 114489859 A CN114489859 A CN 114489859A CN 202210130536 A CN202210130536 A CN 202210130536A CN 114489859 A CN114489859 A CN 114489859A
Authority
CN
China
Prior art keywords
processing logic
code
script
target
type information
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.)
Pending
Application number
CN202210130536.XA
Other languages
English (en)
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.)
Zhejiang Geely Holding Group Co Ltd
Hangzhou Youxing Technology Co Ltd
Original Assignee
Zhejiang Geely Holding Group Co Ltd
Hangzhou Youxing 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 Zhejiang Geely Holding Group Co Ltd, Hangzhou Youxing Technology Co Ltd filed Critical Zhejiang Geely Holding Group Co Ltd
Priority to CN202210130536.XA priority Critical patent/CN114489859A/zh
Publication of CN114489859A publication Critical patent/CN114489859A/zh
Pending legal-status Critical Current

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/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供的一种脚本代码的执行方法、装置、存储介质及设备,首先接收终端设备发送的目标应用的风控系统的脚本代码,随后,将脚本代码转化为中间代码,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息,然后,根据对象的类型信息,对中间代码进行优化,最后,根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。通过该方式,由于可以将脚本代码转化为包含有待调整的目标处理逻辑的至少一个对象的类型信息的中间代码,并根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整,从而提升了脚本代码的执行效率,进而缩短了目标处理逻辑的调整及生效时间。

Description

脚本代码的执行方法、装置、存储介质及设备
技术领域
本发明涉及计算机技术领域,尤其涉及一种脚本代码的执行方法、装置、存储介质及设备。
背景技术
在风控系统中,通常需要对业务参数进行多种运算和函数处理。运算和函数处理的逻辑会根据风控系统的风控策略而随时调整,且要求调整后的运算和函数处理逻辑可以立即生效。
现有技术中,通常通过对脚本代码进行解释执行的方式,对风控系统的运算和函数处理逻辑进行设置或调整。然而,在对脚本代码对应的中间代码进行优化的过程中,由于涉及到的运算和函数处理逻辑的对象只包含值信息,从而需要对运算和函数处理逻辑的对象进行大量的类型推断,进而导致脚本代码的执行效率低下,延长了运算和函数处理逻辑的调整及生效时间。
发明内容
本申请提供一种脚本代码的执行方法、装置、存储介质及设备,以解决现有技术中脚本代码的执行效率低下的技术问题。
第一方面,本申请提供一种脚本代码的执行方法,所述方法包括:
接收终端设备发送的目标应用的风控系统的脚本代码,所述脚本代码用于调整所述目标应用的风控系统的处理逻辑;
将所述脚本代码转化为中间代码,所述中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息;
根据所述对象的类型信息,对所述中间代码进行优化;
根据优化后的中间代码对应的目标类对象,对所述目标应用的风控系统的处理逻辑进行调整。
一种可选的实施方式中,所述对所述中间代码进行优化,包括:
若所述目标处理逻辑的至少一个对象的类型信息一致,则执行所述目标处理逻辑对应的程序。
一种可选的实施方式中,所述对所述中间代码进行优化,包括:
若所述目标处理逻辑的至少一个对象的类型信息不完全一致,则对所述至少一个对象的类型进行转换,直至所述至少一个对象的类型完全一致;
执行类型转换后的目标处理逻辑对应的程序。
一种可选的实施方式中,所述至少一个对象包括所述目标处理逻辑对应的令牌序列的运算对象和/或所述运算对象之间的运算关系。
一种可选的实施方式中,所述将所述脚本代码转化为中间代码,包括:
根据预设的解析规则,对所述脚本代码进行解析,生成所述脚本代码对应的抽象语法树,所述抽象语法树包含至少一个节点,每个节点用于表征所述脚本代码中的一个语法结构;
遍历所述抽象语法树中的每个节点,将所述脚本代码转化为所述中间代码。
一种可选的实施方式中,所述生成所述脚本代码对应的抽象语法树,包括:
根据预设的词法解析规则,对所述脚本代码进行词法解析,确定所述目标处理逻辑对应的令牌序列,所述令牌序列包含所述至少一个对象的类型信息;
根据预设的语法解析规则,对所述令牌序列进行语法解析,确定至少一个表达式语句,所述表达式语句用于指示多个所述对象之间的处理逻辑;
根据所述至少一个表达式语句,生成所述脚本代码对应的抽象语法树。
一种可选的实施方式中,在所述对所述目标应用的风控系统的处理逻辑进行调整之前,所述方法还包括:
对所述优化后的中间代码进行编译,确定所述优化后的中间代码对应的字节码;
根据预设的类加载器,对所述字节码进行加载,确定所述字节码对应的目标类对象。
一种可选的实施方式中,在所述对所述目标应用的风控系统的处理逻辑进行调整之前,所述方法还包括:
获取所述脚本代码的标识;
根据所述脚本代码的标识与目标类对象之间的映射关系,确定所述脚本代码对应的目标类对象。
一种可选的实施方式中,在所述对所述目标应用的风控系统的处理逻辑进行调整之后,所述方法还包括:
确定调整后的处理逻辑对应的返回值的类型信息;
确定所述返回值的类型信息是否为预设类型信息;
若否,则根据所述预设类型信息,对所述返回值的类型进行转换。
第二方面,本申请提供一种脚本代码的执行装置,所述装置包括:
接收模块,用于接收终端设备发送的目标应用的风控系统的脚本代码,所述脚本代码用于调整所述目标应用的风控系统的处理逻辑;
转化模块,用于将所述脚本代码转化为中间代码,所述中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息;
优化模块,用于根据所述对象的类型信息,对所述中间代码进行优化;
调整模块,用于根据优化后的中间代码对应的目标类对象,对所述目标应用的风控系统的处理逻辑进行调整。
一种可选的实施方式中,所述优化模块,具体用于若所述目标处理逻辑的至少一个对象的类型信息一致,则执行所述目标处理逻辑对应的程序。
一种可选的实施方式中,所述优化模块,具体用于若所述目标处理逻辑的至少一个对象的类型信息不完全一致,则对所述至少一个对象的类型进行转换,直至所述至少一个对象的类型完全一致;执行类型转换后的目标处理逻辑对应的程序。
一种可选的实施方式中,所述至少一个对象包括所述目标处理逻辑对应的令牌序列的运算对象和/或所述运算对象之间的运算关系。
一种可选的实施方式中,所述转化模块,具体用于根据预设的解析规则,对所述脚本代码进行解析,生成所述脚本代码对应的抽象语法树,所述抽象语法树包含至少一个节点,每个节点用于表征所述脚本代码中的一个语法结构;遍历所述抽象语法树中的每个节点,将所述脚本代码转化为所述中间代码。
一种可选的实施方式中,所述转化模块,具体用于根据预设的词法解析规则,对所述脚本代码进行词法解析,确定所述目标处理逻辑对应的令牌序列,所述令牌序列包含所述至少一个对象的类型信息;根据预设的语法解析规则,对所述令牌序列进行语法解析,确定至少一个表达式语句,所述表达式语句用于指示多个所述对象之间的处理逻辑;根据所述至少一个表达式语句,生成所述脚本代码对应的抽象语法树。
一种可选的实施方式中,所述调整模块,还用于对所述优化后的中间代码进行编译,确定所述优化后的中间代码对应的字节码;根据预设的类加载器,对所述字节码进行加载,确定所述字节码对应的目标类对象。
一种可选的实施方式中,所述调整模块,还用于获取所述脚本代码的标识;根据所述脚本代码的标识与目标类对象之间的映射关系,确定所述脚本代码对应的目标类对象。
一种可选的实施方式中,所述调整模块,还用于确定调整后的处理逻辑对应的返回值的类型信息;确定所述返回值的类型信息是否为预设类型信息;若否,则根据所述预设类型信息,对所述返回值的类型进行转换。
第三方面,本申请还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面任意一项所述的方法。
第四方面,本发明还提供一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行如第一方面任意一项所述的方法。
第五方面,本申请还提供一种电子设备,包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行如第一方面任意一项所述的方法。
本申请提供的一种脚本代码的执行方法、装置、存储介质及设备,首先接收终端设备发送的目标应用的风控系统的脚本代码,脚本代码用于调整目标应用的风控系统的处理逻辑,随后,将脚本代码转化为中间代码,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息,然后,根据对象的类型信息,对中间代码进行优化,最后,根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。通过该方式,由于可以将脚本代码转化为包含有待调整的目标处理逻辑的至少一个对象的类型信息的中间代码,并根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整,从而提升了脚本代码的执行效率,进而缩短了目标处理逻辑的调整及生效时间。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种脚本代码的执行方法的应用场景示意图;
图2为本申请实施例提供的一种脚本代码的执行方法的流程示意图;
图3为本申请实施例提供的另一种脚本代码的执行方法的流程示意图;
图4为本申请实施例提供的再一种脚本代码的执行方法的流程示意图;
图5为本申请实施例提供的一种脚本代码的执行装置的结构示意图;
图6为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在风控系统中,通常需要对业务参数进行多种运算和函数处理。运算和函数处理的逻辑会根据风控系统的风控策略而随时调整,且要求调整后的运算和函数处理逻辑可以立即生效。
现有技术中,通常通过对脚本代码进行解释执行的方式,对风控系统的运算和函数处理逻辑进行设置或调整。然而,在对脚本代码对应的中间代码进行优化的过程中,由于涉及到的运算和函数处理逻辑的对象只包含值信息,从而需要对运算和函数处理逻辑的对象进行大量的类型推断,进而导致脚本代码的执行效率低下,延长了运算和函数处理逻辑的调整及生效时间。
为解决上述技术问题,本申请实施例提供一种脚本代码的执行方法、装置、存储介质及设备,通过将脚本代码转化为包含有待调整的目标处理逻辑的至少一个对象的类型信息的中间代码,并根据优化后的中间代码对应的目标类对象,对目标处理逻辑进行调整,从而避免了对目标处理逻辑的对象进行大量的类型推断,进而提升了脚本代码的执行效率,缩短了目标处理逻辑的调整及生效时间。
下面对于本申请涉及的一种脚本代码的执行方法的应用场景进行说明。
图1为本申请实施例提供的一种脚本代码的执行方法的应用场景示意图。如图1所示,包括有终端设备101及服务器102。首先,终端设备101可以将目标应用的风控系统的脚本代码发送给服务器102。服务器102可以将接收到的上述脚本代码转化为中间代码;随后,根据中间代码包含的待调整的目标处理逻辑的对象的类型信息,对中间代码进行优化;然后,根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。最后,服务器101还可以将调整后的目标处理逻辑对应的执行结果发送给终端设备101。
其中,上述终端设备可以为手机(mobile phone)、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtual reality,VR)终端设备、增强现实(augmented reality,AR)终端设备、无人驾驶(self driving)中的无线终端、远程手术(remote medical surgery)中的无线终端、智能电网(smart grid)中的无线终端、智慧家庭(smart home)中的无线终端等。本申请实施例中,用于实现终端的功能的装置可以是终端,也可以是能够支持终端实现该功能的装置,例如芯片系统,该装置可以被安装在终端中。本申请实施例中,芯片系统可以由芯片构成,也可以包括芯片和其它分立器件。
上述服务器可以是但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算的由大量计算机或网络服务器构成的云。
应理解,本申请技术方案的应用场景可以是图1中的脚本代码的执行场景,但不限于此,还可以应用于其它需要对脚本代码进行执行的场景中。
可以理解,上述脚本代码的执行方法可以通过本申请实施例提供的脚本代码的执行装置实现,脚本代码的执行装置可以是某个设备的部分或全部,例如服务器或服务器中的脚本引擎。
下面以具体的实施例对本申请实施例的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本申请实施例提供的一种脚本代码的执行方法的流程示意图,本实施例涉及的是对脚本代码进行执行的过程。本申请实施例以集成或安装有相关执行代码的服务器为例,如图2所示,该方法包括:
S201、接收终端设备发送的目标应用的风控系统的脚本代码。
在本申请实施例中,服务器可以首先获取目标应用的风控系统的脚本代码,然后根据上述脚本代码目标应用的风控系统的处理逻辑进行调整。
其中,脚本代码是编程代码的一种类型。脚本代码本身不会编译为机器码,而是命令寄主(虚拟机或脚本解释器等)按照脚本代码的需求来执行脚本代码对应的操作。
本申请实施例对于脚本代码的执行目的不做限制。在一些实施例中,上述脚本代码可以用于调整目标应用的风控系统的处理逻辑,在另一些实施例中,上述脚本代码还可以用于实现其它业务功能。示例性地,上述脚本代码可以为“a+b-c*d”,其中“a、b、c、d”可以为脚本代码中的变量。
本申请实施例对于服务器接收脚本代码的方式也不做限制。在一些实施例中,服务器可以通过应用程序接口(Application Programming Interface,API)的方式接收上述脚本代码。
S202、将脚本代码转化为中间代码,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息。
在本步骤中,当获取目标应用的风控系统的脚本代码后,服务器可以将脚本代码转化为中间代码。
其中,待调整的目标处理逻辑可以根据风控系统的风控策略进行确定,本申请实施例对此不作限制。
本申请实施例对于如何将上述脚本代码转化为中间代码不做限制。在一些实施例中,服务器可以首先根据预设的解析规则,对脚本代码进行解析,生成脚本代码对应的抽象语法树;然后,遍历抽象语法树中的每个节点,将脚本代码转化为上述中间代码。
其中,抽象语法树中包含至少一个节点,每个节点用于表征脚本代码中的一个语法结构。本申请实施例对于服务器如何遍历抽象语法树中的节点不做限制,可以根据实际情况具体设置。在一些实施例中,服务器可以采用左序遍历的方式遍历抽象语法树中的节点;在另一些实施例中,服务器还可以采用自顶向下递归遍历的方式遍历抽象语法树中的节点。
本申请实施例对于服务器如何生成抽象语法树也不做限制。在一些实施例中,服务器可以根据预设的词法解析规则,对脚本代码进行词法解析,确定目标处理逻辑对应的令牌(Token)序列,Token序列中包含至少一个对象及其类型信息。然后,根据预设的语法解析规则,对Token序列进行语法解析,确定至少一个表达式语句。最后,根据至少一个表达式语句,生成脚本代码对应的抽象语法树。示例性地,若脚本代码为“a+b-c*d”,则该脚本代码对应的Token序列可以包括“a”、“+”、“b”、“-”、“c”、“*”、“d”等Token及其类型信息。在本步骤中,通过预设的词法分析规则和语法分析规则,服务器可以自动识别脚本代码中的内容和语法结构,并执行相应的动作。
需要说明的是,服务器可以根据预设的词法及语法解析规则,使用开源工具(例如Antrl4等)生成词法解析代码(ChopperLexer.java)及语法解析代码(ChopperParser.java);并通过调用语法解析方法(例如ChopperParser.script()等),生成抽象语法树,本申请实施例对此不作限制。
需要说明的是,Token的类型可以包含常量类型8种、变量类型1种、运算符号23种、关键字符号21种、结束符1种、忽略符5种。在一些实施例中,上述对象可以包括Token序列中的运算对象(例如“a”、“b”、“c”、“d”等)和/或运算对象之间的运算关系(例如“+”、“-”、“*”等)。对象的类型信息可以为其对应的Token的类型信息,本申请实施例对此不作限制。上述表达式语句可以用于指示多个对象之间的处理逻辑关系,每个表达式语句可以由一个或多个Token组成。示例性地,若脚本代码为“a+b-c*d”,则表达式语句可以包括“a+b”、“c*d”及“(a+b)-(c*d)”。在另一些实施例中,Token和表达式语句可以以树形结构关联,从而生成抽象语法树。表达式语句的类型可以包括赋值表达式、条件表达式、循环表达式、跳出循环表达式、继续循环表达式,终止执行表达式等,本申请实施例对此也不做限制。
在本步骤中,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息和值信息,从而避免了后续优化过程中不必要的类型推断,进而提高了脚本代码的执行效率。
S203、根据对象的类型信息,对中间代码进行优化。
在本步骤中,当将脚本代码转化为中间代码后,服务器可以根据对象的类型信息,对中间代码进行优化。
需要说明的是,中间代码优化步骤是指在不改变代码的运行效果的前提下,对中间代码进行等价变换,以使变换后的代码的运行时间更短、占用空间更小。中间代码的优化方式可以包括合并已知常量、强度削弱等,例如,将“2+3”替换为“5”,或将“a*2”替换为“a+a”等。
本申请实施例对于服务器如何对中间代码进行优化不做限制。在一些实施例中,若中间代码包含的待调整的目标处理逻辑的至少一个对象的类型信息一致,则执行目标处理逻辑对应的程序。在另一些实施例中,若目标处理逻辑的至少一个对象的类型信息不完全一致,则对至少一个对象的类型进行转换,直至上述至少一个对象的类型完全一致;然后,执行类型转换后的目标处理逻辑对应的程序。示例性地,服务器可以根据中间代码,直接比较处理逻辑关系“a+b”中对象“a”与“b”的类型信息是否一致。若“a”与“b”的类型信息一致,例如“a”与“b”均为字符串类型,则执行处理逻辑关系“a+b”对应的程序。若“a”与“b”的类型信息不一致,例如“a”为字符串类型,“b”为整数(Integer)类型;则需要将“a”转换为整数(Integer)类型,或将“b”转换为字符串类型,然后再执行类型转换后的处理逻辑关系“a+b”对应的程序。
需要说明的是,现有技术中通常采用指令(Instance Of)进行对象的类型信息的比较。由于Java虚拟机(Java Virtual Machine,JVM)对于Instance Of指令是通过遍历左变量对象类型的继承链(Super链)直至基础类型(Object),从而判断跟右变量对象类型是否一致的,因此比较效率会受左变量对象的继承深度的影响。在本步骤中,服务器可以直接比较对象的类型信息,从而大幅地提高了比较过程的效率。此外,在本申请实施例提供的方法中,服务器可以使用内部工具类(例如ChopperCalculator等)统一进行23种运算符运算,从而提高了代码的执行效率及内聚程度。
S204、根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。
在本步骤中,当对中间代码进行优化后,服务器可以根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。
本申请实施例对于如何生成中间代码对应的目标类对象不做限制。在一些实施例中,服务器可以首先对优化后的中间代码进行编译,确定优化后的中间代码对应的字节码;然后,根据预设的类加载器,对字节码进行加载,确定字节码对应的目标类对象。示例性地,服务器可以采用开源组件(例如Javassist等)对优化后的中间代码进行编译,得到Java虚拟机(Java Virtual Machine,JVM)字节码;然后,服务器可以创建自定义类加载器,并通过该自定义类加载器加载JVM字节码,从而在内存中生成类实例。其中,目标类对象可以包括该类实例。在本步骤中,服务器通过采用编译执行(将中间代码编译成JVM字节码再执行)的方式,而非解释执行的方式,大幅地提高了脚本代码执行的性能,降低了脚本代码的执行耗时。
需要说明的是,在本申请实施例中,使用自定义类加载器可以将系统加载的类和加载JVM字节码生成的类进行隔离,从而避免了类加载冲突。此外,服务器每次都可以使用新创建的类加载器加载JVM字节码,从而使得加载后的类加载器可以在长期不使用时自动卸载。在另一些实施例中,服务器还可以使用系统类加载器(例如AppClassLoader等)加载JVM字节码,本申请实施例对此不作限制。
本申请实施例对于如何对目标应用的风控系统的处理逻辑进行调整不做限制。在一些实施例中,服务器可以通过方法句柄(MethodHandle)技术执行目标类对象的execute方法,从而对目标处理逻辑进行调整。其中,方法句柄技术提高了执行类实例的execute方法的性能。服务器也可以通过反射(Reflection)技术执行目标类对象的execute方法,本申请实施例对此不做限制。
在另一些实施例中,服务器还可以确定调整后的目标处理逻辑对应的返回值及其类型信息,并确定返回值的类型信息是否为预设类型信息。若是,则将上述返回值发送给目标终端设备;若否,则根据上述预设类型信息对返回值的类型进行转换。若转换后的返回值的类型仍不符合预设类型,则向目标终端设备发送异常信息,以提醒返回值的类型信息异常。应理解,服务器可以通过终端设备获取用户输入的返回值的预设类型信息。通过该方法,提高了脚本代码的执行结果的类型的稳定性,避免了相同脚本代码在不同环境下出现多种类型的执行结果的情况发生。
在一些实施例中,在生成类实例之后,服务器还可以将脚本代码的标识及脚本代码对应的类实例之间的映射关系存储至预设的缓存中。示例性地,服务器可以以脚本代码的标识作为键(Key),以脚本代码对应的类实例作为值(Value),将脚本代码和类实例之间的映射关系保存在预先定义的容器(例如ConcurrentHashMap<String,Object>类型的变量等)中。服务器可以使用近期最少使用缓存机制(例如WeakReferenceLruCache等)来保存上述映射关系,从而促进了垃圾回收器(Garbage Collector)对类实例进行及时回收,进而避免了内存占用过多导致的系统崩溃问题。在另一些实施例中,服务器还可以获取脚本代码的标识,并根据脚本代码的标识与目标类对象之间的映射关系,直接确定脚本代码对应的目标类对象。
应理解,脚本代码的标识可以是脚本代码的名称等信息,本申请实施例对此不作限制。本申请实施例对于服务器如何获取脚本代码的标识不做限制,在一些实施例中,服务器可以通过终端设备获取用户输入的脚本代码的标识,在另一些实施例中,服务器也可以根据获取到的脚本代码确定该脚本代码的标识。示例性地,若脚本代码为“a+b-c*d”,则服务器可以生成该脚本代码的信息摘要“770949e347e693b719649dcb0bdb1aca”,并将上述信息摘要作为脚本代码“a+b-c*d”的标识。
在另一些实施例中,服务器还可以通过比较修改前后脚本代码的信息摘要(MD5),确定脚本代码发生变更;然后产生新的JVM字节码覆盖变更前的脚本代码对应的JVM字节码,并重新输入JVM虚拟机进行执行,从而缩短了脚本代码变更后的生效时间。
需要说明的是,一般情况下风控系统要求脚本代码执行耗时小于10ms。常规的脚本代码执行方法(例如开源脚本引擎Apache JEXL等)中单个脚本的执行耗时在40ms左右,且执行耗时还会随风控策略的增多而不断增加,无法满足风控系统的业务要求。此外,开源脚本引擎Apache JEXL的默认函数较少,可能导致部分业务功能无法实现。本申请实施例提供的方法,缩短了脚本代码的执行耗时,并默认支持大部分常用函数,进而将脚本代码的执行性能提升了3~5倍,保证了风控策略在规定时间内执行完成,同时节省了服务器资源。此外,本申请实施例提供的方法,还可以兼容现有的脚本代码,无需投入资源对现有脚本代码进行调整。
本申请提供的一种脚本代码的执行方法、装置、存储介质及设备,首先接收终端设备发送的目标应用的风控系统的脚本代码,脚本代码用于调整目标应用的风控系统的处理逻辑,随后,将脚本代码转化为中间代码,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息,然后,根据对象的类型信息,对中间代码进行优化,最后,根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。通过该方式,由于可以将脚本代码转化为包含有待调整的目标处理逻辑的至少一个对象的类型信息的中间代码,并根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整,从而提升了脚本代码的执行效率,进而缩短了目标处理逻辑的调整及生效时间。
在上述实施例的基础上,下面对于服务器如何对中间代码进行优化进行说明。图3为本申请实施例提供的另一种脚本代码的执行方法的流程示意图,如图3所示,该方法包括:
S301、接收终端设备发送的目标应用的风控系统的脚本代码。
S302、将脚本代码转化为中间代码,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息。
S303、确定目标处理逻辑的至少一个对象的类型信息是否一致。
若是,则执行步骤S305;若否,则执行步骤S304。
S304、将至少一个对象的类型转换为完全一致的类型。
S305、执行目标处理逻辑对应的程序。
S306、根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。
S301-S306的技术名词、技术效果、技术特征,以及可选实施方式,可参照图2所示的S201-S204理解,对于重复的内容,在此不再累述。
在上述实施例的基础上,下面对于服务器如何根据脚本代码的标识确定脚本代码对应的目标类对象进行说明。图4为本申请实施例提供的再一种脚本代码的执行方法的流程示意图,如图4所示,该方法包括:
S401、获取脚本代码的标识。
S402、根据脚本代码的标识与目标类对象之间的映射关系,确定脚本代码对应的目标类对象。
S403、根据脚本代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。
S404、确定调整后的处理逻辑对应的返回值的类型信息。
S405、若返回值的类型信息符合预设类型信息,则将返回值发送给目标终端设备。
S401-S405的技术名词、技术效果、技术特征,以及可选实施方式,可参照图2所示的S201-S204理解,对于重复的内容,在此不再累述。
本申请提供的一种脚本代码的执行方法、装置、存储介质及设备,首先接收终端设备发送的目标应用的风控系统的脚本代码,脚本代码用于调整目标应用的风控系统的处理逻辑,随后,将脚本代码转化为中间代码,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息,然后,根据对象的类型信息,对中间代码进行优化,最后,根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。通过该方式,由于可以将脚本代码转化为包含有待调整的目标处理逻辑的至少一个对象的类型信息的中间代码,并根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整,从而提升了脚本代码的执行效率,进而缩短了目标处理逻辑的调整及生效时间。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图5为本申请实施例提供的一种脚本代码的执行装置的结构示意图。该脚本代码的执行装置可以通过软件、硬件或者两者的结合实现,可例如上述实施例中的服务器,以执行上述实施例中的脚本代码的执行方法。如图5所示,该脚本代码的执行装置500包括:
接收模块501,用于接收终端设备发送的目标应用的风控系统的脚本代码,脚本代码用于调整目标应用的风控系统的处理逻辑;
转化模块502,用于将脚本代码转化为中间代码,中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息;
优化模块503,用于根据对象的类型信息,对中间代码进行优化;
调整模块504,用于根据优化后的中间代码对应的目标类对象,对目标应用的风控系统的处理逻辑进行调整。
一种可选的实施方式中,优化模块503,具体用于若目标处理逻辑的至少一个对象的类型信息一致,则执行目标处理逻辑对应的程序。
一种可选的实施方式中,优化模块503,具体用于若目标处理逻辑的至少一个对象的类型信息不完全一致,则对至少一个对象的类型进行转换,直至至少一个对象的类型完全一致;执行类型转换后的目标处理逻辑对应的程序。
一种可选的实施方式中,至少一个对象包括目标处理逻辑对应的令牌序列的运算对象和/或运算对象之间的运算关系。
一种可选的实施方式中,转化模块502,具体用于根据预设的解析规则,对脚本代码进行解析,生成脚本代码对应的抽象语法树,抽象语法树包含至少一个节点,每个节点用于表征脚本代码中的一个语法结构;遍历抽象语法树中的每个节点,将脚本代码转化为中间代码。
一种可选的实施方式中,转化模块502,具体用于根据预设的词法解析规则,对脚本代码进行词法解析,确定目标处理逻辑对应的令牌序列,令牌序列包含至少一个对象的类型信息;根据预设的语法解析规则,对令牌序列进行语法解析,确定至少一个表达式语句,表达式语句用于指示多个对象之间的处理逻辑;根据至少一个表达式语句,生成脚本代码对应的抽象语法树。
一种可选的实施方式中,调整模块504,还用于对优化后的中间代码进行编译,确定优化后的中间代码对应的字节码;根据预设的类加载器,对字节码进行加载,确定字节码对应的目标类对象。
一种可选的实施方式中,调整模块504,还用于获取脚本代码的标识;根据脚本代码的标识与目标类对象之间的映射关系,确定脚本代码对应的目标类对象。
一种可选的实施方式中,调整模块504,还用于确定调整后的处理逻辑对应的返回值的类型信息;确定返回值的类型信息是否为预设类型信息;若否,则根据预设类型信息,对返回值的类型进行转换。
需要说明的,图5所示实施例提供的脚本代码的执行装置,可用于执行上述任意实施例所提供的脚本代码的执行方法,具体实现方式和技术效果类似,这里不再进行赘述。
图6为本申请实施例提供的一种电子设备的结构示意图。如图6所示,该电子设备600可以包括:至少一个处理器601和存储器602。图6示出的是以一个处理器为例的电子设备。
存储器602,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。
存储器602可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器601用于执行存储器602存储的计算机执行指令,以实现上述脚本代码的执行方法;其中,处理器601可能是一个中央处理器(Central Processing Unit,CPU),或者是特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路。
可选的,在具体实现上,如果通信接口、存储器602和处理器601独立实现,则通信接口、存储器602和处理器601可以通过总线相互连接并完成相互间的通信。总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component Interconnect,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果通信接口、存储器602和处理器601集成在一块芯片上实现,则通信接口、存储器602和处理器601可以通过内部接口完成通信。
本申请实施例还提供了一种芯片,包括处理器和接口。其中接口用于输入输出处理器所处理的数据或指令。处理器用于执行以上方法实施例中提供的方法。该芯片可以应用于脚本代码的执行装置中。
本申请实施例还提供一种程序,该程序在被处理器执行时用于执行以上方法实施例提供的脚本代码的执行方法。
本申请实施例还提供一种程序产品,例如计算机可读存储介质,该程序产品中存储有指令,当其在计算机上运行时,使得计算机执行上述方法实施例提供的脚本代码的执行方法。
本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、磁盘或者光盘等各种可以存储程序代码的介质。具体地,该计算机可读存储介质中存储有程序信息,程序信息用于上述脚本代码的执行方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如,固态硬盘(Solid State Disk,SSD))等。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (13)

1.一种脚本代码的执行方法,其特征在于,所述方法包括:
接收终端设备发送的目标应用的风控系统的脚本代码,所述脚本代码用于调整所述目标应用的风控系统的处理逻辑;
将所述脚本代码转化为中间代码,所述中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息;
根据所述对象的类型信息,对所述中间代码进行优化;
根据优化后的中间代码对应的目标类对象,对所述目标应用的风控系统的处理逻辑进行调整。
2.根据权利要求1所述的方法,其特征在于,所述对所述中间代码进行优化,包括:
若所述目标处理逻辑的至少一个对象的类型信息一致,则执行所述目标处理逻辑对应的程序。
3.根据权利要求2所述的方法,其特征在于,所述对所述中间代码进行优化,包括:
若所述目标处理逻辑的至少一个对象的类型信息不完全一致,则对所述至少一个对象的类型进行转换,直至所述至少一个对象的类型完全一致;
执行类型转换后的目标处理逻辑对应的程序。
4.根据权利要求1所述的方法,其特征在于,所述至少一个对象包括所述目标处理逻辑对应的令牌序列的运算对象和/或所述运算对象之间的运算关系。
5.根据权利要求1所述的方法,其特征在于,所述将所述脚本代码转化为中间代码,包括:
根据预设的解析规则,对所述脚本代码进行解析,生成所述脚本代码对应的抽象语法树,所述抽象语法树包含至少一个节点,每个节点用于表征所述脚本代码中的一个语法结构;
遍历所述抽象语法树中的每个节点,将所述脚本代码转化为所述中间代码。
6.根据权利要求5所述的方法,其特征在于,所述生成所述脚本代码对应的抽象语法树,包括:
根据预设的词法解析规则,对所述脚本代码进行词法解析,确定所述目标处理逻辑对应的令牌序列,所述令牌序列包含所述至少一个对象的类型信息;
根据预设的语法解析规则,对所述令牌序列进行语法解析,确定至少一个表达式语句,所述表达式语句用于指示多个所述对象之间的处理逻辑;
根据所述至少一个表达式语句,生成所述脚本代码对应的抽象语法树。
7.根据权利要求1-6任一项所述的方法,其特征在于,在所述对所述目标应用的风控系统的处理逻辑进行调整之前,所述方法还包括:
对所述优化后的中间代码进行编译,确定所述优化后的中间代码对应的字节码;
根据预设的类加载器,对所述字节码进行加载,确定所述字节码对应的目标类对象。
8.根据权利要求1所述的方法,其特征在于,在所述对所述目标应用的风控系统的处理逻辑进行调整之前,所述方法还包括:
获取所述脚本代码的标识;
根据所述脚本代码的标识与目标类对象之间的映射关系,确定所述脚本代码对应的目标类对象。
9.根据权利要求1-6任一项所述的方法,其特征在于,在所述对所述目标应用的风控系统的处理逻辑进行调整之后,所述方法还包括:
确定调整后的处理逻辑对应的返回值的类型信息;
确定所述返回值的类型信息是否为预设类型信息;
若否,则根据所述预设类型信息,对所述返回值的类型进行转换。
10.一种脚本代码的执行装置,其特征在于,所述装置包括:
接收模块,用于接收终端设备发送的目标应用的风控系统的脚本代码,所述脚本代码用于调整所述目标应用的风控系统的处理逻辑;
转化模块,用于将所述脚本代码转化为中间代码,所述中间代码包含有待调整的目标处理逻辑的至少一个对象的类型信息;
优化模块,用于根据所述对象的类型信息,对所述中间代码进行优化;
调整模块,用于根据优化后的中间代码对应的目标类对象,对所述目标应用的风控系统的处理逻辑进行调整。
11.一种计算机存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至9任意一项所述的方法。
12.一种电子设备,其特征在于,包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行如权利要求1至9任意一项所述的方法。
13.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至9任意一项所述的方法。
CN202210130536.XA 2022-02-11 2022-02-11 脚本代码的执行方法、装置、存储介质及设备 Pending CN114489859A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210130536.XA CN114489859A (zh) 2022-02-11 2022-02-11 脚本代码的执行方法、装置、存储介质及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210130536.XA CN114489859A (zh) 2022-02-11 2022-02-11 脚本代码的执行方法、装置、存储介质及设备

Publications (1)

Publication Number Publication Date
CN114489859A true CN114489859A (zh) 2022-05-13

Family

ID=81481246

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210130536.XA Pending CN114489859A (zh) 2022-02-11 2022-02-11 脚本代码的执行方法、装置、存储介质及设备

Country Status (1)

Country Link
CN (1) CN114489859A (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014211696A (ja) * 2013-04-17 2014-11-13 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 二進化十進数型変数へのアクセスを有する言語のバイナリコードを最適化する方法、並びにそのコンピュータ及びコンピュータ・プログラム
US20150058830A1 (en) * 2013-08-26 2015-02-26 Facebook, Inc. Systems and methods for converting typed code
CN106970820A (zh) * 2017-04-26 2017-07-21 腾讯科技(深圳)有限公司 代码存储方法及代码存储装置
CN107515739A (zh) * 2016-06-16 2017-12-26 阿里巴巴集团控股有限公司 提高代码执行性能的方法及装置
CN108509202A (zh) * 2018-03-30 2018-09-07 天津麒麟信息技术有限公司 基于飞腾平台火狐浏览器jit引擎的整数乘法优化方法
CN109933331A (zh) * 2019-03-07 2019-06-25 杭州时趣信息技术有限公司 一种客户端服务器间数据转换方法及相关组件
CN110275709A (zh) * 2018-03-15 2019-09-24 阿里巴巴集团控股有限公司 针对动态语言的处理及优化方法、装置、设备及存储介质
CN112527314A (zh) * 2020-12-24 2021-03-19 平安普惠企业管理有限公司 项目代码自动优化方法、装置、设备及介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014211696A (ja) * 2013-04-17 2014-11-13 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 二進化十進数型変数へのアクセスを有する言語のバイナリコードを最適化する方法、並びにそのコンピュータ及びコンピュータ・プログラム
US20150058830A1 (en) * 2013-08-26 2015-02-26 Facebook, Inc. Systems and methods for converting typed code
CN107515739A (zh) * 2016-06-16 2017-12-26 阿里巴巴集团控股有限公司 提高代码执行性能的方法及装置
CN106970820A (zh) * 2017-04-26 2017-07-21 腾讯科技(深圳)有限公司 代码存储方法及代码存储装置
CN110275709A (zh) * 2018-03-15 2019-09-24 阿里巴巴集团控股有限公司 针对动态语言的处理及优化方法、装置、设备及存储介质
CN108509202A (zh) * 2018-03-30 2018-09-07 天津麒麟信息技术有限公司 基于飞腾平台火狐浏览器jit引擎的整数乘法优化方法
CN109933331A (zh) * 2019-03-07 2019-06-25 杭州时趣信息技术有限公司 一种客户端服务器间数据转换方法及相关组件
CN112527314A (zh) * 2020-12-24 2021-03-19 平安普惠企业管理有限公司 项目代码自动优化方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
CN114153521B (zh) 类加载方法和装置
CN108021357B (zh) 程序调用的优化方法及装置
CN110609755A (zh) 跨区块链节点的消息处理方法及装置、设备、介质
CN108804100B (zh) 创建界面元素的方法、装置、存储介质及移动终端
CN114979303B (zh) 网络数据包的服务质量处理方法、装置、设备和可读介质
CN112559088A (zh) 配置文件的优化方法、装置、服务器以及存储介质
CN113703779B (zh) 一种跨平台的多语言编译方法和超轻量物联网虚拟机
CN114611500A (zh) 表达式处理方法、装置、电子设备及计算机可读存储介质
CN110941443B (zh) 修改sdk中文件名的方法、装置及电子设备
CN112905271A (zh) 一种应用程序接口api的调用方法、装置及电子设备
CN111596970A (zh) 动态库延迟加载方法、装置、设备和存储介质
CN109408057B (zh) 自动生成代码的方法、装置、介质和计算设备
CN107861807B (zh) 程序调用的优化方法及装置
CN114489859A (zh) 脚本代码的执行方法、装置、存储介质及设备
CN115760391A (zh) 区块链中智能合约更改方法、装置、电子设备及存储介质
CN114911541A (zh) 配置信息的处理方法、装置、电子设备及存储介质
CN108874625B (zh) 信息处理方法及装置、电子设备、存储介质
EP1136910A2 (en) A method of compiling code in an object oriented programming language
CN112650502A (zh) 批处理任务处理方法、装置、计算机设备和存储介质
CN114244912A (zh) 数据传输方法、装置、计算机设备及存储介质
CN112287643A (zh) 消息监听方法、装置、设备及计算机可读存储介质
CN111151008A (zh) 游戏运营数据的校验方法、装置、配置后台及介质
CN112733153B (zh) 源代码扫描方法、装置、电子设备和存储介质
CN113268267B (zh) 一种数据包生成方法、装置、计算机设备及存储介质
CN113741946B (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