Webpackの70倍!Go言語で書かれたJavascriptバンドラー「esbuild」をベンチマークテストしてみた

2020/02/20 01:22

esbuild
https://github.com/evanw/esbuild/

esbuildの特徴

複数モジュールの依存関係を解決し、1つにまとめるバンドラーは、現代のフロントエンド開発においてなくてはならないツールの1つ。


The State of JavaScript

上位5つに人気が集中し、なかでもWebpackのシェアは実に約60%に達しています。

今回ご紹介する「esbuild」は、Go言語で書かれた高速なバンドラーで、これらメジャーなツールとの性能比較(ベンチマークテスト)をやってみました。

公式のベンチマーク結果

計測方法は、three.jsライブラリを10回複製し、キャッシュなしで単一のバンドルをゼロから構築しています。なんと、Webpackに比べて70倍以上もビルド時間が圧縮されるなど、クレイジーな速度を誇っています。

なぜ、早いのか?

・Goというネイティブコードにコンパイルできる言語で書かれている
・パース、プリンティング、ソースマップの処理が完全に並列化されている
・すべての処理が、非常に少ないパスで実行され、コストのかかるデータ変換が不要
・コードは速度を重視し、不必要なアロケーションを回避している

Githubリポジトリより引用

実際に動かしてみる

$ git clone https://github.com/evanw/esbuild.git
$ cd esbuild
$ make bench-three

esbuildのブランチにある計測スクリプトを実行します。

Rollup.js

Built in 49s

real 49.95
user 54.59
sys 3.99

FuseBox

Built in 2m 56s 602ms

real 184.63
user 229.76
sys 15.46

Parcel

Built in 142.49s

real 154.52
user 305.49
sys 29.69

Webpack

Built in 56.95ms

real 58.75
user 67.11
sys 4.45

esbuild

Built in 770ms

real 1.28
user 2.49
sys 0.70

ビルド時間を見れば、結果は一目瞭然です。

すでにバンドラーのまわりにはエコシステムが確立され、単純な速度比較だけでは技術が選ばれる理由にはならないでしょう。それでも、かなりショッキングな性能差であるのは事実であり、それとともに、Go言語の可能性を感じさせてくれる結果ではないでしょうか。

注目のコメント

appstore
googleplay
会員登録
URLからPICKする

会員登録して、もっと便利に利用しよう

  • 1.

    記事をストックできる
    気になる記事をPickして、いつでも読み返すことができます。
  • 2.

    新着ニュースをカスタマイズできます
    好きなニュースフィードをフォローすると、新着ニュースが受け取れます。