首页 > 其他分享 >[Bun] Bun notes

[Bun] Bun notes

时间:2024-11-24 16:36:42浏览次数:4  
标签:count const err res notes js Bun

Bun 课堂笔记

对比 Node.js Bun
语言 C++ Zig
JS 引擎 V8 JSCore

Zig:https://ziglang.org/

关于 V8 和 JSCore 各自有不同的架构和优化策略:

  • JSC 优先考虑的是更快的启动时间和更少的内存占用,执行时间会稍微久一下
  • V8 优先考虑快速执行,同时进行运行时的优化,但是 V8 会导致更多的内存占用

因此 Bun 这个运行时的特点就是速度很快,特别是启动速度,基本比 Node.js 快 3-4 倍。

Bun 官网:https://bun.sh/

首先第一步需要安装 Bun,直接使用 npm 全局安装即可:

npm install -g bun

安装完成之后通过 bun -v 可以查看版本。

包管理器

Bun 除了是一个 JavaScript 运行时,同时还是一个包管理器。

回顾在 Node.js 环境中,流行的包管理器:

  • npm(官方)
  • yarn
  • pnpm

但是 Bun 中,天然就自带包管理器。

测试运行器

Bun 同时还自带测试运行器。Bun 的内部有一个内置的测试模块 bun:test
如果你熟悉 Jest/Vitest,那么你可以无缝的迁移过来,零学习成本。

总结

Bun 首先是一个 JS 的运行时,但是不仅仅是运行时,还是一个全能的工具包,其中包含了:

  • 包管理器
  • 测试运行器
  • 构建工具
  • 转译器(天生支持 ts)

除此之外,Bun 还有相当多的非常实用的特性:

  • 天生支持 ts 以及 JSX
  • ESM 和 CommonJS 兼容
  • 内置 WebAPI
  • 能够使用顶层 await
  • 热更新

Elysia

Elysia 是一个基于 Bun 运行时的 Web 框架。
官网地址:https://elysiajs.com/

Performance

// node-server.js
import http from "http";
const hostname = "localhost";
const port = 3000;

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

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/ by Node.js`);
});
// bun-server.js
// 在 Bun 这个运行时里面,内置了一个全局的对象叫做 Bun
// 这个对象里面有一些全局的方法,比如说 Bun.serve
// 该方法就是创建一个服务器

const server = Bun.serve({
  port: 3001,
  fetch() {
    return new Response("Hello World!");
  },
});

console.log(`Server is running at http://localhost:${server.port} by Bun`);
// test_node.js
import fetch from "node-fetch";

let count = 1000; // 要发送的请求数量,初始化为 1000
const start = Date.now(); // 开始时间
let err_count = 0; // 错误数量

async function runTest() {
  while (count > 0) {
    try {
      const res = await fetch("http://localhost:3000");
      await res.text();
      count--;
    } catch (err) {
      err_count++;
    }
  }

  const end = Date.now(); // 结束时间

  console.log(`花费时间为:${end - start}ms`);
  console.log(`错误数量为:${err_count}`);
}

runTest();
// test_bun.js
import fetch from "node-fetch";

let count = 1000; // 要发送的请求数量,初始化为 1000
const start = Date.now(); // 开始时间
let err_count = 0; // 错误数量

async function runTest() {
  while (count > 0) {
    try {
      const res = await fetch("http://localhost:3001");
      await res.text();
      count--;
    } catch (err) {
      err_count++;
    }
  }

  const end = Date.now(); // 结束时间

  console.log(`花费时间为:${end - start}ms`);
  console.log(`错误数量为:${err_count}`);
}

runTest();

Result

标签:count,const,err,res,notes,js,Bun
From: https://www.cnblogs.com/Answer1215/p/18565924

相关文章

  • Ubuntu20.04换源换回默认源
     在Linux(以Ubuntu为例)下,换回默认软件源主要涉及恢复/etc/apt/sources.list文件中的内容。以下是具体步骤:1.备份当前的源文件在修改之前,建议先备份当前的sources.list文件:bash复制代码sudocp/etc/apt/sources.list/etc/apt/sources.list.backup2......
  • VMware 安装ubuntu 挂载共享目录
    开机界面点击虚拟机“重新安装vmtools” 修改root密码sudopasswdroot关闭防火墙ufwdisable安装ssh sudoapt-getinstallopenssh-server创建目录sudomkdir/mnt/hgfs输入以下命令,如果输出了我们一开始创建的共享文件夹,那......
  • Unity资源打包之Asset Bundle
    AssetBundle的作用:1.AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载;2.AssetBundle自身保存着互相的依赖关系;3.压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;4.把一些可以下载内容放在AssetBundle里面,可以......
  • Ubuntu20.04换源
    参考链接:https://midoq.github.io/2022/05/30/Ubuntu20-04%E6%9B%B4%E6%8D%A2%E5%9B%BD%E5%86%85%E9%95%9C%E5%83%8F%E6%BA%90/更换方法Ubuntu采用apt作为软件安装工具,其镜像源列表记录在/etc/apt/source.list文件中。首先将source.list复制为source.list.bak备份,然后将source.......
  • 蓝易云 - Ubuntu安装Net-tools和SSH
    在Ubuntu上安装Net-tools和SSH是常见的操作。下面是一个简单的教程:安装Net-tools:打开终端,并使用root权限登录到Ubuntu。运行以下命令以安装Net-tools:apt-getupdateapt-getinstallnet-tools​安装完成后,Net-tools的命令(如ifconfig、netstat等)将可用于网络配置和监控。......
  • Ubuntu超级终端Terminator使用教程
    Ubuntu超级终端Terminator使用教程yyxchina已于2024-11-2310:34:41修改阅读量96收藏7点赞数3公开文章标签:ubuntulinux运维编辑版权Ubuntu超级终端Terminator使用教程安装terminator(ubuntu上超好用的终端)超级终端Terminator简介1、简介ubuntu系统下,由于使用需求,往往需要......
  • Windows使用ssh免密登录Ubuntu系统
    1.在Ubuntu系统中配置SSH服务(使用付费或实验室服务器一般不用这一步前人已经栽好树了)首先要确保Ubuntu系统安装并开启了SSH服务。如果没有安装,可以通过以下命令在终端中进行安装:sudoaptupdatesudoaptinstallopenssh-server#安装完成后,检......
  • Ubuntu虚拟机&conda虚拟环境运行和打包引入SimNIBS软件包的python项目文件
    项目背景:项目是python代码写的,其中有一个模块SimNIBS不能通过pip安装,需要自己下载软件包,在Ubuntu虚拟机的虚拟环境中运行和打包。下面是整个流程和遇到的一些问题,写下来做个记录。(默认此时SimNIBS已经安装好了,还没安装好的话,参见文章Ubuntu虚拟机安装医学影像软件包SimNIBS及报......
  • 新安装的Ubuntu20.04 系统没有声音怎么办?
    问题描述:新安装的Ubuntu20.04系统没有声音怎么办?问题解答:第一步,下载pavucontrol音频播放工具。sudoaptinstallpavucontrol第二步、设置工具。首先在配置里面将HDANVidia设置为关闭。(我的ubuntu安装时候汉化了,所以软件也是汉语,有的人可能是英文的)。其次,将内置音频......
  • 职业技能大赛—物联网应用开发赛项(Ubuntun_Linux)精华笔记 (03)
    MySQL中的show各种查看命令介绍//全局变量在MySQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改。//MySQL中的show各种查看命令介绍是必须了解的Mysql基础操作还请您认真看下去 1.使用show查看showtables或showtablesfrom......