1.本技术涉及互联网技术领域,特别涉及文件处理方法。本技术同时涉及文件处理装置,一种计算设备,以及一种计算机可读存储介质。
背景技术:2.随着互联网技术的应用与发展,目前游戏行业中经常会使用一种名为lua脚本的脚本语言,相对于c++等高级语言,lua脚本语言更容易掌握。同时,作为一种在沙箱虚拟机上运行的语言,由于和底层机器语言隔离开,天然具有安全性,但是灵活的语言带来了一系列问题,例如函数定义太灵活,导致很难进行一些定制化的函数查找以及函数优化。因此,如何快速查找lua脚本中的函数以及对lua脚本中的函数进行优化是目前亟需解决的问题。
技术实现要素:3.有鉴于此,本技术实施例提供了文件处理方法。本技术同时涉及文件处理装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的在lua脚本文件中无法精确查找到特定函数以及静态分析下对lua脚本的效率优化。
4.根据本技术实施例的第一方面,提供了一种文件处理方法,包括:
5.获取待处理脚本文件;
6.解析所述待处理脚本文件,获得脚本函数集合和所述脚本函数集合中每个脚本函数的调用信息;
7.基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树;
8.接收针对所述待处理脚本文件的文件处理指令,响应于所述文件处理指令对所述脚本函数树进行处理。
9.根据本技术实施例的第二方面,提供了一种文件处理装置,包括:
10.获取模块,被配置为获取待处理脚本文件;
11.解析模块,被配置为解析所述待处理脚本文件,获得脚本函数集合和所述脚本函数集合中每个脚本函数的调用信息;
12.生成模块,被配置为基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树;
13.处理模块,被配置为接收针对所述待处理脚本文件的文件处理指令,响应于所述文件处理指令对所述脚本函数树进行处理。
14.根据本技术实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述计算机指令时实现所述文件处理方法的步骤。
15.根据本技术实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该计算机指令被处理器执行时实现所述文件处理方法的步骤。
16.本技术提供的文件处理方法,包括:获取待处理脚本文件;解析所述待处理脚本文件,获得脚本函数集合和所述脚本函数集合中每个脚本函数的调用信息;基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树;接收针对所述待处理脚本文件的文件处理指令,响应于所述文件处理指令对所述脚本函数树进行处理。
17.本技术一实施例实现了通过解析待处理脚本文件,生成与待处理脚本文件对应的脚本函数树,基于脚本函数树对待处理脚本文件进行相应的文件处理,从而提高待处理脚本文件的运行效率。
附图说明
18.图1是本技术一实施例提供的一种文件处理方法的流程图;
19.图2是本技术一实施例中的脚本函数树的示意图;
20.图3是本技术一实施例中函数的指令示意图;
21.图4是本技术一实施例提供的一种应用于优化lua脚本文件的文件处理方法的处理流程图;
22.图5是本技术一实施例提供的一种文件处理装置的结构示意图;
23.图6是本技术一实施例提供的一种计算设备的结构框图。
具体实施方式
24.在下面的描述中阐述了很多具体细节以便于充分理解本技术。但是本技术能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本技术内涵的情况下做类似推广,因此本技术不受下面公开的具体实施的限制。
25.在本技术一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术一个或多个实施例。在本技术一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本技术一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
26.应当理解,尽管在本技术一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
27.首先,对本技术一个或多个实施例涉及的名词术语进行解释。
28.lua脚本:lua是一个小巧的脚本语言,该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
29.lua脚本是游戏行业经常使用的一种脚本语言,相比于c++等高级语言,脚本语言更容易掌握,同时lua语言作为一种在沙箱虚拟机上运行的语言,由于和底层机器语言隔离开,天然具有安全性。但是灵活的语言带来了一系列问题,例如函数定义太灵活,不需要申明就能使用的变量,导致我们很难进行一些需要定制化的查找行为,例如,需要找到在某些
lua脚本文件中,有符合特殊函数名的函数,且这些函数调用一些特定逻辑程序接口,上述目的通过现有的文本搜索是无法实现的,因为文本搜索是无法区分函数和函数之间的边界,文本搜索只能精确到某个脚本中调用了指定函数名和特定逻辑接口的函数,对于指定函数名嵌套调用特定逻辑接口,就无法进行查找,在一些特殊情况下,嵌套调用函数名甚至可能在其他的lua脚本文件中,文本搜索无法查找到这种指定函数名。
30.其次,lua脚本语言缺少相应的脚本检测方法,通常业界会采用动态性能分析,采样埋点的方式来进行分析,既运行的时候每隔一段时间,比如x微秒对lua堆栈进行一次采样,然后根据数据分布来统计相关函数的调用情况,但是对于静态分析来说,目前没有好的方案,正则语法甚至都很难识别函数的开始和结束,对于稍微复杂一点的函数中带注释说明,或者函数里面赋值一个变量,但是并没有实际使用,就无法对其进行区分。
31.基于此在本技术中,提供了文件处理方法,用于解决lua脚本中无法进行定制化查找以及脚本检测的问题,本技术同时涉及文件处理装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
32.图1示出了根据本技术一实施例提供的一种文件处理方法的流程图,具体包括以下步骤:
33.步骤102:获取待处理脚本文件。
34.其中,待处理脚本文件可以理解为待处理的lua脚本文件,针对待处理脚本文件进行后续的文件处理步骤。
35.在实际应用中,可以同时获取一个或多个待处理脚本文件,在获取多个lua脚本文件的情况下,将获得的多个lua脚本文件都作为待处理脚本文件,后续针对多个lua脚本文件进行文件处理的步骤。
36.在本技术一具体实施例中,获取待处理脚本文件,待处理脚本文件为lua脚本文件。
37.步骤104:解析所述待处理脚本文件,获得脚本函数集合和所述脚本函数集合中每个脚本函数的调用信息。
38.其中,解析待处理脚本文件可以理解为使用虚拟机运行待处理脚本文件,脚本函数集合为待处理脚本文件中包含的所有脚本函数,调用信息可以理解为脚本函数调用其他脚本函数的信息。例如,a函数的调用信息为调用b函数,则在待处理脚本文件中有a函数调用b函数的代码。
39.在实际应用中,在获得lua脚本文件之后,会将lua脚本文件载入内存并对lua脚本文件进行解析,根据事先规定的lua语法解析lua脚本,使用lua虚拟机自动解析lua脚本文件,将所有的函数注册到虚拟机中,从而获得lua脚本文件中的脚本函数集合以及每个脚本函数会调用的所有子脚本函数的指针,同时,虚拟机还会解析获得每个函数在虚拟机中运行的字节码和每个函数涉及到的所有常量和临时变量对象。
40.在本技术一具体实施例中,沿用上例,基于虚拟机解析lua脚本文件,获得lua脚本文件中的脚本函数集合以及脚本函数集合中每个脚本函数的调用信息。脚本函数集合中包括有a脚本函数、b脚本函数、c脚本函数以及d脚本函数。
41.步骤106:基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树。
42.其中,脚本函数树可以理解为根据脚本函数集合中的每个脚本函数生成的树状结构。参见图2,图2示出了本技术一实施例中的脚本函数树的示意图,其中,脚本函数树上有四个树节点,每个树节点代表一个函数原型(proto),每个函数原型中包括有函数对象和指令列表,且函数原型与函数原型之间会通过调用关系进行连接,即luaproto函数对象调用了其他3个sub proto子对象。
43.在实际应用中,为了更好的对lua脚本文件进行脚本检测或函数查找,可以基于虚拟机解析lua脚本文件,并生成lua脚本文件对应的脚本函数树,基于脚本函数树的数据结构进行脚本分析或者函数查找,提高文件处理的准确率与效率。
44.在本技术一具体实施例中,沿用上例,根据解析lua脚本文件获得的脚本函数集合和脚本函数集合中每个脚本函数的调用信息生成lua脚本文件对应的脚本函数树。
45.具体地,基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树,包括:
46.根据所述脚本函数集合中的每个脚本函数和每个脚本函数的调用信息生成每个脚本函数对应的函数节点;
47.根据每个脚本函数对应的函数节点生成所述待处理脚本文本对应的脚本函数树。
48.其中,函数节点可以理解为函数树上的函数原型,函数节点即表征为一个脚本函数,函数节点上包括有该函数和其会调用的所有子函数的指针,以及该函数在虚拟机中运行的字节码和该函数涉及的所有常量和临时变量对象,每个函数节点的数据结构一致。
49.在实际应用中,通过分析函数节点上的函数的字节码以及该函数调用的子函数的字节码就可以对该函数进行效率分析,或者可以查找到期望获得的函数。
50.在本技术一具体实施例中,沿用上例,根据脚本函数集合中的4个脚本函数和每个脚本函数的调用信息生成每个脚本函数对应的函数节点,分别是a函数节点、b函数节点、c函数节点以及d函数节点,根据4个函数节点生成待处理脚本文件对应的脚本函数树,a函数节点为主函数,b、c、d函数节点为a函数节点调用的子函数节点。
51.具体地,每个函数节点包括指令码列表;根据每个脚本函数对应的函数节点生成所述待处理脚本文本对应的脚本函数树,包括:
52.根据每个函数节点对应的指令码列表确定与每个函数节点具有关联关系的子函数节点;
53.基于每个函数节点和与每个函数节点具有关联关系的子函数节点生成所述待处理脚本文件对应的脚本函数树。
54.其中,函数节点与子函数节点的关联关系可以理解为函数节点对应的脚本函数调用了子函数节点对应的子脚本函数。例如,a函数节点对应的a脚本函数调用了b函数节点对应的b脚本函数,则a函数节点与b函数节点具有关联关系,b函数节点为a函数节点的子函数节点。
55.在实际应用中,根据待处理脚本文件中的脚本函数集合和脚本函数集合中每个脚本函数的调用信息生成每个脚本函数对应的函数节点之后,可以根据每个函数节点的指令码列表中的调用指针确定出与函数节点具有关联关系的子函数节点,根据关联关系将函数节点连接起来以生成脚本函数树。
56.在本技术一具体实施例中,根据a函数节点对应的指令码列表中的调用指针确定
出与a函数节点具有关联关系的子函数节点为b函数节点、c函数节点以及d函数节点,将a函数节点与b函数节点、c函数节点以及d函数节点根据关联关系连接起来,生成脚本函数树。
57.具体地,根据每个函数节点对应的指令码列表确定与每个函数节点具有关联关系的子函数节点,包括:
58.确定目标脚本函数对应的目标函数节点;
59.根据所述目标函数节点的目标指令码列表确定与所述目标函数节点具有关联关系的至少一个目标子函数节点。
60.其中,目标函数节点可以为在所有函数节点中选择出的一个函数节点,针对目标函数节点确定出目标函数节点的目标子函数节点。
61.在实际应用中,会对生成的所有函数节点都进行一次确定具有关联关系的子函数节点的流程,从而确定出每个函数节点对应的子函数节点。
62.在本技术一具体实施例中,沿用上例,确定目标脚本函数为a脚本函数,目标函数节点为a函数节点,根据a函数节点的指令码列表中的调用指针确定与a函数节点具有关联关系的目标子函数节点,目标子函数节点分别是b函数节点、c函数节点、d函数节点。
63.步骤108:接收针对所述待处理脚本文件的文件处理指令,响应于所述文件处理指令对所述脚本函数树进行处理。
64.在实际应用中,在生成待处理脚本文件对应的脚本函数树之后,则可以基于脚本函数树对待处理脚本文件进行相关处理。
65.其中,接收的文件处理指令可以理解为针对待处理脚本文件进行处理的指令,根据文件处理指令对待处理脚本文件进行相关处理,文件处理指令可以是针对待处理脚本文件效率优化的指令,即待优化函数确定指令;文件处理指令也可以是针对待处理脚本文件的函数查找指令。
66.在本技术一具体实施例中,沿用上例,接收针对待处理脚本文件的文件处理指令,文件处理指令为待优化函数确定指令,响应于文件处理指令在脚本函数树中确定出待优化函数。
67.在本技术另一具体实施例中,沿用上例,接收针对待处理脚本文件的文件处理指令,文件处理指令为函数查找指令,响应于文件处理指令在脚本函数树中确定出期望查找的目标脚本函数。
68.在实际应用中,在文件处理指令为待优化函数确定指令的情况下,需要基于脚本函数树确定出待优化函数,具体地,所述文件处理指令为待优化函数确定指令;
69.响应于所述文件处理指令对所述脚本函数树进行处理,包括:
70.分析所述脚本函数树的每个函数节点的指令码列表,基于每个指令码列表确定至少一个待优化函数节点;
71.反馈所述至少一个待优化函数节点的待优化函数信息。
72.其中,待优化函数确定指令可以理解为针对待处理脚本文件的检测指令,检测待处理脚本文件中需要进行优化的函数,从而提高待处理脚本文件的运行效率。待优化函数节点可以理解为待处理脚本文件中的无效函数,例如,当a函数调用了b函数,但是b函数是一个空函数,则b函数即为待优化函数。
73.在实际应用中,对于游戏脚本而言,存在大量同一种类的lua脚本调用,以技能为
例,对于特定的技能id,会在技能释放过程中,尝试调用该技能对应的在脚本文件中的特定函数,假设有技能开始释放,作用到敌人目标并命中或闪避,结束消亡。等几个会被固定调用的脚本流程,策划可能会对之前实现相关内容但是后续废弃的相关功能进行注释,表示该函数对应的相关功能已经被废弃,但是如果识别不出注释的话,游戏逻辑就会调用该函数,例如技能作用到目标并不执行后续操作,但是游戏逻辑还是会调用该函数。在从c++脚本语言调用lua虚拟机的过程中,会有一系列虚拟机堆栈等复杂操作,如果能大批量减少这类损耗,会对游戏运行效率有较大的提升,在实际情况下,这种无效调用数量很多,因此需要从待处理脚本文件中确定出需要优化的函数,减少运行待处理脚本文件的损耗,提高运行效率。
74.在本技术一具体实施例中,沿用上例,分析脚本函数树上的每个函数节点的指令码列表,获取到指令码列表中每个函数涉及到的常量和临时变量对象,基于每个指令码列表中的常量和临时变量对象判断每个函数节点中是否存在待优化函数,判断结果为d函数节点中的d函数为待优化函数。将包含d函数节点的待优化函数信息反馈至工作人员,由工作人员进行后续的优化处理。
75.具体地,分析所述脚本函数树上的每个函数节点的指令码列表,基于每个指令码列表确定至少一个待处理函数节点,包括:
76.获取每个函数节点的指令码列表;
77.根据预设优化条件和每个函数节点的指令码列表判断每个函数节点是否需要进行优化;
78.根据判断结果确定至少一个待优化函数节点。
79.其中,预设优化条件可以为工作人员提前设置的判断函数是否需要优化的条件,例如,预设优化条件可以是函数只对本地变量进行赋值的操作,并有对全局变量进行操作,则本地变量并没有被后续使用,则当函数节点的指令码列表中的变量信息满足该预设优化条件的情况下,该函数节点对应的函数即为待优化函数,表征该函数可以被优化。
80.在实际应用中,预设优化条件还可以包括有函数已经被注释、函数调用空函数,当根据函数节点的指令码列表中的相关信息确定出该函数节点满足预设优化条件之后,表示该函数节点需要进行优化。
81.在本技术一具体实施例中,获取4个函数节点的指令码列表,根据预设优化条件和每个函数节点的指令码列表判断这4个函数节点是否需要进行优化,判断结果为d函数节点为待优化函数节点,即d函数节点中的d脚本函数为待优化函数。
82.具体地,对于任意一个函数节点是否需要进行优化可通过以下步骤进行判断,包括:
83.获取目标函数节点的指令码列表中的每个指令码对应的函数指令;
84.判断每个函数指令是否满足所述预设优化条件;
85.在至少一个函数指令满足所述预设优化条件的情况下,确定所述目标函数节点为待优化函数节点;
86.在每个函数指令都不满足所述预设优化条件的情况下,确定所述目标函数节点为正常函数节点。
87.其中,函数指令可以理解为脚本函数中对变量进行的操作指令、注释指令、调用指
令等,每个函数节点的指令码列表中可能包括有多个函数指令,判断每个函数指令是否满足预设优化条件从而判断出函数节点是否为待优化函数节点。
88.在实际应用中,通过扫描每个函数节点的指令码列表,就可以知道这个函数里究竟做了哪些事情。获取每个函数节点的每个指令码对应的函数指令,只要该函数节点的指令码列表中有一条函数指令满足预设优化条件,则确定该函数节点为待优化函数节点。
89.在本技术一具体实施例中,沿用上例,确定目标函数节点为d函数节点,获取d函数节点的指令码列表中的每个指令码对应的函数指令,函数指令为注释指令,基于注释指令对d函数进行判断,d函数为:
90.function hittarget(pcaster,ptarget,nhitvalue)
91.‑‑
pcaster.addbuff(111,1)
92.end
93.d函数中的注释指令表示这行脚本已经被注释了,因此d函数中的注释指令满足预设优化条件,d函数为待优化函数节点。
94.在本技术另一具体实施例中,沿用上例,确定目标函数节点为d函数节点,获取d函数节点的指令码列表中的每个指令码对应的函数指令,函数指令为变量操作指令,基于注释指令对d函数进行判断,d函数为:
95.function hittarget(pcaster,ptarget,nhitvalue)
96.local buff=pcaster.getbuff(111,1)
97.‑‑
print(buff.nlevel)
98.end
99.d函数中的变量操作指令在此赋值了一个本地变量buff,但是后续该本地变量buff没有执行其他任何操作,因此d函数中的变量操作指令满足预设优化条件,d函数为待优化函数节点。
100.在本技术另一具体实施例中,沿用上例,确定目标函数节点为a函数节点,获取a函数节点的指令码列表中的每个指令码对应的函数指令,函数指令为调用指令,调用指令为a函数调用d函数,a函数为:
101.function hittarget(pcaster,ptarget,nhitvalue)
102.hittargetsub(nhitvalue)
103.end
104.d函数为:
105.function hittargetsub(nhitvalue)
106.end
107.a函数中的调用指令为a函数调用d函数,但是d函数是空函数,则调用指令满足预设优化条件,a函数节点为待优化函数节点。
108.在本技术另一具体实施例中,获取a函数节点的指令码列表中的每个指令码对应的函数指令,参见图3,图3示出了本技术一实施例中函数的指令示意图,其中,函数指令中的op_move表示把寄存器b中的指令放到寄存器a中,op_loadk表示把常量表中bx的值放到寄存器a中,而寄存器中的值可以认为是临时变量,如果这些值没有赋值给全局变量,或者赋值给传入的参数,或者没有调用白名单函数外的值,就认为是临时变量,最终可以被抛
弃。则确定a函数节点为待优化函数节点。
109.具体地,在确定所述目标函数节点为待优化函数节点之后,所述方法还包括:
110.确定所述目标函数节点对应的目标函数;
111.在所述目标函数属于预设白名单脚本函数集合的情况下,确定所述目标函数节点为正常函数节点;
112.在所述目标函数不属于预设白名单脚本函数集合的情况下,确定所述目标函数节点为待优化函数节点。
113.其中,预设白名单脚本函数集合可以理解为包含多个白名单脚本函数的集合,白名单脚本函数可以理解为不会对函数中变量或者游戏世界中的数值产生任何影响的函数,这类函数不需要进行优化。例如,函数中包含所有的读取数值的接口、获取玩家lua对象的接口、获取属性对象接口,这类函数即为白名单脚本函数。
114.在实际应用中,扫描函数节点指令码列表确定出待优化函数节点之后,还可以基于白名单脚本函数集合对待优化函数节点进行进一步判断,若待优化函数节点中的待优化函数为白名单脚本函数,则该函数节点可以不进行优化处理。基于预设白名单脚本函数集合还可以进行其他方面的扩展,例如,某些白名单脚本函数需求调用这些函数时候传入的值是已经被赋值过的,在调用这些函数的时候,若传入的值没有被赋值,则也可以确定出这些函数是待优化函数。
115.在本技术一具体实施例中,沿用上例,确定d函数节点为待优化函数节点之后,确定d函数节点对的d函数为待优化函数,d函数属于预设白名单脚本函数集合,则d函数节点为正常函数节点,不需要进行优化。
116.在本技术另一具体实施例中,沿用上例,确定d函数节点为待优化函数节点之后,确定d函数节点对的d函数为待优化函数,d函数不属于预设白名单脚本函数集合,则d函数节点为待优化函数节点,需要进行优化。
117.在实际应用中,确定出待优化函数节点之后,可以将检测结果反馈至工作人员,由工作人员对待处理脚本文件进行优化,具体地,在反馈所述至少一个待优化函数节点的待优化函数信息之后,所述方法还包括:
118.接收针对所述待优化函数信息返回的优化操作信息;
119.根据所述优化操作信息对所述待处理函数节点的待优化函数进行优化。
120.其中,优化操作信息可以理解为工作人员针对待优化函数的优化操作,根据优化操作信息对待优化函数进行优化,从而提高待处理脚本文件的运行效率。
121.在本技术一具体实施例中,接收针对d函数返回的优化操作信息,优化操作信息为删除函数,则根据优化操作信息对d函数节点的d函数进行删除。
122.在文件处理指令为待优化函数确定指令的情况下,通过响应于待优化函数确定指令,基于脚本函数树来对待处理脚本文件进行分析,获取出废弃的lua脚本函数并进行优化处理,在实际情况下,还可以使用机器来进行扫描分析,避免人工干预消耗人力。
123.在另一种应用情况下,文件处理指令还可以是函数查找指令,具体地,所述文件处理指令为函数查找指令;
124.响应于所述文件处理指令对所述脚本函数树进行处理,包括:
125.获取所述函数查找指令中的目标脚本函数标识和目标指令码标识;
126.根据所述目标脚本函数标识和目标指令码标识在所述脚本函数树中进行查找,并获得目标脚本函数。
127.其中,函数查找指令可以理解为工作人员发出的在待处理脚本文件中查找特定函数的指令,即查找目标脚本函数的指令;函数查找指令中包括需要的脚本函数标识和指令码标识,根据脚本函数标识和指令码标识在脚本函数树中进行查找。脚本函数标识可以理解为脚本函数的函数名、指令码标识可以理解为该指令码的接口名。
128.在实际应用中,工作人员会指定函数名和这个函数中的特定函数,并生成一个函数查找指令,基于函数查找指令查找出目标脚本函数。
129.在本技术一具体实施例中,获取函数查找指令中的目标脚本函数标识和目标指令码标识,根据目标脚本函数标识和目标指令码标识在脚本函数树中进行查找,在满足脚本函数标识和目标脚本函数标识一致且指令码标识和目标指令码标识一致的情况下,确定该函数为目标脚本函数。
130.具体地,根据所述目标脚本函数标识和目标指令码标识在所述脚本函数树中进行查找,并获得目标脚本函数,包括:
131.根据所述目标脚本函数标识在所述脚本函数树中确定初始脚本函数对应的初始函数节点;
132.在所述初始函数节点的指令码列表中包括目标指令码标识的情况下,确定初始脚本函数为目标脚本函数;
133.在所述初始函数节点的指令码列表中不包括目标指令码标识的情况下,判断与初始函数节点具有关联关系的初始子函数节点的指令码列表中是否包括目标指令码标识;
134.在所述初始子函数节点的指令码列表中包括目标指令码标识的情况下,确定初始脚本函数为目标脚本函数;
135.在所述初始子函数节点的指令码列表中不包括目标指令码标识的情况下,确定初始脚本函数不为目标脚本函数。
136.在实际应用中,可以根据指定函数名在脚本函数树中确定出与指定函数名一致的函数,并在该函数的指令码列表中进行指令码标识的查找,在两者都满足的情况下,确定该函数为期望查找的目标脚本函数,若在该函数的指令码列表中没有查找到目标指令码标识,则可以在该函数对应的子函数中进行查找,如果子函数中有目标指令码标识,则也符合需求。
137.在本技术一具体实施例中,基于脚本函数树中所有的函数节点,将目标脚本函数标识与每个函数节点的脚本函数标识进行比较,确定出脚本函数标识与目标脚本函数标识一致的的初始脚本函数,在初始脚本函数对应的初始脚本函数节点的指令码列表中的常量列表中查看是否包括目标指令码标识,即该函数是否引用了目标指令码标识对应的特殊逻辑接口,在该函数引用特殊逻辑接口的情况下,确定该函数为目标脚本函数,该目标脚本函数对应的函数节点为目标函数节点。
138.在本技术另一具体实施例中,确定初始脚本函数之后,在初始脚本函数对应的初始脚本函数节点的指令码列表中的常量列表中查看是否包括目标指令码标识,即该函数是否引用了目标指令码标识对应的特殊逻辑接口,在该函数没有引用特殊逻辑接口的情况下,在该函数的子函数的指令码列表中的常量列表中查看是否包括目标指令码标识,在子
函数引用特殊逻辑接口的情况下,也确定该函数为目标脚本函数。
139.本技术提供的一种文件处理方法,包括:获取待处理脚本文件;解析所述待处理脚本文件,获得脚本函数集合和所述脚本函数集合中每个脚本函数的调用信息;基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树;接收针对所述待处理脚本文件的文件处理指令,响应于所述文件处理指令对所述脚本函数树进行处理。通过解析待处理脚本文件,构建与待处理脚本文件对应的脚本函数树,基于脚本函数树的数据结构,可以实现对待处理脚本文件的分析检测处理,确定出待优化函数并进行优化,提高待处理脚本文件的运行效率,也可以实现在待处理脚本文件中的函数查找处理,满足工作人员查找定制化函数的需求,减少工作人员查找函数的时间,提高查找效率与准确性。
140.下述结合附图4,以本技术提供的文件处理方法在优化lua脚本文件的应用为例,对所述文件处理方法进行进一步说明。其中,图4示出了本技术一实施例提供的一种应用于优化lua脚本文件的文件处理方法的处理流程图,具体包括以下步骤:
141.步骤402:获取lua脚本文件。
142.步骤404:解析lua脚本文件,获得脚本函数集合和脚本函数集合中每个脚本函数的调用信息。
143.步骤406:根据脚本函数集合中的每个脚本函数和每个脚本函数的调用信息生成每个脚本函数对应的函数节点。
144.步骤408:根据每个函数节点对应的指令码列表确定与每个函数节点具有关联关系的子函数节点。
145.步骤410:基于每个函数节点和与每个函数节点具有关联关系的子函数节点生成lua脚本文件对应的脚本函数树。
146.步骤412:接收针对lua脚本文件的待优化函数确定指令。
147.步骤414:分析脚本函数树的每个函数节点的指令码列表,基于每个指令码列表确定待优化函数节点。
148.步骤416:反馈至少一个待优化函数节点的待优化函数信息。
149.步骤418:接收针对待优化函数信息返回的优化操作信息。
150.步骤420:根据优化操作信息对待处理函数节点的待优化函数进行优化。
151.本技术提供的一种应用于lua脚本优化的文件处理方法,包括:获取lua脚本文件;解析lua脚本文件,获得脚本函数集合和脚本函数集合中每个脚本函数的调用信息;根据脚本函数集合中的每个脚本函数和每个脚本函数的调用信息生成每个脚本函数对应的函数节点;根据每个函数节点对应的指令码列表确定与每个函数节点具有关联关系的子函数节点;基于每个函数节点和与每个函数节点具有关联关系的子函数节点生成lua脚本文件对应的脚本函数树;接收针对lua脚本文件的待优化函数确定指令;分析脚本函数树的每个函数节点的指令码列表,基于每个指令码列表确定待优化函数节点;反馈至少一个待优化函数节点的待优化函数信息;接收针对待优化函数信息返回的优化操作信息;根据优化操作信息对待处理函数节点的待优化函数进行优化。通过解析lua脚本文件,构建与lua脚本文件对应的脚本函数树,基于脚本函数树的数据结构,可以实现对lua脚本文件的静态分析,并实现后续的优化处理,确定出待优化函数并进行优化,提高待处理脚本文件的运行效率。
152.与上述方法实施例相对应,本技术还提供了文件处理装置实施例,图5示出了本技术一实施例提供的一种文件处理装置的结构示意图。如图5所示,该装置包括:
153.获取模块502,被配置为获取待处理脚本文件;
154.解析模块504,被配置为解析所述待处理脚本文件,获得脚本函数集合和所述脚本函数集合中每个脚本函数的调用信息;
155.生成模块506,被配置为基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树;
156.处理模块508,被配置为接收针对所述待处理脚本文件的文件处理指令,响应于所述文件处理指令对所述脚本函数树进行处理。
157.可选地,所述生成模块506进一步被配置为:
158.根据所述脚本函数集合中的每个脚本函数和每个脚本函数的调用信息生成每个脚本函数对应的函数节点;
159.根据每个脚本函数对应的函数节点生成所述待处理脚本文本对应的脚本函数树。
160.可选地,所述生成模块506进一步被配置为:
161.根据每个函数节点对应的指令码列表确定与每个函数节点具有关联关系的子函数节点;
162.基于每个函数节点和与每个函数节点具有关联关系的子函数节点生成所述待处理脚本文件对应的脚本函数树。
163.可选地,所述生成模块506进一步被配置为:
164.确定目标脚本函数对应的目标函数节点;
165.根据所述目标函数节点的目标指令码列表确定与所述目标函数节点具有关联关系的至少一个目标子函数节点。
166.可选地,所述处理模块508进一步被配置为:
167.分析所述脚本函数树的每个函数节点的指令码列表,基于每个指令码列表确定至少一个待优化函数节点;
168.反馈所述至少一个待优化函数节点的待优化函数信息。
169.可选地,所述处理模块508进一步被配置为:
170.获取每个函数节点的指令码列表;
171.根据预设优化条件和每个函数节点的指令码列表判断每个函数节点是否需要进行优化;
172.根据判断结果确定至少一个待优化函数节点。
173.可选地,所述处理模块508进一步被配置为:
174.获取目标函数节点的指令码列表中的每个指令码对应的函数指令;
175.判断每个函数指令是否满足所述预设优化条件;
176.在至少一个函数指令满足所述预设优化条件的情况下,确定所述目标函数节点为待优化函数节点;
177.在每个函数指令都不满足所述预设优化条件的情况下,确定所述目标函数节点为正常函数节点。
178.可选地,所述处理模块508进一步被配置为:
179.确定所述目标函数节点对应的目标函数;
180.在所述目标函数属于预设白名单脚本函数集合的情况下,确定所述目标函数节点为正常函数节点;
181.在所述目标函数不属于预设白名单脚本函数集合的情况下,确定所述目标函数节点为待优化函数节点。
182.进一步地,所述装置还包括接收模块,被配置为:
183.接收针对所述待优化函数信息返回的优化操作信息;
184.根据所述优化操作信息对所述待处理函数节点的待优化函数进行优化。
185.可选地,所述处理模块508进一步被配置为:
186.获取所述函数查找指令中的目标脚本函数标识和目标指令码标识;
187.根据所述目标脚本函数标识和目标指令码标识在所述脚本函数树中进行查找,并获得目标脚本函数。
188.可选地,所述处理模块508进一步被配置为:
189.根据所述目标脚本函数标识在所述脚本函数树中确定初始脚本函数对应的初始函数节点;
190.在所述初始函数节点的指令码列表中包括目标指令码标识的情况下,确定初始脚本函数为目标脚本函数;
191.在所述初始函数节点的指令码列表中不包括目标指令码标识的情况下,判断与初始函数节点具有关联关系的初始子函数节点的指令码列表中是否包括目标指令码标识;
192.在所述初始子函数节点的指令码列表中包括目标指令码标识的情况下,确定初始脚本函数为目标脚本函数;
193.在所述初始子函数节点的指令码列表中不包括目标指令码标识的情况下,确定初始脚本函数不为目标脚本函数。
194.本技术提供的一种文件处理装置,包括:获取模块,被配置为获取待处理脚本文件;解析模块,被配置为解析所述待处理脚本文件,获得脚本函数集合和所述脚本函数集合中每个脚本函数的调用信息;生成模块,被配置为基于所述脚本函数集合和每个脚本函数的调用信息生成所述待处理脚本文件对应的脚本函数树;处理模块,被配置为接收针对所述待处理脚本文件的文件处理指令,响应于所述文件处理指令对所述脚本函数树进行处理。通过解析待处理脚本文件,构建与待处理脚本文件对应的脚本函数树,基于脚本函数树的数据结构,可以实现对待处理脚本文件的分析检测处理,确定出待优化函数并进行优化,提高待处理脚本文件的运行效率,也可以实现在待处理脚本文件中的函数查找处理,满足工作人员查找定制化函数的需求,减少工作人员查找函数的时间,提高查找效率与准确性。
195.上述为本实施例的一种文件处理装置的示意性方案。需要说明的是,该文件处理装置的技术方案与上述的文件处理方法的技术方案属于同一构思,文件处理装置的技术方案未详细描述的细节内容,均可以参见上述文件处理方法的技术方案的描述。
196.图6示出了根据本技术一实施例提供的一种计算设备600的结构框图。该计算设备600的部件包括但不限于存储器610和处理器620。处理器620与存储器610通过总线630相连接,数据库650用于保存数据。
197.计算设备600还包括接入设备640,接入设备640使得计算设备600能够经由一个或
多个网络660通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备640可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
198.在本技术的一个实施例中,计算设备600的上述部件以及图6中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图6所示的计算设备结构框图仅仅是出于示例的目的,而不是对本技术范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
199.计算设备600可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备600还可以是移动式或静止式的服务器。
200.其中,处理器620执行所述计算机指令时实现所述的文件处理方法的步骤。
201.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的文件处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述文件处理方法的技术方案的描述。
202.本技术一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该计算机指令被处理器执行时实现如前所述文件处理方法的步骤。
203.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的文件处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述文件处理方法的技术方案的描述。
204.上述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
205.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,randomaccess memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
206.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申
请所必须的。
207.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
208.以上公开的本技术优选实施例只是用于帮助阐述本技术。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本技术的内容,可作很多的修改和变化。本技术选取并具体描述这些实施例,是为了更好地解释本技术的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本技术。本技术仅受权利要求书及其全部范围和等效物的限制。