これは短い投稿になります...しかし、できれば長い投稿をフォローしていただければ幸いです。
冬休み中に、ある実験をする時間がありました。
C#/.NET を使用して作成された Web ツールは、Rust / Go / Zig と同等のパフォーマンスを実現できますか?
そこで、コーディングを行いました...(GitHub で見つけることができます)
私は大まかなバンドラー ロジックから始めました:
結果は簡単でした。AoT (事前コンパイル) を使用すると、.NET はパフォーマンスの高い Web プロジェクトに確実に使用できます。
そこで私は実験を少し続けました。正規表現を実際のコードの理解に置き換えます。
答えは「はい」です。 ?
バンドラーは現時点では機能が不完全ですが、最初の結果は非常に強力です。 README に示されているベンチマークは、パフォーマンスが他のツールと間違いなく同じ程度であることを示しています。とても速いです。
個人的には、C#/.NET は Rust よりもはるかに複雑ではなく、Go よりも強力だと思います。それにはいくつかの欠点もあります - 嘘は言えません。
その分野で C#/.NET が実行できる主な理由は AoT です。 AoT がないと、起動時のパフォーマンス (および実行時の要件) がアイデア全体を台無しにしてしまいます。
一方、AoT にはいくつかの課題があります。一部のライブラリは使用できないか、統合するために何らかの作業が必要です。したがって、.NET の柔軟性の一部は使用できません。
rspack などのツールでも使用される最大のテスト プロジェクトでは、次の結果が得られます。
バンドラーは機能が不完全であっても、プロジェクトで有効な結果を生成するには十分に作成されていることに注意してください。したがって、現時点ではすべての結果が暫定的なものであっても、少なくともある程度の妥当性はあります。
Test | esbuild | rspack | Vite | ネットパック |
---|---|---|---|---|
Small lib | 326ms | 611ms | 601ms | 359ms |
Small project | 670ms | 912ms | 1658ms | 418ms |
Medium project | 1931ms | 2877ms | 10601ms | 974ms |
Large project | 2189ms | 2422ms | 13710ms | 1357ms |
そうです、ネットパック はすでに競合他社に勝っており、さらにパフォーマンスが向上する可能性さえ持っています。さらに最適化することはできますが、ソースマップやツリーの揺れなどが導入されると、パフォーマンスがいくらか低下します。現時点では、潜在的な最適化 (JS AST 世代でのストリーミングなど) により、合計では現在とほぼ同じになるはずだと確信しています。
現時点での最大のハードルは、JS(X) のみをサポートしており、TypeScript はまだサポートしていないことです (これらのファイルを解析しようとしますが、型が使用されると失敗します)。サポートするのは「かなり」簡単ですが、そのためには Acornima をフォークする必要があり、それはプロジェクトの周りで十分な話題があった場合にのみ行います。
これに取り組むと素晴らしいことが他にもたくさんあります。ただし、最初にいくつかの基本をクリアする必要があります。ソースマップ、TypeScript のサポート、あるいは構成システムなどがあれば、素晴らしいでしょう。
この実験には、他のバンドラーが行わないことがいくつかあります。たとえば、HTML エントリ ポイントに importmap がある場合、importmap 内のエントリは自動的に 外部として取得されます。同様に、特定の依存関係を共有として設定できます。この場合、インポートマップ エントリ/インポートマップが結果の HTML 内に自動的に作成されます。とてもきれいです。
将来的には、バンドラーは SASS、CSS モジュール、CSS-in-JS、さらにモジュールフェデレーションとネイティブフェデレーションをネイティブ (つまり、すぐに使える) サポートする予定です。
どう思いますか?これは実行可能なアイデアだと思いますか、それとも単なるゴミだと思いますか?適切なデフォルトを備えた高速な .NET ネイティブ バンドラーは必要ですか?
以上がネットパックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。