发明内容
本申请提供了一种处理代码的方法、装置、设备及存储介质,能够解决现有技术中开发效率低的问题。
第一方面,本申请提供一种处理代码的方法,所述方法包括:
获取检测文件,调用检索脚本对JavaScript代码文本进行全局检索,获取与所述检测文件存在相同和/或相似内容的代码,将所述与所述检测文件存在相同和/或相似内容的代码作为待检测对象,其中,所述检测文件包括多种存在影响系统性能的可能性的代码语句、所述代码语句对系统性能产生影响的操作环境和所述代码语句对应的可替代方案;
当检测到所述待检测对象对系统运行性能产生影响时,根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值;
当判断到所述分析值大于第一预设阈值时,将所述分析值大于第一预设阈值的待检测对象作为目标检测对象,获取所述目标检测对象的操作轨迹,以及获取所述目标检测对象的分析信息;
当检测到所述操作轨迹满足预设条件时,根据所述操作轨迹和所述分析信息,分析所述目标检测对象导致系统降低性能的运行特性,以及分析所述目标检测对象导致系统降低性能的运行时段,以获得分析结果,其中,所述预设条件包括所述目标检测对象在所述JavaScript代码文本中导致系统降低性能的操作次数超过限定次数、所述操作轨迹中的操作位置在预设作用域中,以及所述目标检测对象在所述JavaScript代码文本中引用预设变量;
根据所述分析结果遍历所述检测文件,获取所述目标检测对象在所述检测文件中对应的可替代方案,根据所述可替代方案生成多个优化方案;
从多个所述优化方案中选择一个所述优化方案对所述目标检测对象进行更新,并输出所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象。
一种可能的设计中,所述检测文件包括对DOM操作的代码、setTimeout语句和变量,所述获取与所述检测文件存在相同和/或相似内容的代码,将所述与所述检测文件存在相同和/或相似内容的代码作为待检测对象,包括以下实现方式中的至少一个:
判断所述JavaScript代码文本中是否存在包括关于文档对象模型DOM操作代码的关键字的代码;若判断结果为是,则获取包含所述关键字的代码对应的JavaScript代码文本段内容;通过静态分析工具对所述JavaScript代码文本段内容进行静态分析,获取作用域,其中,所述作用域包括局部作用域和全局作用域;判断所述作用域中是否存在重复的DOM代码;若判断结果为是,则标识所述DOM代码,以获得待检测对象;
或,判断所述JavaScript代码文本中是否存在形式与预设的setTimeout语句的形式相同和/或相似的代码;若判断结果为是,则以形式与预设的setTimeout语句的形式相同和/或相似的代码作为待检测对象;
或,根据变量的命名规则,识别并获取所述JavaScript代码文本中的变量;判断所述变量是否是在函数外部进行定义;若判断结果为是,则获取函数外部定义的变量;根据所述函数外部定义的变量,按照预设的抽象语法树抽象语法树的创建规则创建抽象语法树;通过静态分析工具对所述JavaScript代码文本进行静态分析,获得局部作用域;通过所述抽象语法树分析在所述局部作用域中是否存在所述函数外部定义的变量;若存在,则对在所述局部作用域中被引用的所述函数外部定义的变量进行标记,以获取待检测对象。
一种可能的设计中,所述根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值之前,所述方法还包括:
根据所述待检测对象,评估所述JavaScript代码文本在系统中运行时的平均响应时间、单个事务的平均响应时间和吞吐量;
根据所述待检测对象,评估所述JavaScript代码文本在系统中运行时的页面加载时间、页面流量和页面性能指数;
分析所述平均响应时间、所述单个事务的平均响应时间、所述吞吐量、所述页面加载时间、所述页面流量和所述页面性能指数,以获取判断结果,其中,所述判断结果包括所述平均响应时间与第二预设阈值的比较值、所述单个事务的平均响应时间与超过第三预设阈值的比较值、所述吞吐量与超过第四预设阈值的比较值、所述页面加载时间与超过第五预设阈值的比较值、所述页面流量与超过第六预设阈值的比较值和所述页面性能指数与超过第七预设阈值的比较值。
一种可能的设计中,所述从多个所述优化方案中选择一个所述优化方案对所述目标检测对象进行更新,并输出所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象,包括:
根据对性能的影响程度,对多个所述优化方案进行评估,获取多个评估值;
比较多个所述评估值,获取所述评估值最大的优化方案;
判断所述评估值最大的优化方案的评估值是否小于预设值,若是,则以接收的用户输入的修改内容作为最终的最优优化方案;
将所述最终的最优优化方案添加在所述检测文件中,以更新所述检测文件;
根据所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象,生成显示文本,以及对所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象进行分析,生成可视化图表;
将所述可视化图表添加至所述显示文本中,输出添加所述可视化图表的显示文本。
一种可能的设计中,所述系统运行性能包括全局性能和系统降低运行性能,所述根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值,包括:
通过所述判断结果以分析所述待检测对象是否对所述全局性能产生影响,以获取第一分析数据;
以导致所述系统降低运行性能的信息类型对所述待检测对象进行分析,以获得第二分析数据,其中,所述信息类型包括运行速度、运行时间和运行内存;
以导致所述系统降低运行性能的作用域对所述待检测对象进行分析,获得第三分析数据;
以导致所述系统降低运行性能的代码的占比对所述待检测对象进行分析,获得第四分析数据;
以在所述JavaScript代码文本中的操作时间对所述待检测对象进行分析,获得第五分析数据;
以对所述JavaScript代码文本的操作关联度对所述待检测对象进行分析,获得第六分析数据;
根据预设比例,计算所述第一分析数据、所述第二分析数据、所述第三分析数据、所述第四分析数据、所述第五分析数据和所述第六分析数据的加权平均值,以获取分析值。
一种可能的设计中,获取当判断到所述分析值大于第一预设阈值时,将所述分析值大于第一预设阈值的待检测对象作为目标检测对象,所述目标检测对象的操作轨迹,包括:
计算所述分析值减去第一预设阈值的差值,以所述差值不小于零的待检测对象作为目标检测对象;
分析所述目标检测对象的类型;
若所述目标检测对象的类型为在作用域中进行重复操作的所述DOM操作代码,则分析所述DOM操作代码对应的代码行号、所在的作用域以及被重复操作的次数,获得所述目标检测对象的操作轨迹;
若所述目标检测对象的类型为所述setTimeOut语句,则分析所述setTimeOut语句对应的代码行号、所有所述setTimeOut语句被应用的次数以及相同的所述setTimeOut语句被应用的次数,获得所述目标检测对象的操作轨迹;
若所述目标检测对象的类型为所述局部作用域中引用的函数外部定义的变量,则分析所述局部作用域中引用的函数外部定义的变量对应的代码行号、所述局部作用域中引用的函数外部定义的变量所在的局部作用域、所有所述局部作用域中引用的函数外部定义的变量被引用的次数和相同所述局部作用域中引用的函数外部定义的变量被引用的次数,获得所述目标检测对象的操作轨迹。
一种可能的设计中,所述分析所述目标检测对象导致系统降低性能的运行特性,包括:
获取所述目标检测对象的代码类型和所述目标检测对象的关键词;
获取所述目标检测对象在所述JavaScript代码文本中的操作功能;
根据所述代码类型、所述关键词和所述操作功能,获取所述目标检测对象对系统性能产生影响的情况信息;
所述分析所述目标检测对象导致系统降低性能的运行时段,包括:
获取多个JavaScript代码训练文本;
获取所述检测文件的第一特征信息,以及获取所述多个JavaScript代码训练文本的多个第二特征信息,根据所述第一特征信息和多个所述第二特征信息确定预测目标;
将所述检测文件和所述多个JavaScript代码训练文本输入到神经网络模型中;
根据所述第一特征信息和多个所述第二特征信息和所述预测目标,对所述神经网络模型进行训练,以获得预测模型;
将所述目标检测对象和所述情况信息输入到所述预测模型中,通过所述预测模型对所述目标检测对象和所述情况信息进行分析,以获取所述目标检测对象在所述情况信息中降低系统性能的变化情况和运行时段。
第二方面,本申请提供一种用于处理代码的装置,具有实现对应于上述第一方面提供的处理代码的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。
一种可能的设计中,所述装置包括:
输入输出模块,用于获取检测文件;
处理模块,用于根据所述输入输出模块获取的所述检测文件,调用检索脚本对JavaScript代码文本进行全局检索,获取与所述检测文件存在相同和/或相似内容的代码,将所述与所述检测文件存在相同和/或相似内容的代码作为待检测对象;当检测到所述待检测对象对系统运行性能产生影响时,根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值;当判断到所述分析值大于第一预设阈值时,将所述分析值大于第一预设阈值的待检测对象作为目标检测对象,获取所述目标检测对象的操作轨迹,以及获取所述目标检测对象的分析信息;当检测到所述操作轨迹满足预设条件时,根据所述操作轨迹和所述分析信息,分析所述目标检测对象导致系统降低性能的运行特性,以及分析所述目标检测对象导致系统降低性能的运行时段,以获得分析结果,其中,所述预设条件包括所述目标检测对象在所述JavaScript代码文本中导致系统降低性能的操作次数超过限定次数、操作位置在预设作用域中和引用预设变量;根据所述分析结果遍历所述检测文件,获取所述目标检测对象在所述检测文件中对应的可替代方案,根据所述可替代方案生成多个优化方案;从多个所述优化方案中选择一个所述优化方案对所述目标检测对象进行更新,将所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象输入至显示模块,并通过所述显示模块并输出所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象;
所述显示模块,用于显示所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象。
一种可能的设计中,所述处理模块具体用于:
判断所述JavaScript代码文本中是否存在包括关于文档对象模型DOM操作代码的关键字的代码;若判断结果为是,则获取包含所述关键字的代码对应的JavaScript代码文本段内容;通过静态分析工具对所述JavaScript代码文本段内容进行静态分析,获取作用域,其中,所述作用域包括局部作用域和全局作用域;判断所述作用域中是否存在重复的DOM代码;若判断结果为是,则标识所述DOM代码,以获得待检测对象;
或,判断所述JavaScript代码文本中是否存在形式与预设的setTimeout语句的形式相同和/或相似的代码;若判断结果为是,则以形式与预设的setTimeout语句的形式相同和/或相似的代码作为待检测对象;
或,根据变量的命名规则,识别并获取所述JavaScript代码文本中的变量;判断所述变量是否是在函数外部进行定义;若判断结果为是,则获取函数外部定义的变量;根据所述函数外部定义的变量,按照预设的抽象语法树抽象语法树的创建规则创建抽象语法树;通过静态分析工具对所述JavaScript代码文本进行静态分析,获得局部作用域;通过所述抽象语法树分析在所述局部作用域中是否存在所述函数外部定义的变量;若存在,则对在所述局部作用域中被引用的所述函数外部定义的变量进行标记,以获取待检测对象。
一种可能的设计中,所述处理模块在执行根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值之前,还用于:
根据所述待检测对象,评估所述JavaScript代码文本在系统中运行时的平均响应时间、单个事务的平均响应时间和吞吐量;
根据所述待检测对象,评估所述JavaScript代码文本在系统中运行时的页面加载时间、页面流量和页面性能指数;
分析所述平均响应时间、所述单个事务的平均响应时间、所述吞吐量、所述页面加载时间、所述页面流量和所述页面性能指数,以获取判断结果,其中,所述判断结果包括所述平均响应时间与第二预设阈值的比较值、所述单个事务的平均响应时间与超过第三预设阈值的比较值、所述吞吐量与超过第四预设阈值的比较值、所述页面加载时间与超过第五预设阈值的比较值、所述页面流量与超过第六预设阈值的比较值和所述页面性能指数与超过第七预设阈值的比较值。
一种可能的设计中,所述处理模块具体用于:
根据对性能的影响程度,对多个所述优化方案进行评估,获取多个评估值;
比较多个所述评估值,获取所述评估值最大的优化方案;
判断所述评估值最大的优化方案的评估值是否小于预设值,若是,则以接收的用户输入的修改内容作为最终的最优优化方案;
将所述最终的最优优化方案添加在所述检测文件中,以更新所述检测文件;
根据所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象,生成显示文本,以及对所述目标检测对象、所述分析结果、对所述目标检测对象进行更新的优化方案和更新后的目标检测对象进行分析,生成可视化图表;
将所述可视化图表添加至所述显示文本中,输出添加所述可视化图表的显示文本。
一种可能的设计中,所述处理模块具体用于:
通过所述判断结果以分析所述待检测对象是否对所述全局性能产生影响,以获取第一分析数据;
以导致所述系统降低运行性能的信息类型对所述待检测对象进行分析,以获得第二分析数据,其中,所述信息类型包括运行速度、运行时间和运行内存;
以导致所述系统降低运行性能的作用域对所述待检测对象进行分析,获得第三分析数据;
以导致所述系统降低运行性能的代码的占比对所述待检测对象进行分析,获得第四分析数据;
以在所述JavaScript代码文本中的操作时间对所述待检测对象进行分析,获得第五分析数据;
以对所述JavaScript代码文本的操作关联度对所述待检测对象进行分析,获得第六分析数据;
根据预设比例,计算所述第一分析数据、所述第二分析数据、所述第三分析数据、所述第四分析数据、所述第五分析数据和所述第六分析数据的加权平均值,以获取分析值。一种可能的设计中,所述处理模块具体用于:
计算所述分析值减去第一预设阈值的差值,以所述差值不小于零的待检测对象作为目标检测对象;
分析所述目标检测对象的类型;
若所述目标检测对象的类型为在作用域中进行重复操作的所述DOM操作代码,则分析所述DOM操作代码对应的代码行号、所在的作用域以及被重复操作的次数,获得所述目标检测对象的操作轨迹;
若所述目标检测对象的类型为所述setTimeOut语句,则分析所述setTimeOut语句对应的代码行号、所有所述setTimeOut语句被应用的次数以及相同的所述setTimeOut语句被应用的次数,获得所述目标检测对象的操作轨迹;
若所述目标检测对象的类型为所述局部作用域中引用的函数外部定义的变量,则分析所述局部作用域中引用的函数外部定义的变量对应的代码行号、所述局部作用域中引用的函数外部定义的变量所在的局部作用域、所有所述局部作用域中引用的函数外部定义的变量被引用的次数和相同所述局部作用域中引用的函数外部定义的变量被引用的次数,获得所述目标检测对象的操作轨迹。
一种可能的设计中,所述处理模块具体用于:
获取所述目标检测对象的代码类型和所述目标检测对象的关键词;
获取所述目标检测对象在所述JavaScript代码文本中的操作功能;
根据所述代码类型、所述关键词和所述操作功能,获取所述目标检测对象对系统性能产生影响的情况信息;
所述分析所述目标检测对象导致系统降低性能的运行时段,包括:
获取多个JavaScript代码训练文本;
获取所述检测文件的第一特征信息,以及获取所述多个JavaScript代码训练文本的多个第二特征信息,根据所述第一特征信息和多个所述第二特征信息确定预测目标;
将所述检测文件和所述多个JavaScript代码训练文本输入到神经网络模型中;
根据所述第一特征信息和多个所述第二特征信息和所述预测目标,对所述神经网络模型进行训练,以获得预测模型;
将所述目标检测对象和所述情况信息输入到所述预测模型中,通过所述预测模型对所述目标检测对象和所述情况信息进行分析,以获取所述目标检测对象在所述情况信息中降低系统性能的变化情况和运行时段。
本申请又一方面提供了一种计算机设备,其包括至少一个连接的处理器、存储器、显示器和输入输出单元,其中,所述存储器用于存储程序代码,所述处理器用于调用所述存储器中的程序代码来执行上述第一方面所述的方法。
本申请又一方面提供了一种计算机存储介质,其包括指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。
相较于现有技术,本申请提供的方案中,通过获取检测文件,根据所述检测文件,调用检索脚本对JavaScript代码文本进行全局检索,以获取待检测对象;对所述待检测对象进行分析以获取分析值;判断所述分析值以获取所述目标检测对象的操作轨迹和所述目标检测对象的分析信息;根据所述操作轨迹和所述分析信息获取分析结果;根据所述分析结果遍历所述检测文件以获取多个优化方案;从多个所述优化方案中选择一个所述优化方案对所述目标检测对象进行更新。由于本申请是通过根据检测文件对JavaScript代码文本进行全局检索,以获取与检测文件存在相同和/或相似内容的代码,其中,检测文件包括多种存在影响性能的可能性的代码语句,因而,能够全面、快速和准确地获取所述JavaScript代码文本中的降低系统性能的代码语句,又由于检测文件包括所述代码语句对系统性能产生影响的操作环境和所述代码语句对应的可替代方案,能够对获取的降低系统性能的代码语句提供相应的修改方案,以减少开发人员对降低系统性能的代码语句的操作时间,所以,本申请能够提高开发效率。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个模块可以结合成或集成在另一个系统中,或一些特征可以忽略,或不执行。
本申请提供一种处理代码的方法、装置、设备及存储介质,可用于软件开发辅助系统,对开发代码的性能进行检测。
为解决上述技术问题,本申请主要提供以下技术方案:
通过获取检测文件,根据所述检测文件,调用检索脚本对JavaScript代码文本进行全局检索,以获取待检测对象;对所述待检测对象进行分析以获取分析值;判断所述分析值以获取所述目标检测对象的操作轨迹和所述目标检测对象的分析信息;根据所述操作轨迹和所述分析信息获取分析结果;根据所述分析结果遍历所述检测文件以获取多个优化方案;从多个所述优化方案中选择一个所述优化方案对所述目标检测对象进行更新。由于本申请是通过根据检测文件对JavaScript代码文本进行全局检索,以获取与检测文件存在相同和/或相似内容的代码,其中,检测文件包括多种存在影响性能的可能性的代码语句,因而,能够全面、快速和准确地获取所述JavaScript代码文本中的降低系统性能的代码语句,又由于检测文件包括所述代码语句对系统性能产生影响的操作环境和所述代码语句对应的可替代方案,能够对获取的降低系统性能的代码语句提供相应的修改方案,以减少开发人员对降低系统性能的代码语句的操作时间,所以,本申请能够提高开发效率。
请参照图1,以下对本申请提供一种处理代码的方法进行举例说明,该方法由计算机设备执行,计算机设备可为服务器或者终端,当图2所示的装置20为应用或者执行程序时,终端为安装图2所示的装置20的终端,本申请不对执行主体的类型作限制,所述方法包括:
101、获取检测文件,调用检索脚本对JavaScript代码文本进行全局检索,获取与检测文件存在相同和/或相似内容的代码,将与检测文件存在相同和/或相似内容的代码作为待检测对象。
其中,检测文件包括多种存在影响系统性能可能性的代码语句、代码语句对系统性能产生影响的操作环境和所述代码语句对应的可替代方案。
多种存在影响系统性能可能性的代码语句诸如:由于触发Resize会消耗效率,因而对于数组和字典的插入或删除的代码语句会降低系统性能;由于事件监听堆积过多会消耗效率,因而在事件机制不需要使用监听使用了事件监听的多个代码语句存在降低系统性能的可能。
代码语句对应的可替代方案包括以相同和/或相似的性质和效果直接替代降低系统性能代码的代码信息和在降低系统性能代码的基础上进行优化的代码信息。例如:使用哈希索引的代码代替数组遍历的代码。
通过包括多种存在影响系统性能可能性的代码语句、代码语句对系统性能产生影响的操作环境和所述代码语句对应的可替代方案的测文件,为获取JavaScript代码文本中降低系统性能的代码语句提供检索依据,从而提高搜索和获取的全面性、速度和准确行。
调用检索脚本对对JavaScript代码文本进行全局检索,识别到JavaScript代码文本中的代码与检测项的代码存在相同和/或相似内容的,则获取该代码,以该代码作为待检测对象。其中,检测文件还包括检测项、操作环境项和可替代项,其中,检测项由多种存在影响系统性能可能性的代码语句构成,所述代码语句对系统性能产生影响的操作环境,可替代项为以相同和/或相似的性质和效果直接替代降低系统性能代码的代码信息和在降低系统性能代码的基础上进行优化的代码信息,如表1所示。
表1
可选的,在本申请的一些实施例中,在获取待检测对象的情况下,为了进一步加强对待检测对象的获取,具体操作如下,上述的检测文件包括对DOM操作的代码、setTimeout语句和变量,上述的获取与检测文件存在相同和/或相似内容的代码,将与检测文件存在相同和/或相似内容的代码作为待检测对象,包括以下实现方式中的至少一个:
方式一:
判断JavaScript代码文本中是否存在包括关于文档对象模型DOM操作代码的关键字的代码;
若判断结果为是,则获取包含关键字的代码对应的JavaScript代码文本段内容;
通过静态分析工具对JavaScript代码文本段内容进行静态分析,获取作用域,其中,作用域包括局部作用域和全局作用域;
判断作用域中是否存在重复的DOM代码;
若判断结果为是,则标识DOM代码,以获得待检测对象。
例如:DOM常用操作包括查找节点、新建节点、添加节点、删除节点和修改节点。通过将查找节点、新建节点、添加节点、删除节点和修改节点的代码中的特征代码作为关于文档对象模型DOM操作代码的关键字,比如:Element、document和element。当判断到代码包括所述关键字时,将该代码作为待检测对象。
频繁地进行DOM的读写,会导致页面的回流;重复地对DOM进行搜索,会导致DOM查找成本的增大和导致系统运行压力的增大。通过静态分析工具对JavaScript代码文本进行静态分析,获得作用域。然后通过识别作用域中存在的重复的DOM代码来判断在作用域中是否对相同的DOM进行了重复的操作,以获得待检测对象。
方式二:
判断JavaScript代码文本中是否存在形式与预设的setTimeout语句的形式相同和/或相似的代码;
若判断结果为是,则以形式与预设的setTimeout语句的形式相同和/或相似的代码作为待检测对象。
例如:预设的setTimeout语句的形式为setTimeout(code,millisec)和var t=setTimeout("javascript语句",毫秒)。当判断到所述JavaScript代码文本中的每行代码的形式与setTimeout(code,millisec)相符或var t=setTimeout("javascript语句",毫秒)时,将对应的代码作为待检测对象。
方式三:
根据变量的命名规则,识别并获取JavaScript代码文本中的变量;
判断变量是否是在函数外部进行定义;
若判断结果为是,则获取函数外部定义的变量;
根据函数外部定义的变量,按照预设的抽象语法树抽象语法树的创建规则创建抽象语法树;
通过静态分析工具对JavaScript代码文本进行静态分析,获得局部作用域;
通过抽象语法树分析在局部作用域中是否存在函数外部定义的变量;
若存在,则对在局部作用域中被引用的函数外部定义的变量进行标记,以获取待检测对象。
通过操纵抽象语法树,精准地定位到声明语句、赋值语句和运算语句等,以实现对代码的分析、优化和变更等操作。
在局部作用域中被引用的函数外部定义的变量,为全局变量。使用过多的全局变量,导致耦合性被增强、代码的可维护性和可移植性差,以及不利于程序的稳定。通过抽象语法树获取在局部作用域中被引用的函数外部定义的变量,进而对全局变量进行分析,以有效地检测并获取到所有存在可能导致系统降低性能的代码。
可选的,在本申请的一些实施例中,上述获取检测文件,调用检索脚本对JavaScript代码文本进行全局检索,获取与检测文件存在相同和/或相似内容的代码,将与检测文件存在相同和/或相似内容的代码作为待检测对象的步骤之前,包括:
获取参考代码文本,分析参考代码文本中导致代码对系统性能造成影响的操作环境;
根据所述操作环境获取代码对应的可替代方案;
对所述参考代码文本、所述操作环境和所述可替代方案进行整理与分析,创建检测文件。
102、当检测到待检测对象对系统运行性能产生影响时,根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值。
其中,预设分析策略包括分析的参数和指标。例如:分析的参数可为待检测对象运行时所需的内存占比、运行时间和运行频率等;分析的指标可为待检测对象运行时所需的内存占比的阈值。
可检测待检测对象在JavaScript代码文本中的操作环境是否为检测文本中待检测对象对应的操作环境,若是,根据预设分析策略对待检测对象在JavaScript代码文本中的系统全局性能的影响程度,以获得对应的分析值。
通过根据预设分析策略分析对待检测对象进行进一步分析,以提高获取的降低系统性能的代码语句的准确性。
可选的,在本申请的一些实施例中,在检测待检测对象是否对系统运行性能产生影响情况下,为了进一步加强对待检测对象是否对系统运行性能产生影响情况的检测,具体操作如下,上述的根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值之前,本申请实施方式还包括:
根据待检测对象,评估JavaScript代码文本在系统中运行时的平均响应时间、单个事务的平均响应时间和吞吐量;
根据待检测对象,评估JavaScript代码文本在系统中运行时的页面加载时间、页面流量和页面性能指数;
分析平均响应时间、单个事务的平均响应时间、吞吐量、页面加载时间、页面流量和页面性能指数,以获取判断结果,其中,判断结果包括平均响应时间与第二预设阈值的比较值、单个事务的平均响应时间与超过第三预设阈值的比较值、吞吐量与超过第四预设阈值的比较值、页面加载时间与超过第五预设阈值的比较值、页面流量与超过第六预设阈值的比较值和页面性能指数与超过第七预设阈值的比较值。
待检测对象包括作用域中存在的重复的DOM代码、形式与预设的setTimeout语句的形式相同和/或相似的代码和局部作用域中引用的函数外部定义的变量中的至少一项。通过对上述待检测对象的平均响应时间、单个事务的平均响应时间、吞吐量、页面加载时间、页面流量和页面性能指数进行检测和判断,对待检测对象进行多指标检测,以提高对待检测对象对系统运行性能产生影响进行检测的准确性。
可选的,在本申请的一些实施例中,在根据预设分析策略分析对系统运行性能产生影响的待检测对象的情况下,为了进一步加强对系统运行性能产生影响的待检测对象的分析,具体操作如下,上述的系统运行性能包括全局性能和系统降低运行性能,上述的根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值,包括:
通过判断结果以分析所述待检测对象是否对全局性能产生影响,以获取第一分析数据;
以导致系统降低运行性能的信息类型对待检测对象进行分析,以获得第二分析数据,其中,信息类型包括运行速度、运行时间和运行内存;
以导致系统降低运行性能的作用域对待检测对象进行分析,获得第三分析数据;
以导致系统降低运行性能的代码的占比对待检测对象进行分析,获得第四分析数据;
以在JavaScript代码文本中的操作时间对待检测对象进行分析,获得第五分析数据;
以对JavaScript代码文本的操作关联度对待检测对象进行分析,获得第六分析数据;
根据预设比例,计算第一分析数据、第二分析数据、第三分析数据、第四分析数据、第五分析数据和第六分析数据的加权平均值,以获取分析值。
判断结果包括平均响应时间与第二预设阈值的比较值、单个事务的平均响应时间与超过第三预设阈值的比较值、吞吐量与超过第四预设阈值的比较值、页面加载时间与超过第五预设阈值的比较值、页面流量与超过第六预设阈值的比较值和页面性能指数与超过第七预设阈值的比较值。作用域、操作时间和占比和操作关联度是在分析代码是否对系统性能造成影响时相对重要的分析成分,而加权平均值能有效地摒除异常值,使所得结果的准确性提高。通过对待检测对象进行多层分析和求取多数据的加权平均值,以增强对系统运行性能产生影响的待检测对象的分析力度,以获得较准确和较全面的分析值。
103、当判断到分析值大于第一预设阈值时,将分析值大于第一预设阈值的待检测对象作为目标检测对象,获取目标检测对象的操作轨迹,以及获取目标检测对象的分析信息。
其中,待检测对象的数量包括多个,所获取的分析值也对应地包括多个。操作轨迹包括但不限于目标检测对象在JavaScript代码文本中所在的作用域、操作次数和作用的对象。对待检测对象进行综合分析后,获取分析值,将分析值与第一预设阈值进行比较,若是分析值比第一预设阈值大,则将分析值比第一预设阈值大的待检测对象作为目标检测对象,获取目标检测对象的操作轨迹,以及获取在对待检测对象进行分析以获得目标检测对象的过程所产生的分析信息。
通过对待检测对象进行再判断和筛选来获得目标检测对象,以进一步地提高获取的降低系统性能的代码语句的准确性。
可选的,在本申请的一些实施例中,在获取目标检测对象的操作轨迹的情况下,为了进一步提高对目标检测对象的操作轨迹的获取,可采取如下操作,上述的当判断到分析值大于第一预设阈值时,将分析值大于第一预设阈值的待检测对象作为目标检测对象,获取目标检测对象的操作轨迹,包括:
计算分析值减去第一预设阈值的差值,以差值不小于零的待检测对象作为目标检测对象;
分析目标检测对象的类型;
若目标检测对象的类型为在作用域中进行重复操作的DOM操作代码,则分析DOM操作代码对应的代码行号、所在的作用域以及被重复操作的次数,获得目标检测对象的操作轨迹;
若目标检测对象的类型为setTimeOut语句,则分析setTimeOut语句对应的代码行号、所有setTimeOut语句被应用的次数以及相同的setTimeOut语句被应用的次数,获得目标检测对象的操作轨迹;
若目标检测对象的类型为局部作用域中引用的函数外部定义的变量,则分析局部作用域中引用的函数外部定义的变量对应的代码行号、局部作用域中引用的函数外部定义的变量所在的局部作用域、所有局部作用域中引用的函数外部定义的变量被引用的次数和相同局部作用域中引用的函数外部定义的变量被引用的次数,获得目标检测对象的操作轨迹。
分析值包括上述的第一分析数据、第二分析数据、第三分析数据、第四分析数据、第五分析数据和第六分析数据的加权平均值。分析目标检测对象的类型,根据类型获取相应的操作轨迹。通过获取目标检测对象的操作轨迹,后续对于目标检测对象的性能分析和展示。
操作轨迹的获取内容如表2所示。
表2104、当检测到操作轨迹满足预设条件时,根据操作轨迹和分析信息,分析目标检测对象导致系统降低性能的运行特性,以及分析目标检测对象导致系统降低性能的运行时段,以获得分析结果。
其中,预设条件包括目标检测对象在JavaScript代码文本中导致系统降低性能的操作次数超过限定次数、操作轨迹中的操作位置在预设作用域中,以及目标检测对象在JavaScript代码文本中引用预设变量。
运行特性包括但不限于目标检测对象在JavaScript代码文本中所操作的情况,例如:目标检测对象为含catch的代码语句在循环中使用,位于在循环操作部分内。
对操作轨迹进行检测,判断操作轨迹的信息是否满足预设条件,若操作轨迹的信息满足预设条件,则说明对应的目标检测对象更趋向为降低系统性能的代码语句。根据操作轨迹和分析信息,获取运行特性,以及分析目标检测对象在JavaScript代码文本运行多长时间之后将会导致系统降低性能,从而获取分析结果,分析结果包括操作轨迹满足预设条件的情况、目标检测对象导致系统降低性能的运行特性和目标检测对象导致系统降低性能的运行时段。
通过对目标检测对象进行操作轨迹是否满足预设条件、导致系统降低性能的运行特性和导致系统降低性能的运行时段的分析,一方面,为了获取目标检测对象导致系统降低性能的各方向的情况信息,以便于开发人员能够快速而全面地对目标检测对象对系统性能造成影响的情况进行了解,另一方面,为了对目标检测对象是否为降低系统性能的代码语句,以提高对降低系统性能的代码语句检测的准确性。
一些实施方中,在获取分析结果之后,对分析结果进行评估,以获取直观的分析情况。
可选的,在本申请的一些实施例中,在分析目标检测对象导致系统降低性能的运行特性的情况下,为了进一步提高获取运行特性的准确性,可采取如下操作,上述的分析目标检测对象导致系统降低性能的运行特性,包括:
获取目标检测对象的代码类型和目标检测对象的关键词;
获取目标检测对象在JavaScript代码文本中的操作功能;
根据代码类型、关键词和操作功能,获取目标检测对象对系统性能产生影响的情况信息;
上述的分析目标检测对象导致系统降低性能的运行时段,包括:
获取多个JavaScript代码训练文本;
获取检测文件的第一特征信息,以及获取多个JavaScript代码训练文本的多个第二特征信息,根据第一特征信息和多个第二特征信息确定预测目标;
将检测文件和多个JavaScript代码训练文本输入到神经网络模型中;
根据第一特征信息和多个第二特征信息和预测目标,对神经网络模型进行训练,以获得预测模型;
将目标检测对象和情况信息输入到预测模型中,通过预测模型对目标检测对象和情况信息进行分析,以获取目标检测对象在情况信息中降低系统性能的变化情况和运行时段。
输入检测文件和多个JavaScript代码训练文本输入到神经网络模型,对神经网络模型进行训练以获得预测模型,通过预测模型获取目标检测对象的运行在情况信息中降低系统性能的变化情况和运行时段,以快速获取目标检测对象导致系统降低性能的运行特性和提高分析目标检测对象导致系统降低性能的运行特性的准确性。
105、根据分析结果,遍历检测文件,获取目标检测对象在检测文件中对应的可替代方案,根据可替代方案生成多个优化方案。
其中,可替代方案的数量包括多个,可替代方案包括但不限于多种可替代代码信息和多种优化方式,例如:在字符串变量和/或字符串常量中使用equals语句时将字符串常量写在equals语句的后面,则对应的可替代方案为将字符串常量写在equals语句的前面,以避免空指针异常,其中,可将String str="123";if("123".equals(str)){...}替换String str="123";if(str.equals("123")){...}。
通过根据可替代方案生成多个优化方案,以为开发人员提供目标检测对象对应的修改方案,进而减少开发人员获取目标检测对象后对目标检测对象进行修改或者优化的操作时间,从而提高开发效率。
可选的,在本申请的一些实施例中,在获取多个优化方案的情况下,为了进一步加强对多个优化方案的获取,可采取如下操作,上述的获取目标检测对象在检测文件中对应的可替代方案,根据可替代方案生成多个优化方案,包括:
获取目标检测对象对应的代码内容,用可替代方案中的替换代码替换目标检测对象对应的内容,获得多个方案,其中,所述可替代方案包括替换代码;
对替换代码内容的目标检测对象进行检测,其中,检测包括对代码语句的完整性、可行性和对JavaScript代码文本运行的影响的检测;
当检测到替换代码内容的目标检测对象不符合预设指标时,删除不符合预设指标对应的方案;
当检测到替换代码内容的目标检测对象符合预设指标时,在符合预设指标对应的方案标注与预设指标的检测信息;
根据删除的方案和被标注的方案,获得多个优化方案。
106、从多个优化方案中选择一个优化方案对目标检测对象进行更新,并输出目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象。
通过输出目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象,以便开发人员多角度地了解到降低系统性能的代码语句的多方向内容。
可选的,在本申请的一些实施例中,在对目标检测对象进行更新和输出的情况下,为了进一步加强对目标检测对象进行更新的优化方案的选择,和为了进一步提高输出内容的直观性和多方位性,可采取如下操作,上述的从多个优化方案中选择一个优化方案对目标检测对象进行更新,并输出目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象,包括:
根据对性能的影响程度,对多个优化方案进行评估,获取多个评估值;
比较多个评估值,获取评估值最大的优化方案;
判断评估值最大的优化方案的评估值是否小于预设值,若是,则以接收的用户输入的修改内容作为最终的最优优化方案;
将最终的最优优化方案添加在检测文件中,以更新检测文件;
根据目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象,生成显示文本,以及对目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象进行分析,生成可视化图表;
将可视化图表添加至显示文本中,输出添加可视化图表的显示文本。
通过以最优优化方案对目标检测对象进行更新,以提高更新的准确性和减少开发人员对目标检测对象修改的操作时间,从而提高开发效率。通过在显示文本中添加可视化图表的一屏多方式显示以迎合开发人员的不同查阅习惯和多角度而直观展示信息。
与现有机制相比,本申请实施例中,通过获取检测文件,根据检测文件,调用检索脚本对JavaScript代码文本进行全局检索,以获取待检测对象;对待检测对象进行分析以获取分析值;判断分析值以获取目标检测对象的操作轨迹和目标检测对象的分析信息;根据操作轨迹和分析信息获取分析结果;根据分析结果遍历检测文件以获取多个优化方案;从多个优化方案中选择一个优化方案对目标检测对象进行更新。由于本申请是通过根据检测文件对JavaScript代码文本进行全局检索,以获取与检测文件存在相同和/或相似内容的代码,其中,检测文件包括多种存在影响性能的可能性的代码语句,因而,能够全面、快速和准确地获取JavaScript代码文本中的降低系统性能的代码语句,又由于检测文件包括代码语句对系统性能产生影响的操作环境和代码语句对应的可替代方案,能够对获取的降低系统性能的代码语句提供相应的修改方案,以减少开发人员对降低系统性能的代码语句的操作时间,所以,本申请能够提高开发效率。
上述图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中所提及的技术特征也同样适用于本申请中的图2和图3所对应的实施例,后续类似之处不再赘述。
以上对本申请中一种处理代码的方法进行说明,以下对执行上述处理代码的方法的装置进行描述。
如图2所示的一种用于处理代码的装置20的结构示意图,其可应用于软件开发辅助系统,对开发代码的性能进行检测。本申请实施例中的装置20能够实现对应于上述图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中所执行的处理代码的方法的步骤。装置20实现的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。所述装置20可包括输入输出模块201、处理模块202和显示模块203,所述输入输出模块201、处理模块202和显示模块203的功能实现可参考图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中所执行的操作,此处不作赘述。所述处理模块202可用于控制所述输入输出模块201的收发操作,显示模块203可用于显示处理模块202的处理操作。
一些实施方式中,输入输出模块201可用于获取检测文件;
处理模块202可用于根据输入输出模块201获取的检测文件,调用检索脚本对JavaScript代码文本进行全局检索,获取与检测文件存在相同和/或相似内容的代码,将与检测文件存在相同和/或相似内容的代码作为待检测对象;当检测到待检测对象对系统运行性能产生影响时,根据预设分析策略分析对系统运行性能产生影响的待检测对象,以获取分析值;当判断到分析值大于第一预设阈值时,将分析值大于第一预设阈值的待检测对象作为目标检测对象,获取目标检测对象的操作轨迹,以及获取目标检测对象的分析信息;当检测到操作轨迹满足预设条件时,根据操作轨迹和分析信息,分析目标检测对象导致系统降低性能的运行特性,以及分析目标检测对象导致系统降低性能的运行时段,以获得分析结果,其中,预设条件包括目标检测对象在JavaScript代码文本中导致系统降低性能的操作次数超过限定次数、操作位置在预设作用域中和引用预设变量;根据分析结果,遍历检测文件,获取目标检测对象在检测文件中对应的可替代方案,根据可替代方案生成多个优化方案;从多个优化方案中选择一个优化方案对目标检测对象进行更新,将目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象输入至显示模块203,并通过显示模块203并输出目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象;
显示模块203,用于显示目标检测对象、分析结果、对目标检测对象进行更新的优化方案和更新后的目标检测对象。
其中,检测文件包括多种存在影响系统性能可能性的代码语句、代码语句对系统性能产生影响的操作环境和所述代码语句对应的可替代方案。
代码语句对应的可替代方案包括以相同和/或相似的性质和效果直接替代降低系统性能代码的代码信息和在降低系统性能代码的基础上进行优化的代码信息。
预设分析策略包括分析的参数和指标。
待检测对象的数量包括多个,所获取的分析值也对应地包括多个。操作轨迹包括但不限于目标检测对象在JavaScript代码文本中所在的作用域、操作次数和作用的对象。
预设条件包括目标检测对象在JavaScript代码文本中导致系统降低性能的操作次数超过限定次数、操作轨迹中的操作位置在预设作用域中,以及目标检测对象在JavaScript代码文本中引用预设变量;运行特性包括但不限于目标检测对象在JavaScript代码文本中所操作的情况。
可替代方案的数量包括多个,可替代方案包括但不限于多种可替代代码信息和多种优化方式。
本申请实施例中,所述处理模块202通过根据输入输出模块201获取的检测文件,调用检索脚本对JavaScript代码文本进行全局检索,以获取待检测对象;对待检测对象进行分析以获取分析值;判断分析值以获取目标检测对象的操作轨迹和目标检测对象的分析信息;根据操作轨迹和分析信息获取分析结果;根据分析结果遍历检测文件以获取多个优化方案;从多个优化方案中选择一个优化方案对目标检测对象进行更新。由于本申请是通过根据检测文件对JavaScript代码文本进行全局检索,以获取与检测文件存在相同和/或相似内容的代码,其中,检测文件包括多种存在影响性能的可能性的代码语句,因而,能够全面、快速和准确地获取JavaScript代码文本中的降低系统性能的代码语句,又由于检测文件包括代码语句对系统性能产生影响的操作环境和代码语句对应的可替代方案,能够对获取的降低系统性能的代码语句提供相应的修改方案,以减少开发人员对降低系统性能的代码语句的操作时间,所以,本申请能够提高开发效率。
可选的,在本申请的一些实施方式中,上述处理代码的方法的任一实施例或实施方式中所提及的技术特征也同样适用于本申请中的对执行上述处理代码的方法的装置20,后续类似之处不再赘述。
上面从模块化功能实体的角度分别介绍了本申请实施例中的装置20,以下从硬件角度介绍一种计算机装置,如图3所示,其包括:处理器、存储器、显示器、输入输出单元(也可以是收发器,图3中未标识出)以及存储在所述存储器中并可在所述处理器上运行的计算机程序。例如,该计算机程序可以为图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中处理代码的方法对应的程序。例如,当计算机装置实现如图2所示的装置20的功能时,所述处理器执行所述计算机程序时实现上述图2所对应的实施例中由装置20执行的处理代码的方法中的各步骤;或者,所述处理器执行所述计算机程序时实现上述图2所对应的实施例的装置20中各模块的功能。又例如,该计算机程序可以为图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式的方法对应的程序。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述输入输出单元也可以用接收器和发送器代替,可以为相同或者不同的物理实体。为相同的物理实体时,可以统称为输入输出单元。该输入输出单元可以为收发器。
所述存储器可以集成在所述处理器中,也可以与所述处理器分开设置。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本申请的保护之内。