Node.jsとDenoをパフォーマンスで凌駕する新世代のjavaScriptランタイム-Bun.js

今日は、最新のオープンソース javaScript ランタイムを紹介しますBun.js

image.png

image.png

26.1k 1か月足らずでスターを獲得しました ! との大きな競争相手になるよう Node.js です! Deno

Node.js 従来の ランタイム とは異なりjavaScript 、Bun.js パッケージャー、トランスパイラー、タスクランナー、 npm クライアントは直接組み込まれているため 、必要なくWebpack/Rollup/esbuild/Snowpack/Parcel/Rome/swc/babel 直接実行でき ますTypeScript、JSX

さらに、約 (  など)の関数を含め  、 Bun.js 数百の合計がネイティブにサポートされています  。Node.jsWeb API90%Node-APIfs、path、Buffer

Bun.js 目標は、ブラウザの外部で世界のほとんどを実行 JavaScriptし、将来のインフラストラクチャにパフォーマンスと複雑さの強化をもたらし、より優れた、よりシンプルなツールで開発者の生産性を向上させることです。

パフォーマンスはどうですか?

サーバー側レンダリング:  1秒あたりに処理されるHTTP リクエスト

image.png

巨大なテーブルの読み込み sqlite :1秒あたりの平均クエリ

image.png FFI:1秒あたりの操作数

image.png

なぜそんなに速いのですか?

また Node.js、Deno 、エンジンにBun.js 基づくものではなく V8 、エンジンを直接選択し、  他の従来のエンジンよりもJavaScriptCore 実行速度が速くなる傾向 があります。V8

また、Bun.js 手動のメモリ管理、メモリの低レベル制御、隠された制御フローのない低レベルプログラミング言語で記述されていること ZIG は、おそらくその非常に優れたパフォーマンスの秘訣です。

Bun.js 的大部分内容都是完全从零开始编写的,包括 JSX/TypeScript 转译器、npm 客户端、打包器、SQLite 客户端、HTTP 客户端、WebSocket 客户端等等。

有哪些能力?

  • Web API:对 fetch、WebSocket、 ReadableStream 等 API 都提供了内置支持
  • Node.js 模块:Bun 实现了 Node.js 的模块解析算法,同时支持 ESM 和 CommonJS,但 Bun 内部使用 ESM
  • 支持转译大量文件类型,你可以直接运行 TypeScript、JSX,甚至支持各种 tsconfig.json 中的配置。
Input Loader Output
.js JSX + JavaScript .js
.jsx JSX + JavaScript .js
.ts TypeScript + JavaScript .js
.tsx TypeScript + JSX + JavaScript .js
.mjs JavaScript .js
.cjs JavaScript .js
.mts TypeScript .js
.cts TypeScript .js
.toml TOML .js
.css CSS .css
.env Env N/A
.* file string
  • Bun.write 使用最快的系统调用,实现写入、复制、管道、发送和克隆文件。
  • 自动加载环境变量 .env 文件,不需要再 require("dotenv").load()
  • 附带一个内置的快速 SQLite3 客户端 bun:sqlite
  • Bun.js 实现了大部分 Node-API (N-API),大部分 Node.js 原生模块都可以正常工作。
  • bun:ffi 可以使用低成本的外部函数接口从 JavaScript 调用本机代码(据测试比 napi 快 5 倍 、比 Deno 快 100 倍)

image.png

  • 増え続ける コアモジュールのリストと、 および Node.js などのグローバル変数の ネイティブサポートBufferprocess

それを試してみてください

インストール Bun CLI

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

BunHTTP サーバーは 、次 の  ような  標準に基づいてRequest 構築さ れています。ResponseWeb

// http.js
export default {
  port: 3000,
  fetch(request) {
    return new Response("Hi, ConardLi!Welcome to Bun!");
  },
};

bun で実行し ます:

bun run http.js

次に、ブラウザで開きます http://localhost:3000

CLIコマンド:: スクリプト と  ファイル およびファイル は bun run直接実行できます 。JavaScriptTypeScriptpackage.jsonscripts

テストによると、スクリプトのbun 実行 はスクリプトの 実行 package.json よりも  30倍高速です。npmpackage.json

CLIコマンド::bun install互換性 npm のあるパッケージマネージャー。最速のシステムコールを使用してファイルをコピーします。

image.png

テストによると、bunはnpmの20倍の速さでパッケージをインストールします。

CLIコマンド:: ビルトイン  および  プロジェクト用bun wiptestの同様の Jest テストランナー 。bunJavaScriptTypeScript

このようなbunjsは、置換ノードのメンバーになることが期待されます。

おすすめ

転載: juejin.im/post/7121179240032108581