Rspack——基于 Rust 的高性能 Web 构建工具

基于 Rust 的高性能 Web 构建工具

导语
Rust这几年以其高性能和可靠性正在快速占领前端基建领域,“任何能够用 Rust 实现的应用系统,最终都必将用 Rust 实现”。今年3月份,字节跳动开源了基于Rust开发的构建工具Rspack,和其他Rust构建工具如turbopack等不同的是,Rspack走了兼容webpack生态的路线,意味着业务能低成本从webpack迁移至Rspack

Rspack简介

下面引用一下Rspack官网的介绍

Rspack(读音为 /'ɑrespæk/,)是一个基于 Rust 的高性能构建引擎, 具备与 Webpack 生态系统的互操作性,可以被 Webpack 项目低成本集成,并提供更好的构建性能。
Rspack 已经完成了对 webpack 主要配置的兼容,并且适配了 webpack 的 loader 架构。目前,你已经可以在 Rspack 中无缝使用你熟悉的各种 loader,如 babel-loader、less-loader、sass-loader 等等。我们的长期目标是完整地支持 loader 特性,未来你可以在 Rspack 中使用那些更加复杂的 loader,如 vue-loader。 目前 Rspack 对缓存支持还比较简单,仅支持了内存级别的缓存,未来我们会建设更强的缓存能力,包括可迁移的持久化缓存,这将带来更大的想象空间,如在 monorepo 里不同的机器上都可以复用 Rspack 的云端缓存,提升大型项目的缓存命中率。

Webpack兼容

Webpack作为最流行的前端构建工具之一,主要原因就是其社区内丰富的Loader、Plugin生态。Rspack兼容了Webpack的主要配置,并适配了对Loader架构的支持,方便渐进式升级,从Webpack低成本迁移到Rspack。值得关注的是,Rspack的目标也不是完全兼容Webpack API,Rspack 目前仍缺失了很多的webpack 的插件Hook 以及一些API,且有些配置会影响构建产物,目前仍在补齐中,不能做到无缝切换。

与其他激进的Rust构建工具如Turbopack不同,Rspack兼容Webpack会带来部分性能损失,相比业界其他Rust构建工具也有性能差距,但性能和迁移成本的平衡也是值得大家关注的,Rspack为业界提供了一个更中庸的方案。目前Rspack团队已经和Webpack团队确立了合作关系,后续可能会探索将Rspack集成到Webpack中。

除了基于 webpack 的构建方式,Rspack还兼容基于 Rollup 的构建方式,能够满足不同应用场景的需求

Rust带来的性能提升

Rspack得益于Rust的高性能编译器支持,Rust 编译生成的 Native Code 通常比 JavaScript 性能更为高效。JavaScript的垃圾回收机制会在程序运行时不断寻找并释放不再使用的对象和变量,Rust的内存管理是通过所有权系统管理内存,并在编译时会根据一系列的规则进行检查,使得 Rust 有惊人的内存利用率。另外,Rust语言对并行化良好的支持,使得Rspack能在模块图生成、代码生成等阶段多线程并行执行,从而充分利用多核CPU的优势,大幅提升编译性能。

Rspack核心逻辑和核心插件都用了rust实现

Rspack核心逻辑、插件目录

Webpack性能瓶颈主要来自其js Plugin | Loader,而Rspack基于Rust重写了Webpack的大部分Loader和Plugin,内置了如 Typescript、JSX、CSS、CSS Modules、Sass 等常见构建能力,减小了js Plugin | Loader带来的性能问题和通信开销成本,保证了其构建速度。同时Rspack支持自定义插件和自定义Loader拓展更多能力,有很强的可插拔性和自由度。

Loader兼容

Loader 兼容性 替代 备注。
babel-loader 兼容 内部使用SWC实现了babel-loader的大部分转换功能 babel-loader对性能影响较大,请谨慎使用
sass-loader 兼容
less-loader 兼容
postcss-loader 兼容
yaml-loader 兼容
json-loader 兼容
stylus-loader 兼容
@mdx-js-loader 兼容
@svgr/webpack 兼容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值