Bun と Node.js の比較

Bun と Node.js の比較

ブンを知っていますか?Bun は、Node.js よりも優れていると主張して、最近テクノロジーの世界で話題になっている新しい JavaScript ランタイムです。この記事では、ベンチマークスコアを使用してテストする方法を説明します。

この記事では、最近テクノロジー業界で話題になっている新しい Bun ランタイムについて見ていきます。ランタイムの機能と、一部の開発者が Bun に切り替える理由について説明します。また、Bun チームが主張するように、Bun が実際に最速の実行時間を実現しているかどうかを確認するために、いくつかのベンチマークを実行します。

ランタイムとは何ですか

大きなレゴの箱があり、クールな宇宙船を作りたいと想像してください。部品を組み立てる方法についての説明書はすべてありますが、実際に宇宙船を組み立てて機能させるには何かが必要です。ここでランタイムが登場します。ランタイムは、レゴ宇宙船の構築と実行を担当する特別なアシスタントのようなものです。これは、すべての部品が正しく組み合わされていることを確認し、クラフトが本来の動作を確実に行うための手順です。

ランタイムに指示を与えると、ランタイムは指示を段階的に読み取り、正しい位置にレゴ ブロックを配置し始めます。指示に正確に従い、すべての部品が正しく接続され、すべてが正しい順序で行われたことを確認しました。宇宙船が構築されると、ランタイムもその仕事を引き受けます。船に電力を供給し、エンジンを作動させ、船のすべての機能を制御します。これは宇宙船内の小さなコンピューターのようなもので、すべてのコマンドを実行し、すべてがスムーズに実行されるようにします。

プログラミングの世界でも、ランタイムは同様です。これは、他のプログラムの実行を支援する特別なプログラムです。プログラムの命令を読み取り、それを段階的に実行し、すべてが期待どおりに動作していることを確認します。つまり、レゴ宇宙船を組み立てるアシスタントのように、ランタイムは他のプログラムを正しく構築して実行するのに役立つ特別なプログラムです。スマートアシスタントのように機能し、レゴ宇宙船に期待されるように、すべてがスムーズに進むようにします。

JavaScript ランタイム

JavaScript ランタイムは、JavaScript とコンピューター間のトランスレーターのように機能します。2 つの数値を加算するなど、JavaScript に何かを行うように指示すると、ランタイムは要求を聞いて理解します。次に、指示を受けて、理解できる言語でコンピューターと通信します。

ランタイムは他の重要なことも処理します。これにより、JavaScript がルールに従って間違いを犯さないことが保証されます。教師が生徒が課題を正しく完了しているかどうかを監視するのと同じように、JavaScript の実行を監視します。

ランタイムがコンピューターと通信して結果を取得すると、それを JavaScript に返します。これは、ランタイムが JavaScript に答えをささやき、JavaScript がその答えを使って何かを実行できるようなものです。おそらく、答えを画面に表示したり、クールなアニメーションを作成するために使用したりします。

ブンとは

Bun は、 Zigプログラミング言語を使用してゼロから構築された JavaScript ランタイムで、高速な起動、効率的なコード実行、より優れた開発者エクスペリエンスに焦点を当てています。JavaScript アプリケーションの開発を最適化および簡素化するツールと機能を提供し、既存の JavaScript エコシステムと互換性があるように設計されています。

ブンにやってほしいことを伝えると、ブンは注意深く聞いてくれます。JavaScript と呼ばれる特別な言語で書かれた命令を受け取り、ステップごとに実行を開始します。車に行きたい場所とそこへの行き方を伝えるようなものです。しかし、Bun は JavaScript を理解しているだけではなく、JavaScript コードを高速に実行することにも優れています。それは、車のエンジンが道路を走っている他のどの車よりも速くなるようなものです。

Bun は、Zig と呼ばれる特別なプログラミング言語を使用して構築されています。Zig は、Bun を作成した人が非常に効率的かつ迅速にそれを構築できるようにする魔法のツールのようなものです。Bun を使えば、さまざまなことができます。非常に迅速かつスムーズに動作する Web サイトやアプリケーションを構築できます。また、コマンド ライン インターフェイスを使用して JavaScript および TypeScript ファイルを実行したり、コードをバンドルしたり、プロジェクトの依存関係を管理したりすることもできます。

なぜバンの方が速いのか

Bun は、いくつかの重要な要因により驚くべき速度で実行されます。

  • **軽量設計**: バンズは軽量になるように設計されており、その結果、コード ベースが小さくなり、必要なリソースが少なくなります。この最適化された設計により、Bun は他のランタイムと比較して速度とメモリ使用量の点で優れたパフォーマンスを提供できます。
  • **基本的な実装**: Bun ランタイムは、比較的新しい低レベル プログラミング言語である Zig を使用して構築されています。Zig の機能により、開発者はメモリ管理と実行をきめ細かく制御してコードを作成でき、実行時の効率が向上します。
  • パフォーマンスの最適化: Bun は V8 エンジンに依存せず、WebKit の JavaScriptCore を使用しており、その優れたパフォーマンスは広く認識されています。このコア エンジンを活用することで、Bun は JavaScript コードの実行が最適化され、実行速度が向上します。
  • 統合された機能: Bun は、開発プロセスを簡素化するネイティブ ツールと機能を提供します。これには、Webpack などの外部ツールの必要性を置き換える組み込みバンドラーと、TypeScript コードの直接記述をサポートするネイティブ トランスパイラーが含まれています。さらに、Bun には Jest に似たテスト ランナーが統合されており、dotenv などの追加パッケージをインストールすることなく、環境変数を自動的に読み込むことができます。

Bun ランタイムをインストールする

Bun をインストールするには、次の手順に従います。 コンピュータのターミナルまたはコマンド プロンプトを開きます。ターミナルに次のコマンドを入力します。

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

このコマンドは、Bun 公式 Web サイトからインストール スクリプトをダウンロードすることにより、Bun のインストール プロセスを開始します。Enter キーを押して、インストール スクリプトの実行を許可します。Bun とその依存関係をシステムにインストールするために必要な手順が処理され、インストールが完了するまで待ちます。このスクリプトは、Bun がコンピュータに正しくインストールされていることを確認するために必要なタスクをすべて処理します。

バンVSノード

このセクションでは、Bun と Node を比較し、2 つのランタイム間でいくつかのベンチマークを実行します。

  1. パフォーマンス: Bun は、速度で知られる WebKit の JavaScriptCore エンジンを活用して、起動時間と実行時のパフォーマンスの高速化を重視しています。対照的に、Node.js は 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 Labs のオープンソース ツールk6を使用します。このツールのインストール ガイドは、ここで見つけることができます

コードとして、Bun および Node.js 公式 Web サイトから簡単な HTTP サーバー コードを取得しました。以下はBun and NodeのHello Worldのコードです。

  1. ノード
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

ノードサーバーはポートhttp ://localhost:3000/で実行されます。

  1. バン
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

ノードサーバーからの結果は次のとおりです。

画像.png

Bun サーバーからの結果は次のとおりです。

画像.png

Bun と Node の速度を確認して比較できるようになりました。さらに一歩進めたい場合は、さまざまな遅延、より多くのユーザー、および継続時間をスクリプトに導入できます。

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

まとめ

要約すると、Bun と Node.js は、開発者に異なるメソッドと機能を提供する 2 つの JavaScript ランタイムです。Bun は、高速な起動時間、最適化されたパフォーマンス、パッカーやトランスパイラーなどの統合ツールを提供する軽量設計に重点を置いています。WebKit の JavaScriptCore エンジンを活用してパフォーマンス目標を達成します。一方、Node.js には、より大規模なエコシステム、広範なコミュニティ サポート、および複数のプログラミング言語との互換性があります。V8 エンジンに依存し、豊富なサードパーティ ツールとライブラリを提供します。Bun と Node.js のどちらを選択するかは、パフォーマンス要件、特定のプロジェクトのニーズ、適切なツールの可用性、コミュニティ サポートなどの要因によって異なります。最終的に、開発者は各ランタイムを活用して、堅牢で効率的な JavaScript アプリケーションを構築できます。

おすすめ

転載: blog.csdn.net/p1967914901/article/details/131290932