Bun vs. Node.js

news2024/11/25 6:51:41

Bun vs. Node.js

你知道 Bun 吗?Bun 是新的 JavaScript 运行时,最近在技术领域引起轰动,它声称比 Node.js 更好。本文将展示如何使用基准分数对其进行测试。

在本文中,我们将介绍最近在技术领域引起轰动的新的 Bun 运行时。我们将讨论运行时是做什么的,以及为什么一些开发人员转而使用 Bun。我们还将进行一些基准测试,看看 Bun 是否真的像 Bun 团队所说的那样拥有最快的运行时间。

什么是运行时

想象一下,你有一大盒乐高积木,你想建造一艘很酷的宇宙飞船。你有关于如何把零件组装在一起的所有说明,但你需要一些东西来实际组装宇宙飞船并使其工作。这就是运行时的作用所在,运行时就像一个特殊的助手,负责建造和运行你的乐高宇宙飞船。这是一个确保所有部件正确组合在一起的程序,确保飞船按照它应该做的去做。

当你给运行时指令时,它一步一步地读取指令,并开始把乐高积木放在正确的位置。它精确地按照说明操作,确保每一块都正确地连接在一起,一切都按正确的顺序进行。一旦宇宙飞船建成,运行时也会照顾它的工作。它为飞船提供动力,激活引擎,控制飞船的所有功能。它就像宇宙飞船里的一台小电脑,运行所有的命令,确保一切顺利进行。

在编程世界中,运行时是类似的。它是一个帮助运行其他程序的特殊程序。它读取程序的指令,一步一步地执行它们,并确保一切都按预期工作。因此,就像组装乐高宇宙飞船的助手一样,运行时是帮助正确构建和运行其他程序的特殊程序。它就像一个智能助手,确保一切顺利进行,就像你对乐高宇宙飞船的期望一样。

JavaScript 运行时

JavaScript 运行时就像 JavaScript 和计算机之间的翻译器。当你告诉 JavaScript 做一些事情,比如把两个数字相加,运行时就会监听并理解你想要什么。然后,它接受指令,用它能理解的语言与计算机对话。

运行时还处理其他重要的事情。它确保 JavaScript 遵循规则,不会犯任何错误。它会在 JavaScript 运行时监视它,就像老师监视学生以确保他们正确地完成作业一样。

当运行时与计算机对话并获得结果时,它将其传递回 JavaScript。这就像运行时向 JavaScript 低语答案,然后 JavaScript 可以用这个答案做一些事情。也许它会在屏幕上显示答案,或者用它来制作一个很酷的动画。

什么是 Bun

Bun 是一个使用 Zig 编程语言从头构建的 JavaScript 运行时,专注于快速启动、高效的代码执行和更好的开发人员体验。它提供了工具和功能来优化和简化 JavaScript 应用程序的开发,并被设计为与现有的 JavaScript 生态系统兼容。

当你告诉 Bun 你想让它做什么时,它会仔细倾听。它接受你用一种叫做 JavaScript 的特殊语言编写的指令,并开始一步一步地执行它们。这就像告诉汽车你想去哪里,怎么去一样。但是 Bun 不仅理解 JavaScript ——它还非常擅长让 JavaScript 代码运行得非常快。这就像有一个汽车引擎,可以让你的车在路上比其他任何汽车都快。

Bun 是用一种叫做 Zig 的特殊编程语言构建的。Zig 就像一个神奇的工具,它允许创建 Bun 的人以一种非常高效和快速的方式构建它。有了 Bun,你可以做各种各样的事情。你可以构建工作非常快速和顺利的网站和应用程序。你也可以使用命令行界面(Command Line Interface)来运行 JavaScript 和 TypeScript 文件,将代码捆绑在一起,甚至管理项目的依赖项。

为什么 Bun 更快

由于以下几个关键因素,Bun 运行时表现出令人印象深刻的速度:

  • **轻量级设计 **:Bun 被设计为轻量级的,从而产生更小的代码库和更少的资源需求。与其他运行时相比,这种优化的设计使 Bun 在速度和内存使用方面提供了更好的性能。
  • **底层实现 **:Bun 运行时是使用 Zig 构建的,Zig 是一种相对较新的低级编程语言。Zig 的特性使开发人员能够编写对内存管理和执行进行细粒度控制的代码,从而提高运行时的效率。
  • 性能优化 :Bun 没有依赖 V8 引擎,而是使用了 WebKit 的 JavaScriptCore,其卓越的性能得到了广泛的认可。通过利用这个核心引擎,Bun 从 JavaScript 代码的优化执行中获益,从而提高了运行时速度。
  • 集成功能 :Bun 提供了简化开发过程的本地工具和特性。它包括一个内置的打包器,取代了对 Webpack 等外部工具的需求,以及一个支持直接编写 TypeScript 代码的本机转译器。此外,Bun 集成了一个类似于 Jest 的测试运行器,可以自动加载环境变量,而不需要额外安装像 dotenv 这样的包。

安装 Bun 运行时

要安装 Bun,你可以遵循以下步骤:打开计算机终端或命令提示符。在终端中输入如下命令:

curl -fsSL https://bun.sh/install | bash

该命令将通过从 Bun 官方网站下载安装脚本来启动 Bun 的安装过程。按 Enter 并允许运行安装脚本。它将处理在系统上安装 Bun 及其依赖项的必要步骤,然后等待安装完成。该脚本将负责所有必要的任务,以确保在计算机上正确安装 Bun。

Bun VS Node

在本节中,我们将比较一下 Bun 和 Node,并在这两个运行时之间进行一些基准测试。

  1. 性能 :Bun 强调更快的启动时间和运行时性能,利用 WebKit 的 JavaScriptCore 引擎,以其速度而闻名。相比之下,Node.js 依赖于 V8 引擎,V8 引擎也经过了高度优化,但与 JavaScriptCore 相比可能存在性能差异。
  2. 大小和依赖关系 :Bun 致力于成为一个轻量级运行时,拥有更小的代码库和最小的依赖关系。它集成了诸如打包器和转译器之类的内置工具,减少了对外部依赖项的依赖。相比之下,Node.js 是一个更全面的运行时,拥有更大的代码库,并广泛支持外部模块和库。
  3. 兼容性 :尽管 Bun 旨在作为 Node.js 的临时替代品,但在 API 兼容性方面可能存在差异。虽然 Bun 本地实现了许多 Node.js 和 Web API,但可能不完全支持某些特定的 Node.js 模块或 API。
  4. **工具 **:Bun 为 JavaScript 开发提供了一个集成的工具包,包括打包器、转译器和包管理器。另一方面,Node.js 拥有一个丰富的第三方工具和库的生态系统,用于各种开发任务,比如像 Webpack 这样流行的打包器和像 npm 或 Yarn 这样的包管理器。
  5. 社区和生态系统 :Node.js 受益于一个成熟而广泛的社区,拥有大量的支持、文档完备的资源以及由模块和库组成的庞大生态系统。相比之下,Bun 相对较新,可能拥有较小的社区和更集中的生态系统。

基准测试

这个基准测试是在我的电脑上运行的,数据可能会和大家自己测试的有些偏差。对于基准测试工具,我们将使用 Grafana 实验室的开源工具 k6。你可以在这里找到该工具的安装指南。

对于我们的代码,我从 Bun 和 Node.js 官方网站获得了一个简单的 HTTP 服务器代码。下面是 Hello World 在 Bun 和 Node 中的代码。

  1. Node
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

在终端上运行命令:

node server.js

你的 node 服务器将运行在端口:http://localhost:3000/上

  1. Bun
export default {
  port: 3001,
  fetch(_) {
    return new Response("Hello World");
  },
};

你的 Bun 服务器将运行在端口:http://localhost:3001/上

在终端上运行命令:

bun run bunserver.js

创建一个 script.js 文件并粘贴这个测试脚本:

import http from 'k6/http';
import { sleep } from 'k6';

export default function () {
  http.get('http://localhost:3001/'); // 这将根据你测试的服务器而变化
  sleep(1);
}

在你的终端运行中:

k6 run script.js

下面是我们的 Node 服务器的结果:

image.png

下面是我们的 Bun 服务器的结果:

image.png

现在我们可以看到并比较 Bun 和 Node 的速度。如果你想更进一步,你可以在脚本中引入不同的延迟,更多的用户和持续时间:

k6 run --vus 10 --duration 30s script.js

小结

总之,Bun 和 Node.js 是两个 JavaScript 运行时,为开发人员提供了不同的方法和特性。Bun 专注于提供快速的启动时间,优化的性能,以及集成工具(如打包器和转译器)的轻量级设计。它利用 WebKit 的 JavaScriptCore 引擎来实现它的性能目标。另一方面,Node.js 拥有更大的生态系统、广泛的社区支持以及与多种编程语言的兼容性。它依赖于 V8 引擎,并提供了丰富的第三方工具和库。在 Bun 和 Node.js 之间的选择取决于性能要求、特定的项目需求、合适的工具和社区支持的可用性等因素。最终,开发人员可以利用每个运行时的优势来构建健壮且高效的 JavaScript 应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

螯合剂试剂:DOTA-CH2-Ph-azide(HCl salt),分子式:C21H34Cl3N7O6,的相关参数信息

文章关键词:双功能螯合剂,azide叠氮 为大家介绍(CAS:N/A),试剂仅用于科学研究,不可用于人类,非药用,非食用。 分子式:C21H34Cl3N7O6 分子量:586.9 英文名称&a…

限定国家及时间|心理学老师如期赴意大利访学

S老师由于个人情况变化需要办理CSC改派,并限定了国家且要求年底出国。我们最终用意大利巴里大学的邀请函,助其成功申请了CSC改派并如期出国。 S老师背景: 申请类型: CSC访问学者 工作背景: 高校教师 教育背景&#…

Python基础知识进阶之数据爬虫

一、爬虫概述 爬虫是指利用网络抓取模块对某个网站或者某个应用中有价值的信息进行提取。还可以模拟用户在浏览器或者APP应用上的操作行为,实现程序自动化。简单来说就是我们把互联网有价值的信息都比喻成大的蜘蛛网,而各个节点就是存放的数据&#xff0…

如何写出让业务满意的性能测试报告

目录 前言 需求背景 测试报告的作用是什么? 业务团队更关注哪些内容? 输出让业务满意的性能测试报告 总结 前言 写出一份让业务满意的性能测试报告,需要充分理解和呈现测试结果,结合业务需求进行分析和解读。 这篇文章&am…

别再错过重要任务,手机日程提醒软件用哪个

你有没有过这样的经历,因为平时生活、工作中太过于忙碌,而错过重要任务的完成?相信很多人都会忘记过重要的事情,例如平时工作太忙了,而忘记了之前安排好的会议。那么在待办事项越来越多的今天,我们如何保证…

这几个APP,你认识多少

软件一:AI工具导航 功能介绍 1.书写工具 包括内容创作、语法检查、内容润色等。 2.图像工具 包括文字图片生成、插图生成、在线抠图背景去除等。 3.音频工具 包含自定义风格的音乐生成、变声、配音等。 4.视频工具 包括视频生成、文字转视频、虚拟人讲解等…

vivo 游戏黑产反作弊实践

作者:vivo 互联网安全团队 - Cai Yifan 在数字化、移动化的浪潮下,游戏产业迅速发展,尤其疫情过后许多游戏公司业务迎来新的增长点。 游戏行业从端游开始一直是黑灰产活跃的重要场景。近年来,随着互联网的发展和手机市场的不断壮…

从0到1精通自动化测试,pytest自动化测试框架,用例运行规则(二)

目录 一、用例设计原则 二、help帮助 三、按以下目录写用例 四、python -m 五、执行用例规则 六、-x 遇到错误时停止测试 七、—maxfailnum 一、用例设计原则 文件名以 test_*.py 文件和 *_test.py 以 test_ 开头的函数 以 Test 开头的类 以 test_ 开头的方法 所有的包…

前端学习——HTML

C/S架构和B/S架构 1.C/S架构:需要安装,偶尔更新,不跨平台 2.B/S架构:无需安装,无需更新,可跨平台 大型专业应用、安全性要求较高的应用,需要采用C/S架构 前端工程师主要研发B/S架构的应用——写…

智能照明控制系统助力某商业综合体实现“双碳”

摘要:智能照明是当前非常普及的一种照明控制方式。广泛使用于建筑物,景观,公共场所。本文以智能照明在商业综合体中的应用为基础,主要介绍了智能照明系统的功能与特点,系统运用的效果,在建筑自动化系统中的地位及优势等…

项目前期准备 -- 手把手教你做ssm+springboot入门后端项目黑马程序员瑞吉外卖(一)

文章目录 前言一、导学内容1.前置知识(必备)2.博客收获3.效果展示4.软件开发流程整体介绍4.瑞吉外卖整体项目介绍 二、开发环境搭建1.数据库环境搭建2.maven环境搭建 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客&…

Zoho Bigin表现亮眼,入选国际软件测评机构多项Top榜单

科技重新赋能企业发展动力,数字化转型成为降本增效的好方法。 然而真正落地到企业层面,尤其小微企业,做好数字化转型,并不是件容易的事情,需要多管齐下,长期投入时间和资金。 小微企业由于自身业务规模及…

Golang笔记:使用json包处理JSON数据

文章目录 目的Decoding(解析数据)Encoding(创建数据)总结 目的 JSON 是一种非常流行的数据交换格式,是JavaScript中原生支持的一种数据,因为其简单方便,所以也经常用在不同程序、不同语言间数据…

Linux5.6 Mysql备份与恢复

文章目录 计算机系统5G云计算第四章 LINUX Mysql备份与恢复一、数据库备份的分类1. 数据备份的重要性2.数据库备份的分类3. 常见的备份方法1)物理冷备2)专用备份工具mysqldump或mysqlhotcopy3)启用二进制日志进行增量备份4)第三方…

8.2 网络分层OSI七层模型

目录 计算机网络体系结构的形成 两台计算机要互相传送文件需解决很多问题 提出了不同体系结构 国际标准:开放系统互连参考模型 OSI/RM 但 ISO/OSI 失败了 存在两种国际标准 协议与划分层次 协议与划分层次 协议的两种形式 层次式协议结构 划分层次的概念举…

卷积计算加速方法--分块卷积

1、大尺寸卷积存在的问题 当卷积的输入太大导致内存不够用时,考虑将一大块卷积分成多个小块分别进行卷积,相当于将原始输入分成几个小的输入经过同一组卷积核分别卷积,其中每块小的输入都是原始输入的子集,每块之间互不影响&#…

OpenHarmony社区运营报告(2023年5月)

本月快讯 ● 2023年6月11-13日,2023开放原子全球开源峰会即将在北京北人亦创国际会展中心盛大开幕。2023开放原子全球开源峰会上,OpenAtom OpenHarmony(以下简称“OpenHarmony”)将通过分论坛与展览等方式,展示生态进展…

C# 特性详解

目录 特性是什么? 如何使用特性? (1).Net 框架预定义特性 (2)自定义特性 为什么要使用特性? 特性的应用 特性实现枚举展示描述信息 特性是什么? 特性(Attribute&…

划重点!超全PMP报考指南,速速收藏!

PMP证书作为项目管理专业人士的重要标志,是每一位项目经理职业发展生涯中不可或缺的证书。PMP学习不仅可以提升项目经理的项目管理水平,也可以进一步提升项目经理的个人竞争力。 一,PMP介绍 PMP(项目管理专业人士资格认证&#…

新建一个vue2项目

安装Vue CLI 在终端中输入以下命令进行全局安装: npm install -g vue/cli 创建Vue项目 1.在你要创建项目的目录下打开终端输入vue create 【你的项目名称】 2.手动选择安装 3.根据自己的需求选择 4.选择vue版本 5.是否使用calss风格的组件语法: (推荐…