Open su37josephxia opened 2 years ago
可以
esbuild是使用 go 编写的打包工具,多线程能力比node强,和Webpack、Rollup 等常用打包工具对比,在速度方面拥有绝对优势。esbuild-loader 可以用于在 Webpack 中使用 esbuild 去编译 JS、TS;压缩脚本、样式等。
SWC 是一个类似于 Babel 的代码转义器,它的主要功能就是把 ES2015 或更高版本的 JS 代码转换为老浏览器能够使用的 ES5 或更低版本的 JS 代码。SWC 是使用 Rust 语言编写的,相比 Babel 来说,速度要更快。按照官网的说法 SWC 的速度要比 Babel 快 20 倍
可以
esbuild是使用 go 编写的打包工具,多线程能力比node强,和Webpack、Rollup 等常用打包工具对比,在速度方面拥有绝对优势。esbuild-loader 可以用于在 Webpack 中使用 esbuild 去编译 JS、TS;压缩脚本、样式等。
SWC 是一个类似于 Babel 的代码转义器,它的主要功能就是把 ES2015 或更高版本的 JS 代码转换为老浏览器能够使用的 ES5 或更低版本的 JS 代码。SWC 是使用 Rust 语言编写的,相比 Babel 来说,速度要更快。按照官网的说法 SWC 的速度要比 Babel 快 20 倍
可以
webpack其中最大的一块耗时就在 Babel 这块,Babel 编译慢的原因完全不是自身架构问题,相反 Babel 已经相当健壮和成熟了,真正还是语言的劣势,本身用 js 写的 babel 无法使用多核 CPU 优化编译任务处理,同时相较 swc、esbuild 编译成二进制在 node 执行而言,也有一定的劣势
swc
esbuild
可以
swc是一个基于 Rust 语言的可扩展平台,目前已经被 Next.js、Parcel、Deno 等使用。它支持编译和打包。 esbuild 是一个基于 Go 语言的构建工具。 各自特性 swc 的特性: 可用于编译 可用于打包(swcpack) 支持 Minification 利用 WebAssembly 进行转换 可以用于 webpack 中(swc-loader) @swc/jest 提高 Jest 性能 支持自定义插件 esbuild 的特性:
极快的速度,无需缓存 支持 ES6 和 CommonJS 模块 支持对 ES6 模块进行 tree shaking swc : 将源码转变成 AST 树很耗时,而 swc 是基于 Rust 语音的,它直接将源码根据不同平台编译成对应的二进制文件,直接跳过了转AST 步骤,速度大大提升。
esbuild :
它是用 Go 语言编写的,并可以编译为本地代码; 大量使用并行操作; 未引用第三方依赖; 内存的高效利用,尽量复用 AST 数据。
swc与 esbuild都可以提升webpacke的构建速度。其中swc是由 rust 写的,而esbuild是由go实现的。
可以。文件内容的读写 rust 和 go 都能做到。
为什么用 swc 和 esbuild 更快,其实是因为 JavaScript 慢。因为 JavaScript 自身的原因,没有多线程,没有办法利用系统做更多优化。
webpack 构建中最花时间的是 babel。转换代码遍历 ast。还有很多 babel 的插件。所以可以使用 swc 和 esbuild 代替 babel 以及压缩代码,提升速度。(swc 直言目标是取代 babel。wwwww)
方法:
毕竟是用其他语言接入 js 会有不够好的地方,但是也在飞快迭代,未来可期。
用 js 写的 babel 无法使用多核 CPU 优化编译任务处理,相较 swc、esbuild 编译成二进制在 node 执行而言,具有一定的劣势。 这是语言方面的劣势
目前可以使用 swc-loader、esbuild-loader 在 webpack 中配置 swc 和 esbuild 链路
可以 swc是一个类似babel的JavaScript/TypeScript编译器,但是由于swc使用Rust实现,所以具备比babel出色的性能。 esbuild 是使用 go 编写的打包工具,esbuild-loader 可以用于在 Webpack 中使用 esbuild 去编译 JS、TS ,能大大提升编译效率 用swc-loader代替 babel-loader 用esbuild-loader ESBuildMinifyPlugin 去压缩代码
可以 swc也可以和babel实现同样的功能,将高版本代码转为为Es5代码,swc是基于rust语言的,在编译的时候直接省去了耗时较多的AST的转化过程,将源码转化为二进制文件,效率显著提升 esbuild是基于go语言实现的,并可以编译为本地代码,大量使用并行操作,未引用第三方依赖,内存的高效利用,尽量复用 AST 数据
可以, 在webpack
配置中可以使用swc-loader/esbuild-loader
加快构建速度,但是目前阶段swc
和esbuild
还有许多坑未走完,生产环境慎用,除非有一定rust/go
语言基础或大量时间。
esbuild
是用go
编写的构建工具,基于go
语言的优势相比较单线程 + JIT 性质的解释型语言js而言速度非常块,象vite
压缩代码也使用了esbuild
swc
则是使用rust
开发的代替babel
的转译器, rust
拥有无GC
,无复杂内存管理
等特点,性能非常高效。官网介绍说比babel快十倍以上swc是一个用 Rust 写的高性能 TypeScript / JavaScript 转译器,类似于 babel。对比 babel,swc 有至少 10 倍以上的性能优势。 我们可以使用swc-loader来代替babel-loader来加快webpack的构建速度。
esbuild 是用go语言编写的新一代的 JavaScript 打包工具。以速度快而著称,耗时只有 webpack 的 2% ~3%,vite就内置了esbuild。那么想用esbuild来加快webpack构建速度的话,可以用esbuild-loader来替换babel-loader。
可以 swc 基于 Rust ,在单线程上比 Babel 快 20倍,在四核上快 70 倍
esbuild 基于 go,速度可以达到现有打包工具的10到100倍
可以。
rust 编写,编译时可以直接将代码根据不同平台来编译成对应的二进制文件,省略了前面最耗时的步骤。词法解析,语法解析生成 ast 的过程。
go 语言编写,可以充分利用多线程打包,并且线程之间共享内容,而 JS 如果使用多线程还需要有线程通信(postMessage)的开销;
而且可以直接编译成机器码,而不用像 Node 一样先将 JS 代码解析为字节码,然后转换为机器码,大大节省了程序运行时间。
什么是 swc 和 esbuild
swc(stands for Speedy Web Compiler)是一个基于 Rust 语言的可扩展平台,目前已经被 Next.js、Parcel、Deno 等使用。它支持编译和打包。 esbuild 是一个基于 Go 语言的构建工具。 各自特性 swc 的特性:
esbuild 的特性:
swc 和 esbuild 为什么快
swc 为什么快 Js 的执行流程: 将源码转变成 AST 树很耗时,而 swc 是基于 Rust 语音的,它直接将源码根据不同平台编译成对应的二进制文件,直接跳过了转AST 步骤,速度大大提升。
esbuild 为什么快
swc 和 esbuild 在 webpack 中使用
swc 在 webpack 中使用 在 webpack 中需要用 swc-loader 来使用
webpack 中需要用 esbuild-loader 来使用