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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
每日一博 | vivo 短视频用户访问体验优化实践
作者:vivo 互联网运维团队- Hu Tao 本文介绍了vivo短视频用户访问体验优化的实践思路,并简单讲解了实践背后的几点原理。 一、背景 我们平时在看抖音快手视频的时候,如果滑动到某个视频画面一直几s不动的时候,大概率就会划走了,所以在短视频项目中,画面卡顿是非常影响用户体验的,启播速度越快,就越能留住用户。 启播速度简单来说就是从调用开始播放到首帧上屏的时间,大致可分为两部分: 视频文件下载耗时 视频解码耗时 本文主要从运维排查问题的角度,从网络这部分的各个环节入手,结合vivo短视频的具体案例,给大家分享下优化过程。 二、用户访问链路 我们先梳理下一次完整的网络请求过程,以客户端视角为例,如下图所示: 在接入CDN的情况下,可分为几个阶段: DNS域名解析:获取服务器的IP地址。 TCP连接建立:与服务器IP建立连接即tcp三次握手。 TLS握手:客户端向服务器索要并验证服务器的公钥,双方协商生产「会话秘钥」并进行加密通信。 CDN响应:将内容资源分发到位于多个地理位置机房中的服务器上并返回给客户端。 针对以上阶段,分别讲下vivo短视频是如何进行优化的。 三、DNS域名解析...
- 下一篇
FSF 公布 2022 年度自由软件奖得主
自由软件基金会 (FSF) 今天宣布了 2022 年自由软件奖的获奖者,该奖项每年在 FSF 的 LibrePlanet 会议上颁发。由于今年的 LibrePlanet 2023 是一场现场和在线混合会议,因此颁奖仪式以现场和虚拟方式进行。 今年的获奖者是 Eli Zaretskii、Tad (SkewedZeppelin) 和 GNU Jami。 Eli Zaretskii(自由软件进步奖) Tad (SkewedZeppelin)(杰出的新自由软件贡献者) GNU Jami(社会福利项目) 👆 Sébastien Blin(左)和 Cyrille Béraud(右)代表 GNU Jami 领取社会福利项目奖。 Eli Zaretskii (Stallman 的老朋友)是 2022年自由软件进步奖的获得者。 Zaretskii 目前是 GNU Emacs 的共同维护者,GNU Emacs 是 GNU 操作系统的旗舰程序之一,三十多年来,他一直是 Emacs 的贡献者,作为共同维护者协调 200 多个活跃贡献者的工作。 2022 年杰出新自由软件贡献者奖颁给了 DivestOS 项目...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池