当前位置: 首页 > 软件库 > 开发工具 > 项目构建 >

Farm

基于 Rust 的 Web 构建引擎
授权协议 MIT
开发语言 TypeScript Rust
所属分类 开发工具、 项目构建
软件类型 开源软件
地区 国产
投 递 者 陆子默
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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

  • 转载自游戏任务设计(2):MoveTo与Farm任务 游戏任务设计(2):MoveTo与Farm任务 照例,我知道你们都不爱看的枯燥无聊的理论文章……第二部分。说真的我没想到这个命题竟然能扯出这么多,写起来收不住了……所以这篇只是设计方法的(上)。 工具箱 任务设计的方法说简单很简单,就是对各种设计手法的灵活使用。说复杂也复杂,因为任务的种类实在是多种多样。一个像魔兽世界这样庞大的游戏起码能分类出

  • Do you want to run your city like your own business? Well, if you do you are in luck. Mega Farm Business lets you do exactly that. Take control of everything that goes on in your city. You are the bos

  • 动物 boar 种猪 sow n.母猪;v.播种 mare 母马 mane 鬃毛 pigeon 家鸽;dove 和平鸽 raven / crow 乌鸦 cockerel 小公鸡 poultry 家禽 flea 跳蚤 短语 a brood of ducklings 一窝小鸭子 sibling 兄弟姐妹 a flock of geese a pack of idle thieving human be

  • ADD:http://www.iis.net/download/WebFarmFramework  Today, setting up web servers, deploying content to them, and then managing them is a lengthy process. It requires a number of manual steps and ongoin

  • 链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网   题目描述 White Rabbit has a rectangular farmland of n*m. In each of the grid there is a kind of plant. The plant in the j-th column of the i-th row b

  • Link Farm中文可翻译为链接工厂,链接养殖场,属于SEO垃圾和搜索引擎优化作弊。所谓Link Farm,就是通过创建一个堆砌大量链接而没有实质内容的网页,这些链接彼此互链,或指向特定网站,以增加被链接网站外部链接数量,由此欺骗搜索引擎蜘蛛程序,为目标网站获得更高的链接广度,最终提升搜索引擎名。目前搜索引擎对Link Farm的识别能力很强,一经发现网站被链接到Link Farm,将有被永久删

  • Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprises N (1 <= N <= 1000) fields numbered 1..N, the first of which contains his house and the Nth of whic

  • 分布式系统:FaRM 硬件新趋势 RDMA RDMA:remote DMA,远程内存直接访问。 硬件支持:需要网卡的特殊支持 可以远程读/写另一台机器上的内存。 特点:应用程序直接与网卡交互,所以绕过本机的OS内核(不用TCP/IP协议栈)。在对方机器上,网卡直接读/写内存,不需要对方CPU的参与。 写操作成功能收到对方网卡硬件发来的ACK(确认)。 也可以用来实现类似RPC的效果。发送方用RDM

  • Princess connection 公主连结农场脚本v0.2 [TOC] 简介 此项目为国服公主连结脚本,使用opencv图像识别进行按钮分析。本项目基于公主连接opencv高级脚本(https://github.com/bbpp222006/Princess-connection) 开发。 目前实现的功能有 账号批量登录/退出; 收取所有礼物; 检测行会捐赠请求并捐赠; 地下城自动刷支援,默

  • Guarding the Farm Time Limit: 1000 ms     Memory Limit: 65536 KB Total Submit: 23     Accepted: 18  Description The farm has many hills upon which Farmer John would like to place guards to ensure the

  • 安装web farm,网络拓扑结构 http://learn.iis.net/page.aspx/919/setting-up-a-server-farm-with-the-web-farm-framework-20-for-iis-7/ 转载于:https://www.cnblogs.com/liyuanpeng/archive/2011/08/24/2152369.html

  • 如何制裁泛滥的垃圾农场 有超级多类似的垃圾网站,只是换个域名罢了,用的网页格式都是一样我吐了,真的是,无下限地爬取别人的成果然后无限复制。 这里是google的spam举报链接,可能可以一下子打压一系列垃圾农场。 清理「内容农场」,让 Google 中文搜索再次伟大 这篇文章介绍了很多有用的东西,大家可以看一下,介绍了很多插件、油猴脚本和一个中文spamfarm的blocklist社区。 我跟着做

  • 正题 题目链接:https://www.luogu.com.cn/problem/CF1594F 题目大意 给出 n , s , k n,s,k n,s,k,求是否所有的长度为 n n n且和为 s s s的正整数序列都有一段和为 k k k的区间。 1 ≤ T ≤ 1 0 5 , 1 ≤ n , s , k ≤ 1 0 18 1\leq T\leq 10^5,1\leq n,s,k\leq 10

 相关资料
  • braft 本身并不提供server功能, 你可以将braft集成到包括brpc在内的任意编程框架中,本文主要是阐述如何在分布式Server中使用braft来构建高可用系统。具体业务如何实现一个Server,本文不在展开。 Example server-side code of Counter 注册并且启动Server braft需要运行在具体的brpc server里面你可以让braft和你的业

  • 目标:构建基于 Maven 和 Tomcat 的基础镜像 本项目代码维护在 DaoCloud/docker-demo-build-base-image 项目中。 您可以在 GitHub 找到本项目并获取本文中所提到的所有代码文件。 前言 在 Java 开发的世界中,有很大一部分应用是基于 Maven 构建的,而最终的交付结果也是一个 war 包,所以,构建一个基于 Maven 和 Tomcat 的

  • 自然语言具有范围广泛的语法结构,用8.中所描述的简单的方法很难处理的如此广泛的语法结构。为了获得更大的灵活性,我们改变我们对待语法类别如S、NP和V的方式。我们将这些原子标签分解为类似字典的结构,其特征可以为一个范围的值。 本章的目的是要回答下列问题: 我们怎样用特征扩展上下文无关语法框架,以获得更细粒度的对语法类别和产生式的控制? 特征结构的主要形式化属性是什么,我们如何使用它们来计算? 我们现

  • Spring boot maven插件正在使用paketo builder构建图像。 我想做的是在这个构建器正在做的事情上添加另一个步骤。我已经创建了自己的构建包,并试图创建包含基本构建包的构建器。 我遇到的第一个问题是,当试图从builder.toml创建一个构建器时,会出现这样的错误: 另一个问题是,即使这样做有效,我想我仍然必须指定来自paketo:base的所有order.group。 是

  • 问题内容: 给定一个像这样的json: 和两个常规的html输入: 我需要建立一个包含所有可能变化形式的表,例如: 这意味着,如果用户继续通过输入添加值,则将出现建立新变体的新行,例如: 我还需要有可用的id来处理它,并且当我使用输入(例如“Peter”“Black”)添加新值时,我需要像自动递增那样动态地自动填充id(颜色id)mysql,结果如下: 那可能吗?我可以使用哪些选项进行角度操作?我

  • 我试图建立一个专栏,将根据另一个。新列应反映满足某些标准的值,并在值不符合标准的地方放置0。 例如,名为银行余额的列将有负值和正值;新列透支将为相应行提供负值,余额大于0时为0。 最终结果应该是这样的。