Farm基于 Rust 的 Web 构建引擎

联合创作 · 2023-10-01 13:32

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 对于源代码是请求时编译,所以此处加上了 “项目可访问时间”(即 “冷启动时间” + “页面加载时间”),作为另一个指标来综合对比性能。

浏览 1
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报