コンテンツへスキップ

言語によるWebAssemblyファイルサイズの違い

by : 2019/04/26

WebAssembly自体はプログラミング言語ではありません。対応した各種言語から変換します。そのため、採用する言語によって利用できる機能や開発効率が異なるでしょう。

今回は生成されるバイナリをプログラミング言語ごとに見てみます。

GoとRust

利用したのはGoとRustです。RustはWebAssemblyで最初に採用されているプログラミング言語であり、サイズも最適化されているのではないかと予想されます。対してGoはWebAssemblyを目的としてはいませんし、標準ライブラリなども多数入りそうな予感がします。

どちらもHello Worldを出力するだけのWebAssemblyファイルを作った場合のサイズです。

  • Go : 1,301,957 byte
  • Rust : 1,981,246 byte

となり、意外にもGoのが小さくなります。

Rustのサイズを軽減する

Rustはデフォルトのままでは余計なコードがたくさん入っています。そこで wasm-gc を使ってサイズを軽減するのが基本です。このコマンドは下記コマンドでインストールできます。

view raw

index.

hosted with ❤ by GitHub

そしてコマンドを実行します。


wasm-gc target/wasm32-unknown-unknown/debug/hello.wasm hello.min.wasm

view raw

index.

hosted with ❤ by GitHub

この時生成される hello.min.wasm は207 byteとなっています。大幅に軽減されるのが分かります。

まとめ

Goはまだベータ実装なので、今後のバージョンアップによってサイズが最適化されていくのではないでしょうか。数MBあると、Webアプリケーションとしてはキャッシュの利用を考えたくなるでしょう。

Rustを使うことで小さなWebAssemblyファイルは作りやすくなります(もちろんコード量によりますが)。開発効率性をとるか、サイズをとるかは実行環境によるでしょう。よりシビアに動かす際にはプログラミング言語の選定にも注意が必要です。

From → Uncategorized

コメントは受け付けていません。