[发明专利]一种基于前端字节码技术的JavaScript代码优化方法有效
申请号: | 201910554731.3 | 申请日: | 2019-06-25 |
公开(公告)号: | CN110399133B | 公开(公告)日: | 2020-10-27 |
发明(设计)人: | 王薇;汤战勇;王帅;薛超;房鼎益;陈晓江 | 申请(专利权)人: | 西北大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F8/40 |
代理公司: | 西安恒泰知识产权代理事务所 61216 | 代理人: | 张明 |
地址: | 710069 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 前端 字节 技术 javascript 代码 优化 方法 | ||
1.一种基于前端字节码技术的JavaScript代码优化方法,其特征在于,包括以下步骤:
步骤1,执行待优化的JavaScript代码,执行过程中,获取待执行路径中的数据类型信息和数据值,以及在所有执行路径中数据类型都稳定的代码段;所述的数据类型稳定的代码段是指在所有执行路径中变量数据类型都稳定的代码段;
步骤2,遍历所述数据类型稳定的代码段的抽象语法树,当存在函数、赋值、计算逻辑、数组和控制逻辑这些节点类型时,则该代码段为可优化代码段;获取可优化代码段对前后代码中依赖的变量,得到输入变量集合和输出变量集合;
步骤3,将可优化代码段转换成C代码,继而编译生成WebAssembly代码;
步骤4,以获取的待执行路径中的数据值作为参数,调用可优化代码段及与其对应的WebAssembly代码,并进行性能比较和功能比较,如果性能提升并且功能一致则添加代码调用模块和数据传输模块替换可优化代码段;
所述的代码调用模块和数据传输模块,具体为:
以所述的输入变量集合和输出变量集合为参数调用WebAssembly官方文档中提供的数据读写函数作为数据传递模块,并且以WebAssembly官方文档提供的函数调用方法调用WebAssembly代码作为代码调用模块。
2.如权利要求1所述的基于前端字节码技术的JavaScript代码优化方法,其特征在于,还包括:
步骤5,对于待优化的JavaScript代码,以可优化代码段和不可优化代码段为界,将待优化的JavaScript代码划分为多个代码块;以代码块为基础利用污点分析方法对代码块间的数据依赖关系进行分析,然后以不可模拟功能和不可模拟语法两种规则生成代码段合并策略。
3.如权利要求1所述的基于前端字节码技术的JavaScript代码优化方法,其特征在于,所述的获取可优化代码段对前后代码中依赖的变量,得到输入变量集合和输出变量集合,包括:
遍历抽象语法树获取赋值语句、函数调用语句和变量声明语句,将赋值语句的右值和函数调用语句参数作为当前可优化代码段的输入变量集合,将赋值语句的左值作为当前可优化代码段的输出变量集合。
4.如权利要求1所述的基于前端字节码技术的JavaScript代码优化方法,其特征在于,所述的将可优化代码段转换成C代码,继而编译生成WebAssembly代码,包括:
根据获取的可优化代码段,通过在代码段的抽象语法树Node节点中添加数据类型属性,修改作用域规则并且修改语法规则生成同结构的C代码,然后通过编译生成WebAssembly代码,如果编译失败则放弃修改该代码段,保证程序运行的正确性。
5.如权利要求4所述的基于前端字节码技术的JavaScript代码优化方法,其特征在于,所述的修改作用域规则并且修改语法规则生成同结构的C代码,包括:
以If语句,While语句,For语句这些块结构为界限,以块结构外无法访问块结构内定义变量的规则对变量声明位置进行修改,如果块结构内声明变量而块结构外使用变量则将变量声明转移到块结构外部;并且采用通过调整变量声明的位置保证先声明再调用的作用域规则;
以C代码的语法规则修改抽象语法树中toSource()代码输出函数,在将单词构建成语句的过程中添加变量的类型信息和函数返回值信息。
6.如权利要求2所述的基于前端字节码技术的JavaScript代码优化方法,其特征在于,所述的以代码块为基础利用污点分析方法对代码块间的数据依赖关系进行分析,然后以不可模拟功能和不可模拟语法两种规则生成代码段合并策略,包括:
将不可优化代码段进行分类,一类为不可模拟功能,另一类为不可模拟语法;针对存在不可模拟功能的代码段,通过数据依赖分析查看代码段中的数据流传递过程,如果不存在数据依赖则该代码段通过调整代码顺序进行合并;
对于不可模拟语法代码段,以两种情况进行分析:
针对不存在不可模拟功能代码段,将代码段整体进行合并则可以减少各个代码段间的数据传递;针对存在不可模拟代码,如果一个节点的所有父节点都为性能提升的代码段,和该代码段进行合并产生性能提升的代码段。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西北大学,未经西北大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910554731.3/1.html,转载请声明来源钻瓜专利网。