新宠儿还是新玩具?Bun 速览

Bun:超快JavaScript工具集,让开发更高效! Bun是一款兴的全能JavaScript工具包,集运行时、打包器、测试运行器和包管理器于一体。它以Zig语言编写,基于JavaScriptCore,提供比Node.js更快的启动度和更低的内存占用。Bun支持直接运行TypeScript/JSX代码,内置简单高效的测试运行器,简化了包管理流程。安装方式多样(脚本/Docker/npm等),兼容主流操作系统。适用于Web开发、API构建、自动化脚本等场景,能与现有Node项目无缝集成。相比Node.js、Deno等工具,Bun在性能、易用性和工具整合方面具 阅读详情

最近前端圈子又有了新的话题,重量级轮子 Bun。它自称是集 Bundle, transpile, install and run JavaScript & TypeScript 于一身的全能 runtime,对标 node 和 deno 并且有比它们快的多得多的速度。在首页的显著位置直接给出了 http serve 和 sqlite 三倍于 node 的性能对比图,可谓贴脸输出。

一般这种听起来就跨时代的产物第一反应都难免让人觉得是诈骗,所以就花一点点时间,对它进行一个浅层速览吧!

为什么快?

官网没有详细的资料,只作了一些简单的解释:

  • Bun 用苹果的 JavaScriptCore 而非 V8 作为 JS 引擎,因为 JSC 启动和执行比 V8 更快。但链接给出的测试实在是太过于粗糙,如果认真对比的话还是要看看更全面的 benchmark。

  • Bun 是用 ZIG 语言编写。ZIG 是一门比较小众的系统级语言,常被用来对标 C/C++ 和 rust,这不巧了么,后两者刚好是 node 和 deno 所采用的语言。ZIG 能手动管理内存,这是它成为高性能语言的基础之一。另一个亮点是『编译期函数 compile-time function』,有点元编程的意思,比如 ORM 的表值映射可以通过编译期函数直接生成目标代码。

  • Bun 徒手撸了很多东西,包括 JSX/TypeScript 的转译器、打包工具、SQLite client、HTTP client 等等。并且进行了『很多优化』。这……难道不是因为 ZIG 的标准库啥都没有,只能从头撸吗?这也不难解释它在 HTTP serve 和 SQLite 项目的测试上取得很好的成绩,应该做了很多针对性优化吧。

单从以上几点看的话,感觉即使现在性能很强,可能也只是作为一个新项目初期的后发优势,毕竟像 node 这样的成熟项目在迭代过程中性能的优化和劣化是在同时发生的,不用太纠结 ***x faster 的问题。

标准库

Bun 的标准库么,嗯只能说很烂。当然一定程度上是因为 ZIG 的标准库就很烂,造成 Bun 很多东西都只能从头手撸。那么目前有什么呢?官方说的是这样:

其中 fs 和 path 我试了一下,用起来和 node 没什么区别,其他没有尝试。

我有点好奇它的「use the fastest system calls available with Bun.write to write, copy, pipe, send and clone files」指的是什么。我们知道 node 用的是 libuv,它在 linux 上的实现是 epoll,那么 Bun 的 IO 用的是什么技术呢?会是听起来很先进但(似乎)没有广泛应用的 aio 吗?我暂时没有深入去查找资料。

对于 node_modules 这块我比较存疑,因为我的几个简单 node CLI 项目,依赖也不复杂,但是用 Bun 并没有跑起来。后来经过一番二分 debug 发现是它似乎无法正确处理用中文字符做 object literal 的 key,需要像正规 JSON 一样给 key 加上引号,然后勉强运行起来了。虽然不是什么大问题,但过程中几乎无法得到任何有用的报错信息,偶尔有些报错也歪得挺离谱。

Bun 自称它有非常快的 ffi,但它的标准库却是用 ZIG 手撸的,并没有发现移植了现成的各种 C lib 进来,所以这块也不知道作者是如何考虑的,为何不发挥 ffi 的优势移植一堆优秀的 lib 进来快速扩充 Bun 的标准库呢?

Transpiler 也是生撸的,这块一方面是 bug 肯定少不了,另一方面是以后怎么追赶 JSX 和 TS 的迭代会是个问题。

最后是在它介绍当中的 bundler 部分,目前似乎还只是作者规划的美好愿景。

生态

光有 runtime 本身固然没什么用,还需要有各种生态,那么目前 Bun 的生态如何呢?我只能说:略大于零。

官网里这么写:

对于 bun run,上面也说到了,用现成的 node_modules,我试了几个项目都并没有跑起来。要将 node 项目迁移到 bun 目前看来不是很现实。

对于 bun install,我也尝试了,不论是开还是不开代理,都没有安装成功,加上 verbose 参数也没有看出来什么端倪,中间不知道为什么就卡住了。我们知道 npm, yarn, pnpm 在 install 速度上的差异一方面来源于下载包,一方面来源于解析依赖,由于我没有成功执行 bun install 于是也无从继续分析。

开发健康度 & 社区

到今天(2022/07/15)为止,Bun 的 github 提交频率都非常高,每天都有 commit,目前有 200+ open issue 和 20+ pending pr,而且 issue 很多都是最近几天甚至几小时提的,可以看出是有不少人在尝鲜的,活跃度还不错。

从 open issue 大概看看,主要的 bug 有这几种

  • seg fault、illegal instruction 这类 runtime 问题,并不太确定是 Bun 还是 ZIG 的问题

  • 使用 Bun 标准库,如 fetch、HTTP、SQLite 等出现的问题

  • 引用 nodejs 库遇到的问题

这么看的话问题还是在各个维度上都有的,作为一个早期项目来说这可以理解,另外就是估计这些 bug 全修了的话性能优势会抵消不少 😂

另外就是作者 Jarred-Sumner 战斗力极强,从去年 4 月份到现在,有超过 90% 的代码都是他一个人写的,达到了 2,764 commits   1,678,425 ++   998,768 --,从这澡堂瓷砖一样的 calendar 也可见一斑。

小结

即使是 deno,从 1.0 到现在已经 2 年了,该没人用还是没人用,更别说 deno 从初版到 1.0 也熬了有接近 2 年的时间。deno 这么努力也流行不起来,大概是 JS 生态真的不太需要一个新的 runtime 吧。代价那么大,收益却全靠吹,实在是让人提不起劲来。

nodejs 一开始虽然也因为异步 IO 而吹它的性能比 PHP、Java Servlet 快多少云云,但最后选择 node 的项目却大概率不是因为性能而选的。现在 node 成为了前端工具链的枢纽,同时也在服务端有了一定的生态位,更多是因为它占了一个从无到有的先机,后来者想要取而代之恐怕是非常的难了。即使最近一两年来,前端生态圈刮起了一阵用 rust 重写的风,比如 swc,rome,大多也是集中在关键性能的部分,最终还得结合 node 生态才能融入到工具链。

GD32F450以太网(1):ETH 外设接口简介 GD32F450以太网ETH MAC外设接口简介 阅读详情

相关推荐

手把手教你学Simulink--基于多能源系统协同控制的复杂场景实例:氢燃料电池+锂电池混合动力电动汽车能量管理仿真

本文介绍了基于Simulink的氢燃料电池与锂电池混合动力电动汽车能量管理系统的建模与仿真方法。系统包含驾驶循环输入、燃料电池子系统、锂电池子系统、能量管理、电机驱动等模块,通过协同控制优化能源分配。详细说明了从模型创建到各子系统设置的7个步骤,并提供了MATLAB代码示例。该仿真可评估不同工况下的系统响应度、能量利用效率和电池寿命等性能指标,为混合动力汽车的能量管理策略设计和优化提供参考。

MHD0815的博客 210

Bun 1.0 正式发布,爆火的前端运行时,度遥遥领先!

Bun 1.0 正式发布,爆火的前端运行时,度遥遥领先!

m0_64590669的博客 1922

华为FusionCube系统构架介绍.docx

华为FusionCube系统构架介绍.docx华为FusionCube系统构架介绍.docx华为FusionCube系统构架介绍.docx华为FusionCube系统构架介绍.docx华为FusionCube系统构架介绍.docx华为FusionCube系统构架介绍.docx华为FusionCube系统构架介绍.docx华为FusionCube系统构架介绍.docx

Bun 入门到精通(一)——简介

Bun 是用于 JavaScript 和 TypeScript 应用程序的多合一工具包。它作为一个名为bun的可执行文件提供。其核心是 Bun 运行时,这是一个快JavaScript 运行时,旨在替代 Node.js。它是用 Zig 编写的,并由 JavaScriptCore 提供支持,大大减少了启动时间和内存使用量。

Jackson_Mseven的博客 2770

前端Bun:快上手

Bun 是一个超快的 JavaScript 全栈工具链,集成了包管理器、构建器、运行时和开发服务器。

2303_80346267的博客 1579

Bun v1.3 重磅发布:一站式全栈 JS 运行时,前端开发、数据库、Redis 全内置

Bun v1.3发布:全栈JS运行时标杆 摘要:Bun v1.3作为重大版本更,将JS运行时功能扩展至全栈开发领域。该版本原生支持前端开发全流程(热重载、打包构建)、内置MySQL/PostgreSQL/Redis客户端,并提供前后端同服能力。关键特性包括:1)内置前端开发服务器,支持React热刷;2)统一前后端路由,消除CORS问题;3)原生支持主流数据库操作;4)可编译为独立可执行文件。性能测试显示其响应度比传统方案快1.8倍,已被Midjourney等团队采用。安装支持多平台,提供Docke

葡萄城技术团队博客 1596

Bun运行时】全面解析:高性能、易用的一代JavaScript/TypeScript运行时

Bun运行时是一款兴的JavaScript和TypeScript运行时,它由Jarred Sumner创建,旨在提供比Node.js和Deno更高的性能和更快的启动度。Bun的初衷是通过原生编译、轻量化架构和改进的开发体验,简化前端开发者的工作流程。Bun不仅支持Node.js的大部分API,还内置了诸如包管理、文件系统访问、跨平台支持等多项功能,成为开发者的高效工具。对于追求高性能的API服务、快启动的开发工具,Bun是值得尝试的选择。

佚名程序员 3169

Windows如何下载Bun并在前端Vue或React项目上替代Yarn或Npm

根据,Bun在Windows上的安装和使用都已经得到良好的支持,包括bun install在内的命令可以在Windows上得到良好的执行效果,并附有对Vue和React等前端框架的支持~Bun提供了快的安装度和运行时间,特别是在处理大量依赖项的前端项目时。使用Bun作为Yarn或NPM的替代品,可以加快你的开发流程。你可以使用以下命令在。

云散的博客 3272

Bun.js入门简介

我怀疑我们正走向一个同构的服务器端 JavaScript 时代,在这个时代,模块开发人员试图编写与所有运行时兼容的代码:Node.js、Deno、Bun、无服务器、边缘、嵌入式等等。如果您从项目的开始使用 Bun,它是可靠的。度比 Node.js 更快,尽管除非您的应用程序执行特定的密集任务,如大量的 SQLite 处理或 WebSocket 消息传递,否则不太可能看到显著的性能提升。选择 Node.js 的人很少会因此而被解雇,但 Bun 避免了一些 Deno 的错误,并迅成为一个吸引人的选择。

菜菜程序员 4237

WHAT - Bun 真的那么全能吗

特性说明快启动比 Node.js 快数倍,冷启动时间几乎为零原生 TypeScript无需配置即可运行.ts文件更快的安装依赖比 npm/yarn 快 10 倍以上内置测试使用bun test编写并运行测试小内存占用相比 Node 运行同样的代码占用更少的资源Bun 的性能和功能优势背后有着一套清晰的技术设计理念,我们逐条来解释它是如何实现这些优势的。

weixin_58540586的博客 1222

超越 Node.jsBun 的创与突破

运行时”(Runtime)在计算机编程中指的是一个软件程序执行时提供的环境,其中包含了执行程序所必需的库、调试和其他支持功能。在 JavaScript 的世界中,运行时负责解释执行 JavaScript 代码,并提供可以由 JavaScript 代码调用的 API,例如处理文件系统、网络通信、定时器等。就 JavaScript 语言而言,最著名的运行时环境是浏器和 Node.js。浏器提供了一个针对客户端脚本的运行环境,允许 JavaScript 与网页交互,控制 DOM 元素,响应事件等。

王乐平 技术博客 4327

【高级前端进阶】Bun上手入门教程 - 老曹带你飞

Bun入门成指南:从安装到实战 摘要: Bun一代JavaScript运行时,号称比Node.js快100倍。本文提供了Bun的完整入门指南: 一键安装:支持macOS/Linux/Windows系统 基础使用:直接运行JS/TS文件无需编译 包管理:bun install比npm快30倍 Web开发:内置高性能HTTP服务器 测试支持:自带测试框架 性能对比:Bun在启动度和包管理上大幅领先传统方案 特色: 兼容Node.js生态 原生支持TypeScript 极简API设计 超快启动

silverclayz的技术分享 1556

探秘Bun:一款现代化、高性能的JavaScript运行时环境

探秘Bun:一款现代化、高性能的JavaScript运行时环境 【免费下载链接】bun 极其快JavaScript运行时环境、打包工具、测试运行器和包管理器——集于一身。 项目地址: https://gitcode.com/GitHub_Trending/bu...

gitblog_00077的博客 937

告别 Node.jsBun 运行环境的基础入门与核心定位

Bun一代 JavaScript 运行时,旨在优化现代 Web 开发流程。:Bun 仍处于快迭代期(v1.0 已发布),生产环境需评估稳定性。,通过集成工具链、加执行效率及简化开发体验实现突破。

gsfddsfsd的博客 333

JavaScript 运行时 Bun 火了

Bun is a fast all-in-one JavaScript runtime,翻译一下就是,Bun 是一个快的多合一 JavaScript 运行时。官方文档:https://bun.sh/。近日,前端工具链 Bun 项目的关注度颇高。Bun 是像 Node 或 Deno 一样的现代 JavaScript 运行时,作者是 Jarred Sumner ,曾在 St...

文摘资讯 1994

2024版最148款CTF工具整理大全(附下载安装包)含基础环境、Web 安全、加密解密、密码爆破、文件、隐写、逆向、PWN等全套工具

经常会有大学生粉丝朋友私信大白,想通过打CTF比赛镀金,作为进入一线互联网大厂的门票。但是在CTF做题很多的时候都会用到工具,所以在全网苦寻CTF比赛工具安装包!

Libra1313的博客 1万+

深度科普 - 大名鼎鼎的bun.js到底是什么? 它能否替代node.js? 是否能成为前端生态的未来?...

什么是bun? 聪明的小伙伴们,你们在接触bun时是否有过这样的疑问呢? bun.js是什么? 它是如何诞生的?node.js的区别是什么? 有什么优势? 目前的发展情况如何了? 他是否是前端的未来? 随便在网上一搜索网页可能会告诉你: Bun.js 定位为 Node.js 的现代化替代品。它集成了运行时、包管理器、构建工具、测试框架等核心功能,并原生支持 TypeScript、JSX...

weixin_32050033的博客 628

前端全栈混合之路Deno篇:Deno2.0与Bun对比,谁更胜一筹?它们分别适合怎样的项目,谁更适合前端转全栈?

前端全栈开发中,工具的不断演变让开发者们始终在寻找更高效、更现代化的解决方案。Deno2.0的近期的发布让它在性能和兼容性方面大幅提升,而Bun则凭借其高效的运行度和友好的开发体验获得了广泛关注。那么,Deno 2.0和Bun到底谁更胜一筹?本文将对这两个工具进行理性对比,并探讨各自的优势与适用场景。

分享有趣的、贴近生活的CS知识 6131

BunJavaScript 世界的兴高性能工具

Bun是一款颠覆性的JavaScript/TypeScript一体化开发工具,集运行时、包管理器和转译器于一身。相比传统工具链(Node.js+npm+Webpack等),Bun凭借Zig语言和JavaScriptCore引擎实现显著性能提升:安装依赖快20-100倍,冷启动度快10倍,并提供零配置的TS/JSX支持。其核心优势包括智能缓存、并行安装和内置构建工具,特别适合追求效率的项目。虽然对复杂项目生态支持尚在完善,但Bun已展现出替代传统工具链的潜力,为开发者提供更轻量、高效的开发体验。

kinghzking的专栏 649
上一篇: 关于数据库你应该知道的那些事儿
下一篇: 资深工程师教你写出研发喜欢的文档
Bytebase
博客等级 码龄5年 1233粉丝 258原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值