本技术涉及代码性能优化,特别是涉及一种基于api替换的代码性能优化方法。
背景技术:
1、软件源代码优化是指在不改变代码功能和运行结果的前提下,对代码进行等价变换,生成更加高效的目标代码的过程。在目前的软件开发过程中,开发人员往往依赖于提供可重用功能的第三方库,而第三方库通过应用程序编程接口(application programminginterface,api)进行访问。api为软件开发人员提供了与软件开发工具包、库、操作系统、框架和云服务交互的手段。由于不同的api的算法原理和实现方式各不相同,导致api及其调用的代码在拥有相同功能的前提下具有不同的运行时间(如启动时间、用户交互响应时间等)和外部资源消耗(如内存、电量等)。由于开发者个人编程背景和经验及工作负载等因素的影响,开发者在完成编程任务时可能选择了非最优的api,严重影响软件的运行效率和用户体验。由于调用非最优api导致的软件性能缺陷已经造成了严重的软件开发问题。selakovic等人调研了16个常用javascript项目中的近100个性能缺陷,他们发现由于调用非最优api导致的性能缺陷占所有性能缺陷的52%,远远高于其他类型的性能缺陷,因此非最优api调用是导致软件性能缺陷的最主要原因。
2、api替换的主要过程包括三步:一、功能等价api性能对比关系构建,二、api性能可替换点检测,三、api替换建议生成。
3、在目前的api替换建议生成中,需开发者依赖个人开发经验人工对api替换执行过程做出决策,开发者可能由于对该新api的调用并不熟悉,从而发生api误用,容易产生软件缺陷,降低了工作效率。
技术实现思路
1、基于此,有必要针对上述技术问题,提供一种能够提高工作效率的基于api替换的代码性能优化方法。
2、一种基于api替换的代码性能优化方法,所述方法包括:
3、遍历待优化的代码的抽象语法树,获取所述待优化的代码中表示api用法所有的函数调用节点和函数抽取节点;
4、将所有的函数调用节点的名称和函数抽取节点的名称,与所述代码等价api性能对比关系数据集中的api进行匹配,确定所述待优化的代码中的候选可替换api;
5、根据所述候选可替换api的参数的数量和ast节点类型,确定所述待优化的代码中可替换api;
6、根据所述可替换api的功能,从预先构建的代码等价api性能对比关系数据集中筛选出与所述可替换api的功能等价的api,根据所述api在推荐列表中的适应度分数生成api替换推荐列表进行显示;
7、根据用户从所述api替换推荐列表中选择的api名称,从预先构建的api代码模版集中获取对应的api代码模版进行显示,以使用户根据所述api代码模版对所述待优化的代码进行优化。
8、在其中一个实施例中,所述代码等价api性能对比关系数据集的构建方式为:
9、采用beautifulsoup解析api参考文档的html页面,提取所有的api名称、api使用方法及api方法描述;
10、根据所述所有的api方法描述进行处理,获得功能特征列表;
11、将所有的api名称、api方法描述和所述功能特征列表输入bert分类模型,输出api名称和功能特征对,以构建功能等价api数据集;
12、从目标api性能问答网站中爬取api性能对比相关的连续分析语句;
13、从目标代码托管网站中爬取code change信息;
14、对所述连续分析语句和code change信息进行信息提取,获得性能对比信息和代码片段;
15、对所述代码片段进行处理,获得完整的api名称;
16、根据所述完整的api名称,将所述性能对比信息添加到功能等价api数据集中,形成初始的代码等价api性能对比关系数据集;
17、对所述所有的api使用方法进行处理,获得性能信息;
18、将所述性能信息添加到所述初始的代码等价api性能对比关系数据集中,形成代码等价api性能对比关系数据集。
19、在其中一个实施例中,所述根据所述所有的api方法描述进行处理,获得功能特征列表,包括:
20、将所有的api方法描述输入stanford nlp工具包,获得树状结构的解析树;
21、提取所述解析树中的所有动词短语并形成初始候选功能特征;
22、将所述初始候选功能特征输入过滤器进行过滤,获得过滤后的候选功能特征;
23、将所述过滤后的候选功能特征中对象和动作词为同义词的候选功能特征合并成同一功能特征,获得功能特征短语;
24、将所述功能特征短语用树的结构表示,形成短语树;
25、采用gspan算法对所述短语树进行频繁子图挖掘,获得功能特征列表。
26、在其中一个实施例中,所述对所述所有的api使用方法进行处理,获得性能信息,包括:
27、对所述所有的api使用方法进行变量参数进行属性注释,生成参数类型注释;
28、选择对应的随机实例化代码对所述参数类型注释进行参数实例化随机测试,获得性能信息。
29、在其中一个实施例中,所述对所述代码片段进行处理,获得完整的api名称,包括:
30、对所述代码片段使用python ast模块进行解析,获得所述代码片段的抽象语法树;
31、对所述代码片段的抽象语法树执行后序遍历,获得api的简单名称;
32、将所述所有的api名称和所述api的简单名称采用正则表达式匹配,获得完整的api名称。
33、在其中一个实施例中,所述api代码模版集的构建方式为:
34、收集软件项目的代码源文件;
35、对所述代码源文件进行筛选,获得python源代码的文件;
36、采用python ast模块对所述python源代码的文件进行解析,获取所述python源代码的文件中包含的每个方法体的抽象语法树;
37、从每个方法体的所述抽象语法树中提取出与所述代码等价api性能对比关系数据集中的api相关的语法树,获得目标api的语法树;
38、采用程序切片技术从所述目标api的语法树中提取出所述目标api的使用示例;
39、将所述目标api的使用示例抽象为数据流图;
40、采用gspan算法对数据流图进行挖掘,得到api代码模版集合。
41、在其中一个实施例中,所述采用gspan算法对数据流图进行挖掘,得到api代码模版集合,包括:
42、采用gspan算法对数据流图进行挖掘,获得频繁子图;
43、对所述频繁子图使用ast.unparse方法进行反向解析,获得完整的代码模板,以得到api代码模版集合。
44、在其中一个实施例中,所述方法还包括:
45、记录用户从所述api替换推荐列表中选择的api作为反馈信息存储至反馈信息存储库中;
46、根据反馈信息存储库中的反馈信息,基于适应度分数的更新公式,对所述代码等价api性能对比关系数据集中的各api在推荐列表中的适应度分数进行更新。
47、在其中一个实施例中,所述适应度分数的更新公式为:
48、
49、其中,score(i)表示第i个api更新后的适应度分数;fitscore(i)表示第i个api在当前推荐列表中的适应度分数;fitscoremin是当前推荐列表中适应度分数最小的值;fitscoremax是当前推荐列表中适应度分数最大的值;μ为权重,是一个动态值,取决于第i个api的位置,pos(i)表示第i个api的位置;feedback(i)表示第i个api的反馈信息分数。
50、上述api替换的代码性能优化方法,通过遍历待优化的代码的抽象语法树,获取所述待优化的代码中表示api用法所有的函数调用节点和函数抽取节点,进而将所有的函数调用节点的名称和函数抽取节点的名称,与所述代码等价api性能对比关系数据集中的api进行匹配,确定所述待优化的代码中的候选可替换api,再根据所述候选可替换api的参数的数量和ast节点类型,确定所述待优化的代码中可替换api,从而根据所述可替换api的功能,从预先构建的代码等价api性能对比关系数据集中筛选出与所述可替换api的功能等价的api,根据所述api在推荐列表中的适应度分数生成api替换推荐列表进行显示,再根据用户从所述api替换推荐列表中选择的api名称,从预先构建的api代码模版集中获取对应的api代码模版进行显示,以使用户根据所述api代码模版对所述待优化的代码进行优化。由此,帮助开发人员利用替换建议及提供的代码模板,方便快捷地实现代码优化。
江西网站关键词排名优化推荐关键词排名优化这个易速达无锡行业关键词上线排名优化关键词排名好选云速捷权威关键词排名使用金手指百度关键词排名去搜程济源搜狗关键词排名优化费用优化关键词排名进巧推网移动端关键词怎么排名首页关键词无排名怎么让关键词排名提升单仁资讯 关键词排名操作关键词排名参加云速捷十年广东网络关键词排名优化靠谱邹平关键词优化排名多少钱太仓关键词排名价格如何把关键词排名做到首页搜索关键词排名甄选火29星择关键词排名推荐i火11星美评国际站查看自己商品关键词排名菜关键词排名做焦作新站seo关键词排名代理海城关键词优化排名关键词不能做竞排名怎么办淘宝的关键词排名怎么搜索茂名关键词排名外包邯郸网站关键词排名要素南充关键词排名哪家好重庆免费营销型建站关键词排名关键词排名林俊杰关键词排名优化找26火星如何把关键词排名到首页锦州关键词排名供应商URL追踪关键词竞价排名乌鲁木齐市关键词优化排名兰州关键词排名优化服务惠州百度关键词排名关键词快速优化排名外包洛阳搜狗关键词自然排名代理拼多多查看店铺关键词排名淘宝怎么看商品关键词排名新乡排名快关键词推广技术快车排名会影响关键词排名吗怎么样提高360关键词排名淘宝越刷关键词排名越靠后商丘关键词快速排名河源关键词排名优化厦门同安关键词排名北京排名关键词优化关键词排名服务首选金手指搜索关键词突然没了排名关键词排名哪家效果好拼多多关键词出价排名在哪看确认好关键词怎么排名辽宁推广关键词排名优化教程关键词搜索排名 花总霸屏全拼音关键词优化排名有用吗山东关键词排名平台关键词排名优化び花总实在关键词排名软件梅云速捷假如阿里的关键词排名在哪里看怎么学关键词排名优化策略关键词排名优化霸屏关键词排名有用吗关键词优化辶找金手指排名罒如何区分关键词和网站排名搜狗关键词排名怎么看关键词排名李李守洪营销大师扬州品牌关键词排名怎么做应城市seo关键词排名如何优质的百度关键词排名关键词排名提升牜金手指排名贵阳关键词排名优化如何提升移动端关键词排名潮州关键词排名入门开封seo关键词排名厂家阿里巴巴差关键词排名医院关键词排名软件怎样做关键词排名 sit鞍山关键词排名优化关键词排名系统赞成云速捷四关键词排名优化分析批量检测关键词竞价排名淘宝怎么查看进店关键词排名焦作百度seo关键词排名厂家江苏关键词优化排名关键词排名比较靠后提高关键词排名倏云速捷绝伦郑州网站关键词排名技术代理淘宝更多里面关键词搜索排名惠州百度关键词排名优化驻马店百度关键词排名技术外包淘宝关键词排名查询刷亚马逊爆款的关键词排名关键词快速排名统统易速达提高网站关键词排名吗排名关键词价格关键词排名在第二页怎么做洛阳整站关键词自然排名代理金华百度关键词排名中国制造关键词排名关键词排名榜关键词排名太金苹果效果好丶安徽网店关键词排名如可看自己宝贝关键词排名百度竞价如何查询关键词排名北京360关键词排名优化宁波关键词搜索排名关键词快速排名优化软件郑州企业关键词自然排名公司河南网站关键词排名推广怎么样湖北关键词点击排名工具武汉关键词优化排名哪家好南阳关键词seo排名优化好的房产关键词排名情况下拉关键词排名首选4火星牛河北域名关键词排名查询静海区查看关键词排名百度关键词排名什么样的好贵州关键词排名优化免费关键词排名不提高怎么办福建seo的关键词排名价格表sem怎么查关键词排名网站关键词排名完善火2星郴州关键词排名哪里有沧县关键词排名优化网站关键词排名如何提升的方法网站刷搜狗关键词排名灰色行业主关键词排名云南昆明关键词排名推广哪个好关键词排名代理服务关键词排名寻求易速达北京市seo关键词排名优化宝鸡百度seo关键词排名抖音关键词排名算法关键词排名提升疗火16星手机端关键词排名上首软文关键词怎么优化排名神马手机关键词搜索排名优化镇江市排名关键词优化厂家关键词排名点击逐福六枝特区网站关键词排名公司晋中网站关键词排名株洲关键词排名外包北仑关键词排名快速优化产品关键词排名优化技巧专注关键词排名价格江苏省关键词seo排名优化鹤壁平台关键词排名优化软件朝阳关键词排名系统崇州百度关键词排名平台关键词排名优化关键词优化排名 可宙斯巨优亚马逊关键词免费排名闵行区关键词持续稳定排名抖音seo关键词优化排名通化关键词排名互联网关键词排名选择测款的关键词要抢排名不搜索关键词排名就选g火21星昌邑网页关键词排名浙江关键词快速排名呼伦贝尔关键词排名钦州网站关键词快速排名德兴网站关键词排名关键词排名突然收不到网站陕西seo关键词自然排名系统在线刷关键词排名有哪些技巧兰州网站关键词排名提升优势英山县关键词seo排名优化下拉关键词排名选择16火星安徽关键词排名怎么做晋城关键词排名费用乳山关键词排名优化赤峰seo关键词优化排名许昌官网长尾关键词排名公司淘宝女装关键词每日排名澳门关键词快速排名公司有实力的关键词排名搜索关键词排名so云速捷丷洛阳关键词万词霸屏排名百度推广关键词排名固定大数据关键词排名价值太原专注关键词排名价格表关键词排名优化诚意火星9湘乡关键词优化排名宏碁关键词排名推广淘宝关键词怎么不降排名公司产品推广关键词排名忻州关键词排名优化肇庆外贸网站关键词优化排名排版不合理影响关键词排名关键词排名查询就连火1星惠多多关键词排名查询关键词指定页面排名新站没有关键词排名竞价排名 关键词关键词排名优化包年多少钱关键词出价提升排名搜索pc关键词排名工具