【转】Node.js社区知名领袖Matteo Collina关于Bun 1.0发布的看法

Matteo Collina是Platformatic.dev的CTO,同时他也是Node.js Stream主要负责人,著名的Fastify框架作者,mqtt,msgpack,pino等知名模块的作者。

以下内容来自Matteo Collina的订阅邮件《My thoughts on Bun and other Adventures》,体现了作者对bun 现阶段所处位置的独到理解,同时也暗示了nodejs可能即将开启新一轮性能优化的行动哦❤️


大家好!

我写这篇文章的时候正在飞往伦敦,在那里我将与我的联合创始人Luca Maraschi一起工作整整一周。自上次写作以来,发生了很多新闻。

Bun 1.0

Bun发布了1.0版本,我既兴奋又失望。我非常喜欢Jarred Sumner正在构建的Bun,但他们声称与Node.js兼容性的问题让我有些沮丧。根据我的经验,它并不能完全替代Node.js,很多内部细节也有所不同。这导致了许多随机问题,我的代码库被要求修复Bun不兼容性的问题,而人们试用它。我更希望他们等待更大程度地与生态系统兼容后再发布1.0版本。

为什么Bun比Node.js更快?

原因如下:

  1. Node.js没有预算,一个小团队维护npm。大多数投资都是在添加功能或更安全的东西上,而不是让东西更快。让东西更快并不会让任何人赚更多的钱;这有点像公地悲剧(公共财产的悲哀)。此外,云提供商(现在是真正赚钱的人)对提高任何东西的性能没有兴趣,因为这意味着他们的收入会减少。
  2. Bun不关心与npm生态系统的重大部分的向后兼容性。他们使事情变快,并正在努力保留向后兼容性:这就是构建快速软件的方法。相反,Node.js流程是围绕保护生态系统而建立的。我们知道如何使Node.js更快,但这样做会为最终用户带来很多摩擦。
  3. 我相信开放标准和开放治理。运行时和基础设施更好(参见terraform的惨败)。拥有开放的治理意味着更广泛的决策过程,这使每个人都被听到,但这也需要更多的时间来做出决策。

Bun目前不支持Pino和Fastify

我写这篇文章时,Bun不支持Fastify或Pino。两者都是Node.js社区影响非常大模块,其中pino与Next.js一样受欢迎。Bun团队正在积极研究如何添加缺失的API和行为,我期望他们在未来几个月内追赶上来。鉴于有多少人要求支持,以下变体的消息最终出现在我的GitHub已保存回复中:

最终,Bun并没有实现所有的Node.js API。尽管他们声称是干净的替代品,但它并不能完全替代Node.js。有关此类问题,请参阅Bun DiscordIssue Tracker

如果我的任何代码库在Bun上运行不良,请在Bun上报告错误。这也是Jarred要求每个人遵循的方法

Bun安装速度的代价

Bun最令人印象深刻的事情之一是bun install的性能。然而,它以开发人员体验为代价。npm、pnpm和yarn默认会检查是否有新版本可用,并从注册表中获取它。相反,bun会首先选择本地版本。实际上,pnpm --prefer-offline标志的行为与bun install大致相同,并且它们的性能相当:在我的系统上,分别为750ms和150ms(请参见Evan You的这条推文)。尽管这种差异很重要,但这两个数字是可比较的,希望差距会缩小。

有趣的是,最终用户会如何评价这种行为上的差异。您会使用最新和最好的版本,还是使用已安装的本地版本,知道您可能会失去错误或安全修复?

我也对在Mac OS X上聪明地使用写时复制印象深刻,使其几乎在热缓存下瞬间完成。这部分是由于clonefile,它告诉操作系统只在第一次修改文件时复制文件,节省了宝贵的时间。我希望所有其他JavaScript包管理器都能复制这种技术。

Node.js接下来会怎么样?

几年来,Node.js在改进运行时性能方面投入了非常少的资源。去年,Yagiz Nizipli启动了性能团队,现在它是一个战略性的倡议。这导致了相当多的重大性能改进,由Rafael Gonzaga在"Node.js性能状况2023"中描述。每次发布,Node.js都会变得更快,而没有大规模的破坏性变化。

你想让Node.js变得更快吗?加入性能团队并做出贡献...或者找到一种资助Node.js开发的方式。

相关推荐
黑客老陈13 分钟前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss
正小安18 分钟前
Vite系列课程 | 11. Vite 配置文件中 CSS 配置(Modules 模块化篇)
前端·vite
暴富的Tdy1 小时前
【CryptoJS库AES加密】
前端·javascript·vue.js
neeef_se1 小时前
Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作
前端·vue.js·excel
m0_748235611 小时前
web 渗透学习指南——初学者防入狱篇
前端
z千鑫1 小时前
【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤
前端·vue.js·node.js
m0_748250742 小时前
Web入门常用标签、属性、属性值
前端
m0_748230442 小时前
SSE(Server-Sent Events)返回n ,前端接收数据时被错误的截断【如何避免SSE消息中的换行符或回车符被解释为事件消息的结束】
前端
生产队队长3 小时前
项目练习:element-ui的valid表单验证功能用法
前端·vue.js·ui