ネットパック

Mary-Kate Olsen
リリース: 2025-01-10 08:29:43
オリジナル
819 人が閲覧しました

これは短い投稿になります...しかし、できれば長い投稿をフォローしていただければ幸いです。

冬休み中に、ある実験をする時間がありました。

C#/.NET を使用して作成された Web ツールは、Rust / Go / Zig と同等のパフォーマンスを実現できますか?

そこで、コーディングを行いました...(GitHub で見つけることができます)

プロセス

私は大まかなバンドラー ロジックから始めました:

  • ファイルを開く
  • コンテンツを読む
  • 正規表現を使用して、JS ファイル内の import ステートメントなどを検出します
  • リンクされたモジュールを解決する
  • 解決済み/既存の package.json ファイルを開いてモジュール パスを特定します

結果は簡単でした。AoT (事前コンパイル) を使用すると、.NET はパフォーマンスの高い Web プロジェクトに確実に使用できます。

そこで私は実験を少し続けました。正規表現を実際のコードの理解に置き換えます。

TLDR;結果

答えは「はい」です。 ?

バンドラーは現時点では機能が不完全ですが、最初の結果は非常に強力です。 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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート