当前位置: 首页 > 网络应用技术

摇树说话

时间:2023-03-08 13:40:50 网络应用技术

  摇树是基于ES模块规范的消除代码消除技术。它将在操作过程中介绍静态分析模块之间的介绍和导出,以确定其他模块中尚未使用ESM模块中的哪个导出值,并且将由其他模块使用。它将被使用。删除以优化包装产品(减少包装量)。

  JavaScript没有模块系统。它不能分为彼此依赖的小文件,然后以简单的方式组装。后者用于浏览器。

  ES6模块的设计思想尽可能静态,因此可以在编译过程中确定模块的依赖关系关系,并输入变量。CommonJS和AMD模块只能在运行时确定这些内容。

  简单比较如下:

  静态性的意义:模块的依赖性是确定的,它与运行时的状态无关。它可以是可靠的静态分析。基于此前提是实现树木的可能性。

  以Webpack中的震惊处理的处理为例,实现将分为以下阶段,并且在不同阶段进行不同的过程:

  收集每个模块的导出变量,并将其记录在模块依赖项中的模块图中;

  收集模块导出信息后,根据条目,WebPack标记每个模块的导出列表,每个模块的导出值由其他模块使用,而这些模块未使用。

  在先前的集合和标记步骤之后,WebPack清楚地记录了模块Graph系统中每个模块导出的值,以及是否已经引入和使用了每个导出值。下一步,WebPack将基于导出值生成不同的代码:

  模块导出列表中使用的值将在对象中定义;

  在先前的步骤之后,在对象中未定义模块导出列表中未使用的值,并且应标记标记以形成无法执行的死代码效应。

  之后,无效代码的这一部分将被诸如Terser,uglifyjs之类的DCE工具“震动”,该工具将形成完整的树木摇动操作;

  其中,uglifyjs“ shake”等DCE工具的无效代码包括:

  现在提到的树木摇动仅在ES模块标准上:静态编译以确定输入和输出值;

  树木摇动的主要过程可以简化为:收集依赖项 - >标记 - >透明的死码。

  Webpack原理系列九:震惊的实施原理

  摇树:从原理到实施

  Ecmascript 6入门:模块