12 ポイント 投稿者 sftblw 2024-08-19 | 9件のコメント | WhatsAppで共有

Misskey (GeekNews) は、ActivityPub連合をサポートするマイクロブログサーバープログラムです。Misskey は主に日本で開発されており、絵文字リアクション、独自マークアップである MFM、キーワード追跡(アンテナ)、プロフィール装飾、独自スクリプトである AiScript を使ったインタラクティブページの作成、ミニゲームなど、楽しい機能が多く、面白さを求めるユーザーに人気のあるプラットフォームです。

Misskey の技術スタックは、私の知る限り次のとおりです。(間違っているかもしれません。)

  • NodeJS, TypeScript
  • Koa.js, PostgreSQL, Redis
  • Vue

この記事では、Misskey のメンテナーである syuilo(シュイロ)氏が、NodeJS と比較したときの Bun の性能を Misskey のソースで検証しています。

  • 既存のソースをそのまま Bun で動かしたときに速くなるのか? をテストすることを目的としています。記事では Bun 向けの最適化は別途行っておらず、互換性のないコードが複雑な場合はテストを実施しなかったと明かしています。
  • 記事には、あくまでひとつの事例として見てほしいという注意書きがあります。
  • Ubuntu でのテストでしたが、Windows でも大きな差はなかったとのことです。

結論から言うと、この事例では Bun でむしろ性能が低下する傾向が目立ちました。既存の大規模なソースを Bun で実行したからといって、魔法のように速くなるとは言えない……というのが結論のようです。ChatGPT が要約した内容は次のとおりです。

  • メモリ使用量: Node 約 200MB、Bun 約 800MB で、Bun のほうがはるかに多くのメモリを消費。
  • 実行速度: タイムライン取得のようなさまざまな処理で Node のほうが速い結果を記録。特に、投稿作成時は Node が 5 秒、Bun が 10 秒で、Node が 2 倍速い。
  • AiScript: 純粋な JavaScript コード実行では Node(V8 エンジン)が約 1.5 倍速い。

記事にはコードベース各部分の実行ベンチマークが掲載されていますが、WebSocket の 1 回限りの実行を除いては、すべて NodeJS のほうがわずか、または大きな差で速い結果を示しました。WebSocket 実行の場合も、10 万回実行時には NodeJS がわずかに速い結果を示しました。

ただし、記事執筆者の syuilo 氏は Bun の発展可能性に引き続き期待しており、追加の最適化によって性能が向上する可能性にも触れています。

9件のコメント

 
nxhtk 2024-08-19

単純に置き換えて動かす場合、node:cryptozlib 関連のライブラリのように、bun のドキュメントや issue にも明記されている、まだ最適化が不十分なケースもあります。

例の中で 5 秒が 10 秒になるほど遅くなったのであれば、おそらくこうした部分ではないかと思います。実際、私も jwt 関連のライブラリでこの問題のせいで数倍遅くなったことがあり、ライブラリを変更して最適化する必要がありました。

 
savvykang 2024-08-19

日本語の技術ブログ記事をどこから持ってきているのか気になります。体系的で要点が押さえられている感じがするので。

 
tribela 2024-08-20

ほかの記事は分かりませんが、この記事はMisskeyに投稿されていたため、Fediverseで受け取ることができました(私もそこで先に見て、その後ここに上がっているのを見ました)

 
bus710 2024-08-20

本文の出典はよく分かりませんが、Qiita には良い記事がたくさん投稿されているようです。
英語圏や韓国のブログとは異なる視点で分析した記事を翻訳して掲載している方々が複数のチャンネルにいますが、おおむね Qiita の記事を翻訳したという共通点がありました。

 
savvykang 2024-08-21

Google検索のオートコンプリートで、キタとzennを比較する検索語を勧めてくれたおかげで、zennも見つけることができました。情報ありがとうございます。

 
uyeong21c 2024-08-20

Qiitaは「キータ」と読みます。

 
bus710 2024-08-20

あっ、そうなんですね……気まずいです

 
tsboard 2024-08-19

とても興味深い結果です。Bunの場合、WebフレームワークとしてElysiaJSがよく推奨されますが、Bunが提供する最適化されたAPIを使わないと、かえってパフォーマンスが低下する問題がありました。Koa.jsを使用したとありますが、そのあたりでパフォーマンスがかなり落ちたものと推測されます。

 
cometkim 2024-08-19

ランタイムとシステム統合の違いを分けて見る必要があると思います。

Bun が誇る性能は、全体的には JSC の特性と、一部のシステム統合の最適化(または機能縮小)、優れた基盤ライブラリの選択に起因しています。

そのため、小規模なベンチマークでは Bun が勝つ傾向がありますが、大規模・長時間実行のベンチマークでは Node.js に押される傾向も同時にあります。