言語によるWebAssemblyファイルサイズの違い
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
を使ってサイズを軽減するのが基本です。このコマンドは下記コマンドでインストールできます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cargo install –git https://github.com/alexcrichton/wasm-gc |
そしてコマンドを実行します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
wasm-gc target/wasm32-unknown-unknown/debug/hello.wasm hello.min.wasm |
この時生成される hello.min.wasm
は207 byteとなっています。大幅に軽減されるのが分かります。
まとめ
Goはまだベータ実装なので、今後のバージョンアップによってサイズが最適化されていくのではないでしょうか。数MBあると、Webアプリケーションとしてはキャッシュの利用を考えたくなるでしょう。
Rustを使うことで小さなWebAssemblyファイルは作りやすくなります(もちろんコード量によりますが)。開発効率性をとるか、サイズをとるかは実行環境によるでしょう。よりシビアに動かす際にはプログラミング言語の選定にも注意が必要です。
コメントは受け付けていません。