CN116450250B - 一种动态脚本执行方法、***及存储介质 - Google Patents
一种动态脚本执行方法、***及存储介质 Download PDFInfo
- Publication number
- CN116450250B CN116450250B CN202310713234.XA CN202310713234A CN116450250B CN 116450250 B CN116450250 B CN 116450250B CN 202310713234 A CN202310713234 A CN 202310713234A CN 116450250 B CN116450250 B CN 116450250B
- Authority
- CN
- China
- Prior art keywords
- execution
- identification
- dynamic
- data
- result
- 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 50
- 238000013515 script Methods 0.000 claims abstract description 84
- 238000004590 computer program Methods 0.000 claims description 10
- 238000001514 detection method Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 23
- 238000010586 diagram Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000012423 maintenance Methods 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及互联网技术领域,尤其涉及一种动态脚本执行方法、***及存储介质,该方法包括:在执行从服务端获取的动态脚本时,计算得到所述动态脚本的文本代码的唯一标识;检测历史执行数据中是否包含所述唯一标识;若所述历史执行数据包含所述唯一标识,则获取包含所述唯一标识的目标执行数据,并基于所述目标执行数据得到所述动态脚本的执行结果,并返回所述执行结果。由此,本申请可以有效解决现有技术中采用动态执行脚本实现设定功能时存在执行效率低、性能低以及成本高的问题等。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种动态脚本执行方法、***及存储介质。
背景技术
在一些***设计中,经常在运用程序后端动态加载远程服务器上的动态脚本,然后将动态脚本经过数据类型转换、编译等等操作,最后动态执行该脚本,服务器中存储动态脚本文件,运用程序后端通过远程访问服务器获取动态脚本文件,通过数据类型转换、编译等一些列处理后执行动态脚本,以实现设定功能。
其中,Python是广泛应用的一种脚本语言,常用于数据处理、机器学习、网络编程等领域。Python脚本需要解析字符串形式的代码,然后执行其代码块,通常在Python中使用exec()函数来实时执行并返回结果。但随着脚本的数量和复杂度的增加,这种方式的执行效率和性能逐渐成为瓶颈,难以实施。
现有技术中有的采用Memcached、Redis等缓存服务器来解决上述执行效率低和性能低的问题。但是采用缓存的方案需要额外的服务器支持,增加了***的复杂性和维护成本。
发明内容
有鉴于此,本申请实施例提供一种动态脚本执行方法、***及存储介质,可以有效解决现有技术中采用动态执行脚本实现设定功能时存在执行效率低、性能低以及成本高的问题等。
第一方面,本申请实施例提供一种动态脚本执行方法,包括:
在执行从服务端获取的动态脚本时,计算得到所述动态脚本的文本代码的唯一标识;
检测历史执行数据中是否包含所述唯一标识;
若所述历史执行数据包含所述唯一标识,则获取包含所述唯一标识的目标执行数据,并基于所述目标执行数据得到所述动态脚本的执行结果,并返回所述执行结果。
在一些实施例中,所述历史执行数据包括标识及结果组合数据、标识及实例组合数据、标识及类对象组合数据中至少一项;
所述基于所述目标执行数据得到所述动态脚本的执行结果,包括:
若所述目标执行数据为所述标识及结果组合数据,则依据所述唯一标识在所述标识及结果组合数据中查找得到所述动态脚本的执行结果;
若所述目标执行数据为所述标识及实例组合数据,则依据所述唯一标识在所述标识及实例组合数据中查找得到所述动态脚本的类实例;通过所述类实例执行所述动态脚本,得到执行结果;
若所述目标执行数据为所述标识及类对象组合数据,则依据所述唯一标识在所述标识及类对象组合数据中查找得到所述动态脚本的类对象;将所述类对象进行实例化,生成类实例,通过所述类实例执行所述动态脚本,得到执行结果。
在一些实施例中,所述标识及结果组合数据中包括:依据所述唯一标识存储的所述动态脚本的执行结果;
所述标识及类对象组合数据中包括:依据所述唯一标识存储的所述动态脚本的类对象;
所述标识及实例组合数据中包括:依据所述唯一标识存储的所述动态脚本的类实例。
在一些实施例中,还包括:
若所述历史执行数据中不包含所述唯一标识,则依据所述动态脚本的文本代码生成类对象;将所述类对象进行实例化得到类实例,通过所述类实例执行所述动态脚本,得到执行结果,并返回所述执行结果。
在一些实施例中,所述依据所述动态脚本的文本代码生成对应的类对象,包括:
将所述动态脚本的文本代码进行解码处理,得到预设编码类型的字符串代码;
对所述字符串代码进行编译处理,得到字节代码形式的类对象。
在一些实施例中,通过所述类实例执行所述动态脚本,得到执行结果后,还包括:
若所述历史执行数据中包含所述标识及类对象组合数据,在生成类对象后,将所述类对象依据所述唯一标识存入所述标识及类对象组合数据中;
若所述历史执行数据中包含所述标识及实例组合数据,在生成类实例后,将所述类实例依据所述唯一标识存入所述标识及实例组合数据中;
若所述历史执行数据中包含所述标识及结果组合数据,在首次得到执行结果后,将所述执行结果依据所述唯一标识存入所述标识及结果组合数据中。
在一些实施例中,所述检测历史执行数据中是否包含所述唯一标识时,还包括:
按照从前往后依次为所述标识及结果组合数据、所述标识及实例组合数据、所述标识及类对象组合数据的顺序进行检测。
在一些实施例中,所述唯一标识包括唯一编码;所述唯一编码为所述动态脚本的文本代码的哈希值或者所述动态脚本的通用唯一识别码;
所述标识及结果组合数据中的所述唯一标识还包括依据业务功能需求设定的项目编码,使用所述项目编码和所述唯一编码构成所述唯一标识。
第二方面,本申请实施例提供一种动态脚本执行***,该***包括服务端和客户端;
所述服务端用于存储动态脚本;
所述客户端用于从所述服务端获取所述动态脚本,还用于实施本申请第一方面提供的一种动态脚本执行方法。
第三方面,本申请实施例提供一种可读存储介质,其存储有计算机程序,所述计算机程序在处理器上执行时,实施本申请第一方面提供的一种动态脚本执行方法。
本申请的实施例具有如下有益效果:
本申请通过检测历史执行数据中是否包含所述唯一标识,然后依据所述唯一标识得到目标执行数据,基于所述目标执行数据得到所述动态脚本的执行结果。该过程中无需将所述动态脚本的文本代码进行解码、编译等等耗时处理,充分利用所述历史执行数据减少了不必要的脚本执行,提高程序的执行效率,同时缓存的历史执行数据是保存在程序内部,不需要额外的服务器支持,减少了成本,而且在方便维护的同时降低了***复杂度和维护成本。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例的动态脚本执行方法的一种流程图;
图2示出了本申请实施例动态脚本执行方法在首次执行动态脚本的一种流程图;
图3示出了本申请实施例动态脚本执行方法在非首次执行动态脚本的一种流程图;
图4示出了本申请实施例的动态脚本执行装置的一种结构框图;
图5示出了本申请实施例的动态脚本执行***的一种***框图。
主要元件符号说明:
1-服务端;2-客户端;410-计算模块;420-检测模块;430-结果获取模块。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
在下文中,可在本申请的各种实施例中使用的术语“包括”、“具有”及其同源词仅意在表示特定特征、数字、步骤、操作、元件、组件或前述项的组合,并且不应被理解为首先排除一个或更多个其它特征、数字、步骤、操作、元件、组件或前述项的组合的存在或增加一个或更多个特征、数字、步骤、操作、元件、组件或前述项的组合的可能性。此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
除非另有限定,否则这里使用的所有术语(包括技术术语和科学术语)具有与本申请的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本申请的各种实施例中被清楚地限定。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互结合。
依据Python语言为例,现有技术中执行动态脚本的过程为:1)从远程服务端1获取动态脚本的文本代码,其中,该动态脚本文本代码为字节数组类型。2)然后将字节数组类型的动态脚本文本代码采用函数decode(“utf8”)函数进行解码处理,转化为utf8编码字符串代码。3)采用函数compile()对字符串代码进行编译脚本,得到字节代码。4)使用函数exec()执行字节代码类型的动态脚本,得到执行结果。该过程中步骤2)至4)是非常耗时的过程,频繁执行该过程会导致运用程序性能下降,导致脚本执行效率低。由此,本申请提供一种动态脚本执行方法、***及存储介质,可以有效解决现有技术中采用动态脚本实现设定功能时存在执行效率低、性能低以及成本高的问题等。
下面结合一些具体的实施例来对该动态脚本执行方法进行说明。
图1示出了本申请实施例的动态脚本执行方法的一种流程图。示范性地,该动态脚本执行方法包括以下步骤:
S10,在执行从服务端1获取的动态脚本时,计算得到动态脚本的文本代码的唯一标识。
服务端1动态脚本更新时,客户端2同步更新下载该动态脚本。该唯一标识依据动态脚本的更新而同步更新。
本实施例对唯一标识的具体方式不做限制,该唯一标识可以为依据规则设定的唯一标识,比如,实现加法计算的动态脚本标记为A0,实现减法计算的动态脚本标记为B0,以此类推,在实现加法计算的动态脚本更新时,对应的标记同步更新为A1。
具体地,该唯一标识包括唯一编码;唯一编码可以为动态脚本的文本代码的哈希值,或者唯一编码为动态脚本在上传服务器时自动生成的通用唯一识别码UUID。其中,采用MD5算法得到动态脚本的文本代码的哈希值。
S20,检测历史执行数据中是否包含唯一标识。
S30,若历史执行数据包含唯一标识,则获取包含唯一标识的目标执行数据,并基于目标执行数据得到动态脚本的执行结果,并返回执行结果。
在一种实施方式中,历史执行数据包括标识及结果组合数据、标识及实例组合数据、标识及类对象组合数据中至少一项。
标识及结果组合数据中包括依据唯一标识存储的动态脚本对应的执行结果。动态脚本被首次调用,得到执行结果,计算得到其唯一标识,依据唯一标识存入标识及结果组合数据中。
标识及类对象组合数据中包括依据唯一标识存储的动态脚本对应的类对象。动态脚本从服务器端下载后,计算得到其唯一标识,依据唯一标识存入标识及类对象组合数据中。
标识及实例组合数据中包括依据唯一标识存储的动态脚本对应的类实例。在动态脚本被首次调用时,被实例化后,得到类实例,计算得到其唯一标识,依据唯一标识存入标识及实例组合数据中。
本实施例中标识及结果组合数据、标识及实例组合数据、标识及类对象组合数据均采用字典数据类型进行存储,唯一标识作为字典的键。关于标识及结果组合数据、标识及实例组合数据、标识及类对象组合数据的数据类型本实施例不做限制,比如还可以是依据键值对形式存储的列表、元组、集合等等。
一般情况下同一个动态脚本适用于多个案件(或者称作项目),为了便于多个案件重复使用历史执行数据,进一步地,标识及结果组合数据中的唯一标识还包括依据业务功能需求设定的项目编码。即,标识及结果组合数据中的唯一标识为项目编码+唯一编码。标识及实例组合数据和标识及类对象组合数据中的唯一标识为唯一编码。比如,需要认证事件身份功能的动态脚本,动态脚本对事件A、事件B都适用。在事件A执行过动态脚本后,由于该执行结果包含事件A独有的信息,则该执行结果只适用于事件A下次认证时使用,而类实例和类对象不包含独有信息,还可以供事件B认证时使用,减少事件B执行动态脚本的时间。
在一种实施方式中,若历史执行数据包括标识及结果组合数据、标识及实例组合数据和标识及类对象组合数据。在步骤S20中检测历史执行数据中是否包含唯一标识时,还包括:
按照从前往后依次为标识及结果组合数据、标识及实例组合数据、标识及类对象组合数据的顺序进行检测。
其中,标识及结果组合数据中的执行结果、标识及实例组合数据中的类实例以及标识及类对象组合数据中的类对象,它们生成得到的时间存在差别,类对象首先得到,在从服务端1下载后则通过一系列处理就可以得到类对象。然后,在首次执行动态脚本时才能得到类实例和执行结果。为了减少动态脚本的执行时间,优先检测标识及结果组合数据。
在一种实施方式中,在步骤S30中基于目标执行数据得到动态脚本的执行结果,包括:
若目标执行数据为标识及结果组合数据,则依据唯一标识在标识及结果组合数据中查找得到动态脚本的执行结果;
或者,若目标执行数据为标识及实例组合数据,则依据唯一标识在标识及实例组合数据中查找得到动态脚本的类实例;通过类实例执行动态脚本,得到执行结果;
或者,若目标执行数据为标识及类对象组合数据,则依据唯一标识在标识及类对象组合数据中查找得到动态脚本的类对象;将类对象进行实例化,得到类实例,通过类实例执行动态脚本,得到执行结果。
历史执行数据可以仅包括标识及结果组合数据、标识及实例组合数据、标识及类对象组合数据三者中其中一项,也可以包括其中两项。
可以理解地,在通过类实例执行动态脚本,得到执行结果后,还包括:
若历史执行数据中包含标识及类对象组合数据,在依据动态脚本的文本代码生成类对象后,将类对象依据唯一标识存入标识及类对象组合数据中;
若历史执行数据中包含标识及实例组合数据,在将类对象进行实例化,生成类实例后,将类实例依据唯一标识存入标识及实例组合数据中;
若历史执行数据中包含标识及结果组合数据,在通过类实例执行动态脚本,得到执行结果后,将执行结果依据唯一标识存入标识及结果组合数据中。
在一种实施方式中,若历史执行数据中不包含唯一标识,则依据动态脚本的文本代码生成对应的类对象;将类对象进行实例化得到类实例,通过类实例执行动态脚本,得到执行结果,并返回执行结果。比如,在首次执行动态脚本时,历史执行数据中不包含唯一标识,在执行后动态脚本后,依据唯一标识将执行结果存入历史执行数据。
其中,依据动态脚本的文本代码生成对应的类对象,包括:
将动态脚本的文本代码进行解码处理,得到预设编码类型的字符串代码。对字符串代码进行编译处理,得到字节代码形式的类对象。比如采用Python语言时,采用函数decode(“utf8”)进行解码处理,采用函数compile()对字符串代码进行编译。
下面通过一个具体应用场景对本申请进行介绍:该应用场景中采用Python语言实现,历史执行数据包括标识及结果组合数据、标识及实例组合数据和标识及类对象组合数据,且数据类型采用字典数据类型。
假设定义一个代表缓存的类Cache,类Cache里面定义3个字典对象:class_caches、value_caches和instance_caches。其中,class_caches用于存储标识及类对象组合数据,采用动态脚本的文本代码的哈希值作为唯一标识,class_caches字典内键值对为唯一标识和动态脚本的类对象。value_caches用于存储标识及结果组合数据,采用案件号+哈希值的方式作为唯一标识,value_caches字典内键值对为唯一标识和动态脚本的执行结果。instance_caches用于存储标识及实例组合数据,采用哈希值作为唯一标识,instance_caches字典内键值对为唯一标识和动态脚本的类实例。
第一种情况:首次执行动态脚本,如图2所示,包括以下步骤:
S210,依据动态脚本的文本代码生成对应的类对象,其中,该动态脚本依据业务功能需求确定。
本步骤中可以采用classA=exec(compile(bytes("class classA : def main():return a + b "))),直接得到。具体地,(1)动态脚本的文本代码为字节数组,记为code_bytes,使用code_bytes.decode(“utf8”)函数进行解码处理,将字节数组转换为字符串,得到utf8类型编码的字符串代码,记为raw_code。
(2)采用MD5函数计算raw_code的哈希值,得到哈希值hash_key。
(3)使用compile(raw_code,设定路径,'exec')函数编译动态脚本,得到字节代码byte_Code。
(4)定义字典ns={},字典ns为可用的全局方法和变量字典,使用exec(byte_Code,ns)执行动态脚本。字典ns内包含类对象。
(5)通过在字典ns中查找得到类对象cls。
S220,依据动态脚本的文本代码生成对应的类对象。比如,aaa=classA(),将上述类对象classA进行实例化。还比如,通过cls_obj=cls(),将类对象进行实例化,生成类实例cls_obj。
S230,通过类实例执行动态脚本,得到执行结果,并返回执行结果。具体地,通过result=cls_obj.function()执行动态脚本,得到执行结果result,其中function为固定方法,默认直接调用该固定方法。
S240,将包含执行结果、类对象、类实例的历史执行数据存入对应的字典。
对应的,将该执行结果存入value_caches,将生成的类对象存入class_caches,将类实例存入instance_caches。具体地,通过self.class_cache[CaseNum+hash_key]=cls,将类对象cls存入class_cache中,其中CaseNum为案件号。通过self.instance_cache[hash_key]=cls_obj,将类实例存入instance_cache。通过self.values_cache[hash_key]=result,将执行结果存入values_cache。
第二种情况:非首次执行动态脚本,如图3所示,包括以下步骤:
S310,计算唯一标识。依据案件需求选择待执行的动态脚本,在执行动态脚本前,计算动态脚本到的文本代码的哈希值。自然地,value_caches中唯一标识为案件号+哈希值,instance_caches和class_caches的唯一标识则直接采用哈希值。
S320,判断标识及结果组合数据中是否存在唯一标识。若存在,则依据唯一标识获取标识及结果组合数据中存储的执行结果。
具体地,在value_caches中查找是否存在唯一标识,若value_caches中存在唯一标识,表示该动态脚本已被执行过,依据唯一标识获取value_caches中存储的动态脚本的执行结果。
若value_caches中不存在唯一标识,则执行步骤S330。
S330,判标识及类对象组合数据中是否存在唯一标识。
若存在,则依据唯一标识在标识及类对象组合数据中查找得到动态脚本的类对象;将类对象进行实例化,得到类实例,通过类实例执行动态脚本,得到执行结果。
具体地,在instance_caches中查找是否存在唯一标识,若instance_caches中存在唯一标识,则依据唯一标识获取instance_caches中存储的动态脚本的类实例,通过类实例执行动态脚本,得到执行结果。其中,还需将唯一标识和该执行结果组成键值对存入value_caches。
若instance_caches中不存在唯一标识,则执行步骤S340。
S340,依据动态脚本文本代码生成类对象,将类对象实例化得到类实例,通过类实例执行动态脚本,得到执行结果。
具体地,在class_caches中查找是否存在唯一标识,若class_caches中存在唯一标识,则依据唯一标识获取class_caches中存储到的类对象,将类对象进行实例化,生成类实例,通过类实例执行动态脚本,得到执行结果。其中,还需将唯一标识和该执行结果组成键值对存入value_caches,将将唯一标识和生成的类实例组成键值对存入instance_caches。
若class_caches中不存在唯一标识,则执行步骤S350。
S350,依据动态脚本的文本代码生成对应的类对象,将类对象进行实例化得到类实例,通过类实例执行动态脚本,得到执行结果,并返回执行结果。其中,还需将唯一标识和该执行结果组成键值对存入value_caches,将将唯一标识和生成的类实例组成键值对存入instance_caches,将将唯一标识和生成的类对象组成键值对存入class_caches。
关于字典class_caches、value_caches和instance_caches的存储管理,本申请中对于删除字典中的数据不做限制,若需要删除则依据动态脚本文件名称或者其他,应该可以找到老的唯一标识,依据老的唯一标识直接删除。不过,有的依据项目实际情况不需要删除,比如有的应用服务器运行的通过审核的脚本,很少修改脚本,脚本的数量是固定的,唯一标识极少发生变化。
本申请适用于所有执行动态脚本的Python应用程序中,尤其是适用于脚本代码相对稳定,且执行频次较高的动态脚本。
本申请通过依次检测标识及结果组合数据、标识及实例组合数据、标识及类对象组合数据中是否包含唯一标识,然后依据唯一标识得到目标执行数据,基于目标执行数据得到动态脚本的执行结果。无需再每次执行动态脚时均需对动态脚本进行解码、编译等等耗时处理。本申请通过充分利用历史执行数据可以减少不必要的脚本执行,提高程序的执行效率。同时缓存的历史执行数据是保存在程序内部,不需要额外的服务器支持,不但减少了成本,而且方便维护的同时可以降低***复杂度和维护成本。
图4示出了本申请实施例的动态脚本执行装置的一种结构示意图。示范性地,该动态脚本执行装置包括:计算模块410、检测模块420、结果获取模块430。
计算模块410用于,在执行从服务端1获取的动态脚本时,计算得到动态脚本的文本代码的唯一标识。
检测模块420用于,检测历史执行数据中是否包含唯一标识。
结果获取模块430用于,在历史执行数据包含唯一标识,获取包含唯一标识的目标执行数据,并基于目标执行数据得到动态脚本的执行结果,并返回执行结果。
可以理解,本实施例的装置对应于上述实施例的动态脚本执行方法,上述实施例中的可选项同样适用于本实施例,故在此不再重复描述。
本申请还提供了一种动态脚本执行***,示范性地,如图5所示,该***包括服务端1和客户端2;
服务端1用于存储动态脚本。客户端2用于从服务端1获取动态脚本,还用于实施上述实施例中的一种动态脚本执行方法。
可以理解,本实施例的***对应于上述实施例的动态脚本执行方法,上述实施例中的可选项同样适用于本实施例,故在此不再重复描述。
本申请还提供了一种终端设备,示范性地,该终端设备包括处理器和存储器,其中,存储器存储有计算机程序,处理器通过运行所述计算机程序,从而使终端设备执行上述的动态脚本执行方法或者上述动态脚本执行装置中的各个模块的功能。
其中,处理器可以是一种具有信号的处理能力的集成电路芯片。处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、图形处理器(GraphicsProcessing Unit,GPU)及网络处理器(Network Processor,NP)、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件中的至少一种。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。
存储器可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器用于存储计算机程序,处理器在接收到执行指令后,可相应地执行所述计算机程序。
本申请还提供了一种可读存储介质,用于储存上述终端设备中使用的所述计算机程序。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和结构图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,结构图和/或流程图中的每个方框、以及结构图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块或单元可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或更多个模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是智能手机、个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (7)
1.一种动态脚本执行方法,其特征在于,包括:
在执行从服务端获取的动态脚本时,计算得到所述动态脚本的文本代码的唯一标识;
检测历史执行数据中是否包含所述唯一标识;
若所述历史执行数据包含所述唯一标识,则获取包含所述唯一标识的目标执行数据,并基于所述目标执行数据得到所述动态脚本的执行结果,并返回所述执行结果;
其中,所述历史执行数据包括标识及结果组合数据、标识及实例组合数据和标识及类对象组合数据;所述唯一标识包括唯一编码;所述唯一编码为所述动态脚本的文本代码的哈希值;所述标识及结果组合数据中的所述唯一标识还包括依据业务功能需求设定的项目编码,使用所述项目编码和所述唯一编码构成所述唯一标识,并将包含所述项目编码的唯一标识标记为结果唯一标识;
所述基于所述目标执行数据得到所述动态脚本的执行结果,包括:
若所述目标执行数据为所述标识及结果组合数据,则依据所述结果唯一标识在所述标识及结果组合数据中查找得到所述动态脚本的执行结果;
若所述目标执行数据为所述标识及实例组合数据,则依据所述唯一标识在所述标识及实例组合数据中查找得到所述动态脚本的类实例;通过所述类实例执行所述动态脚本,得到执行结果;
若所述目标执行数据为所述标识及类对象组合数据,则依据所述唯一标识在所述标识及类对象组合数据中查找得到所述动态脚本的类对象;将所述类对象进行实例化,生成类实例,通过所述类实例执行所述动态脚本,得到执行结果。
2.根据权利要求1所述的动态脚本执行方法,其特征在于,还包括:
若所述历史执行数据中不包含所述唯一标识,则依据所述动态脚本的文本代码生成类对象;
将所述类对象进行实例化得到类实例,通过所述类实例执行所述动态脚本,得到执行结果,并返回所述执行结果。
3.根据权利要求2所述的动态脚本执行方法,其特征在于,所述依据所述动态脚本的文本代码生成对应的类对象,包括:
将所述动态脚本的文本代码进行解码处理,得到预设编码类型的字符串代码;
对所述字符串代码进行编译处理,得到字节代码形式的类对象。
4.根据权利要求2或3所述的动态脚本执行方法,其特征在于,通过所述类实例执行所述动态脚本,得到执行结果后,还包括:
若所述历史执行数据中包含所述标识及类对象组合数据,在生成类对象后,将所述类对象依据所述唯一标识存入所述标识及类对象组合数据中;
若所述历史执行数据中包含所述标识及实例组合数据,在生成类实例后,将所述类实例依据所述唯一标识存入所述标识及实例组合数据中;
若所述历史执行数据中包含所述标识及结果组合数据,在首次得到执行结果后,将所述执行结果依据所述结果唯一标识存入所述标识及结果组合数据中。
5.根据权利要求4所述的动态脚本执行方法,其特征在于,所述检测历史执行数据中是否包含所述唯一标识时,还包括:
按照从前往后依次为所述标识及结果组合数据、所述标识及实例组合数据、所述标识及类对象组合数据的顺序进行检测。
6.一种动态脚本执行***,其特征在于,该***包括服务端和客户端;
所述服务端用于存储动态脚本;
所述客户端用于从所述服务端获取所述动态脚本,还用于实施权利要求1-5中任一项所述的动态脚本执行方法。
7.一种可读存储介质,其特征在于,其存储有计算机程序,所述计算机程序在处理器上执行时,实施根据权利要求1-5中任一项所述的动态脚本执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310713234.XA CN116450250B (zh) | 2023-06-16 | 2023-06-16 | 一种动态脚本执行方法、***及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310713234.XA CN116450250B (zh) | 2023-06-16 | 2023-06-16 | 一种动态脚本执行方法、***及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116450250A CN116450250A (zh) | 2023-07-18 |
CN116450250B true CN116450250B (zh) | 2023-09-19 |
Family
ID=87127705
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310713234.XA Active CN116450250B (zh) | 2023-06-16 | 2023-06-16 | 一种动态脚本执行方法、***及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116450250B (zh) |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6308320B1 (en) * | 1999-01-15 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for incremental selective compilation of intermediate code files during computer system compilation and linking |
CN103412754A (zh) * | 2013-08-15 | 2013-11-27 | 优视科技有限公司 | 动态语言代码执行方法和装置 |
CN108228231A (zh) * | 2018-01-08 | 2018-06-29 | 南京邮电大学 | 一种Git仓库文件注解***的可视化漂移算法 |
CN108880820A (zh) * | 2018-06-01 | 2018-11-23 | 中国联合网络通信集团有限公司 | 代码管理方法和装置 |
CN109325194A (zh) * | 2018-07-03 | 2019-02-12 | 优视科技有限公司 | 页面访问方法、装置、设备以及存储介质 |
CN111201752A (zh) * | 2017-08-11 | 2020-05-26 | 塞库尔开放***公司 | 基于哈希的数据验证*** |
CN111309756A (zh) * | 2020-04-24 | 2020-06-19 | 北京信安世纪科技股份有限公司 | 一种数据库脚本编码、解码方法及装置 |
CN114115895A (zh) * | 2021-11-23 | 2022-03-01 | 深圳Tcl新技术有限公司 | 一种代码查询方法、装置、电子设备和存储介质 |
CN114579107A (zh) * | 2022-03-11 | 2022-06-03 | 北京字跳网络技术有限公司 | 数据的处理方法、装置、设备及介质 |
CN114721807A (zh) * | 2022-04-22 | 2022-07-08 | 中国工商银行股份有限公司 | 批量业务任务执行方法、装置、设备、介质和程序产品 |
CN114791826A (zh) * | 2022-04-11 | 2022-07-26 | 亿玛创新网络(天津)有限公司 | 基于参数配置的Jenkins项目运行方法及装置 |
CN114996279A (zh) * | 2022-06-27 | 2022-09-02 | 深圳前海微众银行股份有限公司 | 一种sql脚本的优化方法及装置 |
CN115390846A (zh) * | 2022-08-11 | 2022-11-25 | 地平线(上海)人工智能技术有限公司 | 编译构建方法、装置、电子设备和存储介质 |
CN116257426A (zh) * | 2021-12-10 | 2023-06-13 | 中国联合网络通信集团有限公司 | 测试关联方法、装置、电子设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9117071B2 (en) * | 2009-06-03 | 2015-08-25 | Apple Inc. | Methods and apparatuses for secure compilation |
US20130041900A1 (en) * | 2011-08-10 | 2013-02-14 | Bank Of America Corporation | Script Reuse and Duplicate Detection |
-
2023
- 2023-06-16 CN CN202310713234.XA patent/CN116450250B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6308320B1 (en) * | 1999-01-15 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for incremental selective compilation of intermediate code files during computer system compilation and linking |
CN103412754A (zh) * | 2013-08-15 | 2013-11-27 | 优视科技有限公司 | 动态语言代码执行方法和装置 |
CN111201752A (zh) * | 2017-08-11 | 2020-05-26 | 塞库尔开放***公司 | 基于哈希的数据验证*** |
CN108228231A (zh) * | 2018-01-08 | 2018-06-29 | 南京邮电大学 | 一种Git仓库文件注解***的可视化漂移算法 |
CN108880820A (zh) * | 2018-06-01 | 2018-11-23 | 中国联合网络通信集团有限公司 | 代码管理方法和装置 |
CN109325194A (zh) * | 2018-07-03 | 2019-02-12 | 优视科技有限公司 | 页面访问方法、装置、设备以及存储介质 |
CN111309756A (zh) * | 2020-04-24 | 2020-06-19 | 北京信安世纪科技股份有限公司 | 一种数据库脚本编码、解码方法及装置 |
CN114115895A (zh) * | 2021-11-23 | 2022-03-01 | 深圳Tcl新技术有限公司 | 一种代码查询方法、装置、电子设备和存储介质 |
CN116257426A (zh) * | 2021-12-10 | 2023-06-13 | 中国联合网络通信集团有限公司 | 测试关联方法、装置、电子设备及存储介质 |
CN114579107A (zh) * | 2022-03-11 | 2022-06-03 | 北京字跳网络技术有限公司 | 数据的处理方法、装置、设备及介质 |
CN114791826A (zh) * | 2022-04-11 | 2022-07-26 | 亿玛创新网络(天津)有限公司 | 基于参数配置的Jenkins项目运行方法及装置 |
CN114721807A (zh) * | 2022-04-22 | 2022-07-08 | 中国工商银行股份有限公司 | 批量业务任务执行方法、装置、设备、介质和程序产品 |
CN114996279A (zh) * | 2022-06-27 | 2022-09-02 | 深圳前海微众银行股份有限公司 | 一种sql脚本的优化方法及装置 |
CN115390846A (zh) * | 2022-08-11 | 2022-11-25 | 地平线(上海)人工智能技术有限公司 | 编译构建方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116450250A (zh) | 2023-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8543543B2 (en) | Hash-based file comparison | |
CN107948314B (zh) | 基于规则文件的业务处理方法、装置及服务器 | |
CN107729227B (zh) | 应用程序测试范围确定方法、***、服务器和存储介质 | |
CN110866198B (zh) | 静态资源缓存方法、***、装置、计算机设备和存储介质 | |
US8839420B2 (en) | Validation of function call parameters | |
WO2013109555A1 (en) | Managing script file dependencies and load times | |
US20190087208A1 (en) | Method and apparatus for loading elf file of linux system in windows system | |
CN110023938B (zh) | 利用函数长度统计确定文件相似度的***和方法 | |
CN106843947B (zh) | 代码缺陷的处理方法和装置 | |
CN114467083A (zh) | 用于应用程序组的定制根进程 | |
CN107577943B (zh) | 基于机器学习的样本预测方法、装置及服务器 | |
CN113590144B (zh) | 一种依赖处理方法及装置 | |
CN113641873B (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN113608800A (zh) | 项目启动方法、装置、电子设备及存储介质 | |
CN116450250B (zh) | 一种动态脚本执行方法、***及存储介质 | |
US10505739B2 (en) | Prefix fingerprint | |
CN106502707B (zh) | 代码生成方法及装置 | |
CN112800194A (zh) | 一种接口变更识别方法、装置、设备及存储介质 | |
CN108959915B (zh) | 一种rootkit检测方法、装置及服务器 | |
CN107451050B (zh) | 函数获取方法和装置、服务器 | |
CN114611039B (zh) | 异步加载规则的解析方法、装置、存储介质和电子设备 | |
CN115858186A (zh) | 共享资源访问方法、***、电子设备及存储介质 | |
CN110929188A (zh) | 服务端页面渲染方法及装置 | |
CN114296747A (zh) | 软件安装包的安装方法以及装置 | |
CN112395299A (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 |