treeShake

segmentfault.com/a/119000001… juejin.im/post/5a4dca…


而在js运行时会进行三件事:1语法分析  2.预编译  3.解释执行
语法分析会在代码执行前对代码进行通篇检查,以排除一些低级错误
预编译发生在代码执行的前一刻
解释执行顾名思义就是执行代码


js编译器:https://www.zhihu.com/question/25254230
首先对源码进行分析(类似编译器前端做的工作:词法,语法分析等),得到AST后,
进一步分析(数据流,控制流分析,类型系统等),获取到一些有用的信息(类似智能
提示的那种,比如类型变换情况,转换是否安全,空指针检测,是否有潜在的bug等),
帮助我们写出安全的代码.

1.treeShake的作用是什么:
2.treeShake原理是什么:
    ES6模块依赖关系是确定的,和运行时的状态无关,可以进行可靠的静态分析,这就是
    tree-shaking的基础。所谓静态分析就是不执行代码,从字面量上对代码进行分析,
    ES6之前的模块化,比如我们可以动态require一个模块,只有执行后才知道引用的什么模块,这个就不能通过静态分析去做优化。
--------------------------------------------------------------------------------
    用代码消除在广泛存在于传统的编程语言编译器中,编译器可以判断出某些代码根本不影响输出,然后消除这些代码,这个称之为DCE
--------------------------------------------------------------------------------
    ES6的模块引入是静态分析的,故而可以在编译时正确判断到底加载了什么代码。
--------------------------------------------------------------------------------
    分析程序流,判断哪些变量未被使用、引用,进而删除此代码。
--------------------------------------------------------------------------------
rollup只处理函数和顶层的import/export变量,不能把没用到的类的方法消除掉javascript动态语言的特性
使得静态分析比较困难图7下部分的代码就是副作用的一个例子,如果静态分析的时候删除里run或者jump,程序运行时就可能报错,那就本末倒置了
,我们的目的是优化,肯定不能影响执行
3.treeShake是函数级别还是文件级别:
复制代码

转载于:https://juejin.im/post/5d2459e751882556d16828ee

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值