Bun vs Node Benchmark – CI ほどダーツを気にする人はいない Posted on March 5, 2023 By 📢 Medium™ グリフェル Solar Mar 05 • 4 分学習ベンチマーク早めに 気にしないスループット ベンチマーク 。 何年もの間、私は Ruby On Rails を使ってきましたが、これは事実 slack でした。 おそらく最も遅い。 単一のreq/s の競合他社を引き分けませんでした作成されて以来。 それでも構わなかった。 とにかく、私が構築した従来の Web アプリで必要とされる時間の多くは、IO に費やされていました。 ボトルネックは IO ではありませんが、CPU/RAM に余分なお金を継続的に投入することになります。 Railsエコシステムの出入り口からコードを書くよりも、ハードウェアを入手する方が安上がりでした。 周辺の設備や周辺は、信じられないほど多くの面で安らぎがありました.開発ベンチマークがあったのに Ruby のおかげで夢中になりました。 まったく新しいモデルのアプリをどのくらいの速さでデプロイできますか? 2 分または 20 分増えますか? スイートの試用版をどのくらいの速さで進めることができますか? 10秒か数分? TypeScript と NestJS に移行した後、これらの速度が大幅に低下したことに気付きました。 これは、エコシステムの明示的なシェアを言葉で表すものではありません。 近隣の事実を評価し、さまざまな問題を最適化します。 そして、それはまぶしいです。 でも嘘は言いません、ちょっとガッカリしましたBunBunはすべてのピースを変更しますTSスタックのフレーズで、下に私の開発ベンチマークの結果を表示します バックエンド プロジェクトに従事しているときに、従来のワークフローを再現しようとしています。 BunとNodeJSを比較してみますTest Intention次のような CI パイプラインを高速化します:ランタイム(node/bun)の設定 )依存関係をインストールします (pnpm / bun) (tsc —noEmit) をご覧ください 速度テスト (100 テイク) a look at files x 各 10 テスト – 全体で 1000 テスト、それぞれ spawns サーバーを調べ、SQLite データベースと対話するリクエストをほとんど作成せず、その後サーバーをシャットダウンします。発明アプリ(buildx)を進める状況のDockerイメージイメージを GitHub Container Registry にプッシュする )テストシチュエーションデフォルトのGitHub Actionsの雰囲気。 基本的に現在の開発者のベテランで最も総合的な雰囲気だと思いますすべての危険は10ケース実行されます.結果ベンチマークは考慮事項 2 シナリオ。 と および なし 依存関係の変更。 この 2 つは、全体的にダーツが異なるため、大きく変動します。 冷ややかな展開は、プロジェクト全体のある段階で一度発生するため、完全に削除しました.1. オファーコードの変更この危険性は、ランダムなオファー コード ファイル内の 1 行の切り替えが事実です.時間(秒)ぶんノード平均 35107ミン1986 マックス48 134一般的な事実として、Bun が平均して 3x より早いパイプライン.時間(秒)ぶん ノードまとめて8 20設定1 1TypeCheck2 2テスト 360Docker を発明してプッシュする10 20他の 5329106ステップごとに詳細な事実を発見することで、実行間に複数のバリエーションがあることを確認することができます.まずは準備 は よりも大きくなります*) 2 倍 キャッシュ ディメンションの記録上のノードでの時間。 動機によっては、Setup Node GitHub アクションの事実は非常に時間を浪費する傾向があります。 セットアップには、すべてがキャッシュされるのと同じ時間がかかります。 TypeChecking は明示的に同じです。 チェックアウトを伴う場合おまんじゅうぶっ飛ばす vitest この上で危険。 いくらテストしても爆速 😄。 まるで 100 ではなく 3 つのテストがあったかのようです。自分のコードに間違いがないかどうかもチェックしました。 いやいや、そんな速いのは事実ですDockerのビルドとプッシュは、2 つの異なる画像を紹介しないため、パンで非常に早くなる可能性があります。 コードは事実上そのまま実行されるため、構成ステップはありません。 おそらく、私のアプリに、リソースなどをコンパイルすることを愛するさらなる構築ステップがあれば、タイミングが近づくでしょう.その他は、おそらく上記にリストされていないさまざまな手順の合計であり、キャッシュの保存が大好きです。 実質的な違いではありませんが、確かにそこは落ち着きますね2. 依存関係の変更今回は、アプリに新しい依存関係を 1 つ追加します。 時間(秒) ぶんノードNode WNL*平均40305 143 ミン 27 258135マックス50329 155*ノード WND - ネイティブ ライブラリのないノード平均してブンの時間はあまり切り替わりませんでした。 球面 5秒 平均して増幅します。 あなたのアプリが多くの依存関係を好まない場合、Bun で多くを置き換えることはありません。ノードでは、パイプラインが大幅に遅くなりましたが。 主な動機は、1 つのネイティブ ライブラリの存在です:higher-sqlite3 。 その配置には、slacで最大60秒かかります k GitHub Actions ランナー。 3 つのケース (パイプライン、docker 構成イメージ、docker 進行イメージ) を実行すると、かなりの時間がかかります。 このライブラリをドロップした場合、スイッチはおそらく小さくなり、毎日は 143 秒から 305 秒に増幅されます。スムーズ パイプラインは、オファー コード スイッチの対応物よりも約 30 秒遅くなります。依存関係ツリーが成長します。 パイプラインの他の部分は切り替えられませんでした.これは何を意味するのでしょうか?霧吹きで! かなりの循環があり、TS での開発者の乗り心地がどんどん上がっていることに、私はとてもくすぐられています。 Bun が費やす新しい楽器のロング ダートの可能性は無限大です。 そこから何が届くのか、私は狂っています。 ベンチマークを気にしない人々にとっても、Bun メンテナーによって完成された作業を大幅に削除することは、記念碑的な前進です! ベンチマーク付きレポ我慢が好きだったら、次のことも学ばなければなりません: ←あなたがしようとしているプロジェクトに貢献する'についての信念は好きではありません)フォーカスオン 𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺 Artificial intelligence, Ask HN, Benchmark, cares, Show HN, Technology, TOP HN Tags:Benchmark, cares, Show NH: