• home > tools > Bundler > vite >

    Bundler取舍:抛弃vite改投rspack?

    Author:zhoulujun Date:

    vite无法应对海量模块请求,第二个就开发环境与生产环境不一致问题,有了Rspack后,果断抛弃!虽然性能Rspack未必是最高的,但其兼容webpack生态带来的低成本迁移,是其他的方案基本上无法做到的。

    虽然webpack5速度提升巨大,但是对于重前端项目,比如可视化BI系统在这种巨无霸来说,还是撑不住

    所以用vite,但是vite直接解决了开发环境,生存环境欲哭无泪

    vite 在开发模式下使用原生的 ESM(即非打包模式) ,同时使用 esbuild 预打包依赖项,极大提升了应用开发服务器启动和热更新效率。但是非打包模式(Unbundled)并不完美,对于大型项目来说还是有很大的问题:

    1. 海量模块请求:对于一个大型项目,可能需要加载的模块有上千个,使用原生模块系统加载上千个模块会导致浏览器卡死甚至崩溃

    2. Dev 和 Production 不一致:在大多数情况下,本地模块不能直接用于生产环境。 因此,非打包工具在生产环境中依然需要打包流程,从而导致 Dev、Production 不一致。当这种不一致导致生产错误时,调试起来非常麻烦、痛苦。 而 vite 选择在 dev 环境使用 esbuild,在 production 中使用 rollup,这进一步扩大了不一致性。

    Vite 在 dev 环境 之所以这么快,是因为 esbuild, esbuild 是用 go 编写的。 Go 利用了原生平台的优势,比 Js 快得多。

    那么rust比go更快,于是有了Turbopack、Farm、Rspack等rust方案

    Farm 的作者是 brightwu(吴明亮),曾就职于字节跳动和腾讯。 Farm 开源时间不到一年,在 Github 上已有 500+的 star,速度杠杆的

    可以看测试对比数据:vite 4.3 性能大幅提升! https://www.51cto.com/article/751560.html

    奈何文档、社区、生态建设目前还跟不上……

    rspack文档比较全,对标webpack,有可取之处。尤大原话:

    Rspack在兼容性和性能收益方面表现出色。它的架构基于Webpack 5,并且使用了swc替代了babel以提高编译速度。

    Rspack

    https://rspack.dev/ 是由字节 ByteDance Web Infra 团队基于 Rust 语言开发的 Web 高性能构建工具。

    开箱即用支持 ts/tsx/css/css modules,不用自己找插件了,webpack 生态兼容

    webpack与rspack对比

    虽然性能Rspack未必是最高的,但其兼容webpack生态带来的低成本迁移,是其他的方案基本上无法做到的。

    迁移具体查看官网:https://rspack.dev/zh/guide/migration/webpack


    Rspack的缺点

    核心用 Rust 写的,但是插件扩展是 JS写的,一方面有些开发者还得学习 Rust 才能做插件开发,上手成本比较高,另一方面是 JS 本身有个动态化特性,能直接在用户侧去编写并被加载执行,由于 Rust 是一门 Native 语言,做动态化是远不如 JS 的,即使使用 Rust 开发了一个插件,编译后的产物也是一个 Native Code,Native Code 跟 操作系统、CPU 等是强相关的,比如在 Windows 上编译出来的插件在 Mac 上是跑不起来的,如果想做这种 Native 插件的动态分发或加载是比较困难的,需要熟悉整套跨平台编程的知识,每一个插件可能需要编译出来很多个平台的产物,然后再分发到不同平台上去,这个门槛比较高且稳定性也不容易控制。


    参考文章:

    基于Rspack实现大仓应用构建提效实践|得物技术 https://tech.dewu.com/article?id=120

    Bundler 的设计取舍:为什么要开发 Rspack? https://developer.volcengine.com/articles/7317465495019225125



    转载本站文章《Bundler取舍:抛弃vite改投rspack?》,
    请注明出处:https://www.zhoulujun.cn/html/tools/Bundler/vite/9242.html