|
Tree-shaking 是无用代码移除(DCE, dead code elimination)的一个方法,但和传统的方法不太一样。Tree-shaking 找到需要的代码,灌入最终的结果;传统 DCE 找到执行不到的代码,从 AST 里清除。(在我看来传统的这种方式更应该被称为 tree-shaking,即摇一下把 AST 中的 dead branch 给抖下来。)作者还用了一个和 DCE 相对应的说法:Live code inclusion。这种方式在目前流行的模块式开发、最后通过 entry 打包出 bundle 的模式下,才有实际意义。有人总结了一个定义:DCE 消灭不可能执行的代码,tree-shaking 消灭没有用到的代码。
我个人的理解是,在你需要处理的代码对外不产生副作用时, tree-shaking 效果还不错,rollup.js 生成的 bundle 会更小一些。看一下它的在线 demo 就知道,模块合并以后都在同一个作用域下,直接用变量名就可以访问各个模块的接口;而不是 webpack 这样每个模块外还要包一层函数定义,再通过合并进去的 define/require 相互调用。Tree-shaking 不是代码压缩,所以还是得配合压缩工具来用。 |
|