#青训营笔记创作活动#
1月21日 Day8
Esbuild----基于Go开发的一款打包工具
1.优势
相比传统的打包工具,主打性能优势,在构建速度上可以快 10~100 倍。采用 Go 语言开发,相比于 单线程 + JIT 性质的解释型语言 ,一方面可以充分利用多线程打包,并且线程之间共享内容,另一方面直接编译成机器码,大节省了程序运行时间。内部打包算法充分利用多核 CPU 优势。Esbuild 内部算法设计是经过精心设计的,尽可能充分利用所有的 CPU 内核。所有的步骤尽可能并行。从零开始造轮子,没有任何第三方库的黑盒逻辑,保证极致的代码性能。Esbuild 中从头到尾尽可能地复用一份 AST 节点数据,从而大大提高了内存的利用效率,提升编译性能。
2.与SWC对比
Esbuild 与 SWC 在性能上是在一个量级的,但不排除其他例子里面 SWC 比 Esbuild 略快的场景。Esbuild 本身的限制包括没有TS类型检查,不能操作AST,不支持装饰器语法,产物 target 无法降级到 ES5 及以下,这就意味着需要 ES5 产物的场景只用 Esbuild 无法胜任,相比之下,SWC 的兼容性更好。
3.应用场景
Esbuild 和 SWC 作为 transformer 性能是差不多的,但 Esbuild 兼容性远远不及 SWC。因此,SWC 作为 Transformer 更胜一筹。但作为 Bundler 以及 Minimizer,SWC 就显得捉襟见肘了,首先官方的 swcpack 目前基本处于不可用状态,Minimizer 方面也非常不成熟,很容易碰到兼容性问题。而 Esbuild 作为 Bundler 已经被 Vite 作为开发阶段的依赖预打包工具。
但总体来说,目前 Esbuild 对于真实的 Web 场景还有很多能力不支持,还有一些硬伤,包括语法不支持降级到ES5,拆包不灵活、不支持 HMR,对于真正能作为 Webpack 一样的构建工具来讲还有很长的路要走。
1月21日 Day8
Esbuild----基于Go开发的一款打包工具
1.优势
相比传统的打包工具,主打性能优势,在构建速度上可以快 10~100 倍。采用 Go 语言开发,相比于 单线程 + JIT 性质的解释型语言 ,一方面可以充分利用多线程打包,并且线程之间共享内容,另一方面直接编译成机器码,大节省了程序运行时间。内部打包算法充分利用多核 CPU 优势。Esbuild 内部算法设计是经过精心设计的,尽可能充分利用所有的 CPU 内核。所有的步骤尽可能并行。从零开始造轮子,没有任何第三方库的黑盒逻辑,保证极致的代码性能。Esbuild 中从头到尾尽可能地复用一份 AST 节点数据,从而大大提高了内存的利用效率,提升编译性能。
2.与SWC对比
Esbuild 与 SWC 在性能上是在一个量级的,但不排除其他例子里面 SWC 比 Esbuild 略快的场景。Esbuild 本身的限制包括没有TS类型检查,不能操作AST,不支持装饰器语法,产物 target 无法降级到 ES5 及以下,这就意味着需要 ES5 产物的场景只用 Esbuild 无法胜任,相比之下,SWC 的兼容性更好。
3.应用场景
Esbuild 和 SWC 作为 transformer 性能是差不多的,但 Esbuild 兼容性远远不及 SWC。因此,SWC 作为 Transformer 更胜一筹。但作为 Bundler 以及 Minimizer,SWC 就显得捉襟见肘了,首先官方的 swcpack 目前基本处于不可用状态,Minimizer 方面也非常不成熟,很容易碰到兼容性问题。而 Esbuild 作为 Bundler 已经被 Vite 作为开发阶段的依赖预打包工具。
但总体来说,目前 Esbuild 对于真实的 Web 场景还有很多能力不支持,还有一些硬伤,包括语法不支持降级到ES5,拆包不灵活、不支持 HMR,对于真正能作为 Webpack 一样的构建工具来讲还有很长的路要走。
展开
评论
点赞