Farm基于 Rust 的 Web 构建引擎
Farm 是一个使用 Rust 编写的极速构建引擎。
特性
- 超级快:所有编译均由 Rust 实现,多线程编译,毫秒级项目启动、2ms HMR。比业界同类工具 Webpack 快 10 倍,比 vite 快 5 倍。
- 丰富的编译能力支持:默认支持 Html、Css、Js、Jsx、Ts、Tsx、静态资源(图片、字体等)等模块的编译能力,所有 web 资源均作为一等公民编译,所有编译能力开箱即用。
- 懒编译:默认采用按需编译,除首屏需要的模块外,其他模块均在加载时编译!因首屏能展示的内容有限,理论上对任意规模的项目,Farm 都能支持秒启动!
- 插件化:Farm 的所有能力均由插件实现,任意功能都可以通过插件定制、扩展。Farm 同时支持 Rust 插件以及 Js 插件。
- 一致性:Farm 在开发环境和生产环境下的编译行为保持一致,开发时所见即最终所得。
- 局部 Bundle:Farm 会自动识别模块依赖图,基于依赖关系,产物大小等因素,自动生成若干个小 Bundle,提升资源加载速度以及缓存命中率。
架构设计
Farm 整体的架构图如下:
Farm 主要分为两个部分,Js 侧以及 Rust 侧
- Js侧:实现 Farm CLI、Dev Server 以及运行时能力,并通过 napi 与 Rust 构建核心交互。
- Rust侧:负责核心的编译流程实现、编译上下文等,所有编译过程在线程池中以最大并发量执行。
整个编译流程分成 Build Stage
以及 Generate Stage
(借鉴了 Rollup 中的概念,但是和 Rollup 的实现完全不同)。Build Stage 负责解析和编译所有模块,并生成模块图,Generate Stage
中基于模块依赖图进行局部 bundle、runtime 注入、压缩/treeshake(实现中)、产物生成等。
性能
官方数据显示,Farm 比 Webpack 快 10+ 倍,比 vite 快 5 倍。对于一个基础的 React 项目,性能对比数据如下:
Webpack | Vite | Farm | 对比 | |
---|---|---|---|---|
冷启动时间 | 853ms | 276ms | 67ms | 比 webpack 快 12 倍,比 vite 快 4 倍 |
HMR 时间 | 43ms | 23ms | 2ms | 比 webpack 快 20 倍, 比 vite 快 10倍 |
onload 时间 | 83ms | 310ms | 57ms | 比 vite 快 5 倍,与 webpack 接近 |
项目可访问总时间 | 936ms | 586ms | 124ms | 比 webpack 快 8 倍,比 vite 快 5 倍 |
性能对比的测试仓库地址:https://github.com/farm-fe/performance-compare
测试机器(Linux Mint 21.1 Cinnamon, 11th Gen Intel© Core™ i5-11400 @ 2.60GHz × 6, 15.5 GiB)
注:因为 Vite 对于源代码是请求时编译,所以此处加上了 “项目可访问时间”(即 “冷启动时间” + “页面加载时间”),作为另一个指标来综合对比性能。
评论