BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Parcel 2: Rustベースの10倍高速なJavaScriptコンパイラ、モジュラー構成、差分バンドリング

Parcel 2: Rustベースの10倍高速なJavaScriptコンパイラ、モジュラー構成、差分バンドリング

ブックマーク

原文(投稿日:2021/09/16)へのリンク

ゼロ構成バンドラ Parcel の背後にあるチームは、先頃、最初の Parcel 2 のリリース候補を発表した。Parcel 2 は、3年以上の歴史を持つ Parcel を一から書き直したものだ。Parcel の新しい JavaScript コンパイラは Rust で記述されており、10倍ビルドパフォーマンスが向上している。Parcel 2 は完全に拡張可能で、自動差分バンドリングなどをサポートする。

チームは、JavaScript コンパイラの書き換えの背後にある理論的根拠を次のように説明した:

[他のバンドルステージ]の最適化は大きく進歩しましたが、JavaScript のコンパイルは依然として Parcel の中で最も遅い部分でした。
特に、スレッド間で送信する大きな JavaScript AST のシリアル化は非常に遅く、これらの大きなオブジェクトは JavaScript のガベージコレクターに大きなプレッシャーをかけました。また、JavaScript コードは、実行するたびにエンジンでコンパイルする必要があるため、起動に時間がかかります。アルゴリズムの複雑さを改善すると、言語に関係なくパフォーマンスが向上しますが、それはこれまでのところわずかにしかできていません。

したがって、Parcel チームは swc コンパイラを活用した。swc は、Rust で記述された TypeScript / JavaScript コンパイラであり、シングルスレッド実行では Babel JavaScript コンパイラよりも20倍高速であり、4コアベンチマークでは70倍高速であると主張している。Parcel の新しい JavaScript トランスフォーマは、swc の上に Rust で記述されている。JavaScript に加えて、swc は、browserslist が設定されている場合の変換、JSX と TypeScript のコンパイル、および React Fast Refresh でも同様にデフォルトで Babel を置き換える。

チームは次のパフォーマンスベンチマークを提供した。これは、Parcel が圧縮軽量化なしで約10倍高速であり、圧縮軽量化を有効にすると最大3倍高速であることを示している:

Chart showing performance of previous beta vs rust rewrite. Without terser, previous beta took 34s and the rust rewrite took 3.2s. With terser, the previous beta took 56s and the rust rewrite took 18s.

Deno チームは、昨年同様に swc JavaScript コンパイラ (Deno 1.5 リリース) に切り替えた。Deno チームは、バンドルのパフォーマンスが3倍向上したことを報告した (型チェックなしでは15倍)

Parcel はデフォルトで開発者による構成を必要としないことで有名ですが、Parcel 2 は、バンドルパイプラインのさまざまなステージをカスタマイズできるユーザ定義プラグインを可能にするモジュラー設計を中心に構築されている。Parcel チームは次のように説明している:

Parcel は、ゼロ構成の要件で有名です。これは、構成不可能であることを意味することではありませんでした。Parcel がコード自体から可能な限り推測を試み、他のツール (.babelrcなど) の既存の構成ファイルを使用しただけです。ユーザは、これが提供する使いやすさと開発者エクスペリエンスを気に入っていますが、もう少しカスタマイズ性が必要なエッジケースと実際のユースケースがいつもありました。 […]
Parcel 2 は、Parcel のコアステージごとに特別に設計されたプラグインタイプの完全なセットを通じて、追加機能を備えたコアの拡張をサポートします。

開発者は、パイプラインのどのステージでも Parcel のコア機能を拡張できる。プラグインタイプは、カスタマイズするパイプラインステージに対応して名前が付けられる。したがって、プラグインは、リゾルバ、トランスフォーマ、バンドラ、ネーマ、ランタイム、パッケージャ、オプティマイザ、バリデーター、およびレポータと呼ばれる場合がある。たとえば、リゾルバは import './foo'/my/project/foo.js のような完全なファイルパスに解決する。

Parcel 2 を使用すると、開発者は、並行してビルドされる複数のターゲットのビルドを構成できる。Parcel 2 は、最新のブラウザのネイティブ ES モジュールと、古いブラウザのフォールバッククラシックスクリプトの両方を自動的に生成する。Parcel チームは、差分バンドルのパフォーマンス上の利点を強調している:

これにより、ES5 にトランスパイルするのではなく、最新の構文で生成することで、大多数のユーザのバンドルサイズが大幅に削減されます。

Parcel 2 には、さらに多くの機能、改善、およびバグ修正がある (たとえば、JSX サポートの改善、Web Worker サポートの改善)。Parcel チームは、Parcel 2 の最終リリースとそれに対応するリリースノートの作成に取り組んでいる。それまでの間、関心のある開発者は、多くの詳細を以前の Parcel リリースノートでご覧ください: Parcel alpha 1Parcel beta 1Parcel beta 3、および Parcel 2 RC

この記事に星をつける

おすすめ度
スタイル

BT