10月10日、Daniel Lemireが「WebSocket servers in JavaScript: Node.js, Bun and Deno in 2026」と題した記事を公開した。Node.js・Bun・Denoの3つのJavaScriptランタイムにおけるWebSocketサーバーの実測パフォーマンスを比較した内容だ。
結論から言えば、Node.js 26 + uWebSockets.jsが49,000 round trips/秒を記録し、BunとDenoの組み込みWebSocket実装を大きく上回った。Lemire自身が以前の計測で「Bunの方がNode.jsより速い」という結果を出していた経緯があるだけに、今回の覆し方は興味深い。その差は計測バグに起因しており、修正後の正確な計測ではNode.jsが首位に立っている。
前回の計測にはバグがあった
LemireはかつてBunがNode.jsを大きく上回るという結果を出していた。しかし今回の記事では、その計測に問題があったことを明かしている。Bunサーバーがメッセージを送信者に送り返すバグがあり、4メッセージ分の処理が2メッセージ扱いになっていたのだ。今回はクライアントをC言語で書き直し、計測精度を大幅に改善している。
テストのシナリオはシンプルなping-pong方式だ。クライアント1がサーバーにメッセージを送り、サーバーがクライアント2に転送、クライアント2が返答し、サーバーがクライアント1に転送する——この1往復を「1 round trip」とカウントする。テスト環境はIntel Xeon Gold 6548N(Emerald Rapids)搭載のLinuxサーバーで、サーバーはシングルコアに制限し、クライアントは別コアで動作。ベンチマークは3回繰り返し、結果は数パーセント以内で安定していた。
各ランタイムの組み込みAPIで比較
各ランタイムの組み込みWebSocket実装と、参考値としてC製リレーサーバーを並べた結果が以下だ。
| サーバー | round trips/秒 | 中央値 (µs) | 99パーセンタイル (µs) |
|---|---|---|---|
| C relay(参考値) | 54,000 | 18.4 | 23.0 |
| Node.js 26 + uWebSockets.js | 49,000 | 20.4 | 24.8 |
| Deno 2.9.7 + Deno.serve | 40,000 | 25.0 | 32.0 |
| Bun 1.4.2 + Bun.serve | 37,000 | 26.8 | 46.4 |
uWebSockets.jsはC++で実装されたNode.js向けネイティブアドオンだ。Node.jsは標準でWebSocketサーバー機能を内蔵していないため、実運用ではuWebSockets.jsや後述のwsパッケージといったサードパーティライブラリを組み合わせるのが一般的となっている。今回の結果では、Node.js + uWebSockets.jsはCのリレーサーバーとの差がわずか10%程度であり、JavaScriptサーバーがネイティブ実装に肉薄できることを示している。
注目すべきはBunの99パーセンタイルが46.4µsと、中央値(26.8µs)の約1.7倍に跳ね上がっている点だ。スループットだけでなく、レイテンシの安定性という観点でもNode.jsが優位にある。
wsパッケージで横断比較
次に、3ランタイム全てで同一のwsパッケージ(v8.22.0)を使った場合の比較だ。
| サーバー | round trips/秒 | 中央値 (µs) | 99パーセンタイル (µs) |
|---|---|---|---|
| Node.js 26 + ws | 45,000 | 21.7 | 31.5 |
| Bun 1.4.2 + ws | 41,000 | 22.5 | 36.9 |
| Deno 2.9.7 + ws | 34,000 | 29.6 | 45.9 |
順位はNode.js → Bun → Denoと変わらない。興味深いのはBunでwsパッケージがBun.serveを上回る(41,000 vs 37,000)点だ。組み込みAPIよりサードパーティライブラリの方が速いという逆転現象が起きており、Bunの組み込みWebSocket実装にまだ最適化の余地があることを示唆している。DenoはDeno.serveの方がwsより速く、組み込みAPIを活用するのが素直な選択と言えそうだ。
背景:企業買収で変わるランタイム競争
Lemireはベンチマーク改訂の背景として、業界の変化にも言及している。記事によれば、AnthropicがBunを買収し、CloudflareがDenoを買収したという。両社ともエッジコンピューティングやAI推論ワークロードへの活用を見据えた動きとみられる。
Bunはもともと高速起動・高速I/Oを売りにしており、AI推論のサービング用途との親和性が高い。DenoはセキュリティモデルとWeb標準への準拠を強みとしており、Cloudflare Workersとのエコシステム統合が期待される。JavaScriptランタイムの競争は、OSSコミュニティ主導の争いから、大企業の戦略的な技術基盤争いへと様相を変えつつある。
こうした背景を踏まえると、今回のベンチマークはOSSコミュニティの知的好奇心にとどまらず、各プラットフォームの実用性を判断する材料としても意味を持つ。ベンチマークのソースコードは元記事で公開されており、自環境での再現も可能だ。
詳細はWebSocket servers in JavaScript: Node.js, Bun and Deno in 2026を参照していただきたい。