esbuild为什么快

400 阅读1分钟

传统的方式都是使用 Terser 这种JS开发的压缩器来实现,在WebPack 或者 Rollup 中作为一个 Plugin 来完成代码打包后的压缩混淆的工作。但Terser其实很慢,主要有2个原因。

  1. 压缩这项工作涉及大量的AST操作,并且在传统的构建流程中,AST在各个工具之间无法共享,比如 Terser就无法与Babel共享一个AST,造成了很多重复解析的过程。
  2. JS本身属于解释性 + JIT(即时编译)的语言,对于压缩这种CPU密集型的工作,其性能远远比不上Golang这种原生语言。

因此,Esbuild这种从头到尾共享AST以及原生语言编写的Minifier在性能上能够甩开传统工具的好几十倍,

esbuild之所以在代码压缩和混淆方面比传统的JS开发压缩器更快,主要是因为其高效的Go语言实现、优化的算法和技术、无依赖和自包含的特性、专为压缩和混淆设计的特点以及支持并行处理的能力。这些因素共同作用使得esbuild成为了一个在构建速度和性能上具有显著优势的工具。