はじめに
私はEmscriptenを使って趣味でゲームを作っています。
WebAssemblyは興味はあったのですが、難しそうでかつあまり意味がないと思っていたのですが、思ったより簡単で明確な違いが数値で現れました。
やったこと
過去作にemcc
にコンパイルオプションをつけてemcc -s WASM=1
にしました。
結果比較1 ホッピンパペット
普通にビルドしたらファイルサイズは以下のようになりました。
emcc | .js |
---|---|
最適化無し | 2045027 |
-O3 | 473131 |
-Os | 394081 |
-Oz | 391771 |
一方WebAssemblyオプションをつけてビルドしたらファイルサイズは以下のようになりました。
emcc -s WASM=1 | .js | .wasm | 通常ビルドとの比較 |
---|---|---|---|
最適化無し | 246537 | 451004 | 34% |
-O3 | 128515 | 247115 | 79% |
-Os | 128515 | 196081 | 82% |
-Oz | 128515 | 194180 | 82% |
結果比較2 グルリンダッシュ
普通にビルドしたらファイルサイズは以下のようになりました。
emcc | .js |
---|---|
最適化無し | 2117354 |
-O3 | 487930 |
-Os | 445771 |
-Oz | 442939 |
一方WebAssemblyオプションをつけてビルドしたらファイルサイズは以下のようになりました。
emcc -s WASM=1 | .js | .wasm | 通常ビルドとの比較 |
---|---|---|---|
最適化無し | 258114 | 452756 | 34% |
-O3 | 136099 | 240600 | 77% |
-Os | 136099 | 203777 | 76% |
-Oz | 136099 | 201701 | 76% |
ファイルサイズが減った
WebAssembly化することにより2割ほどファイルサイズが減りました。
最適化無しの場合にものすごくファイルサイズが減っているのは改行やコメントなどの余計なコードの影響なのでしょうか。
速度はどうか
小規模なゲームでもともと速度も重くなく、比較のしようがありません。
ゲームの場合は描画が処理のボトルネックになることが多く、
行列演算を多用しない場合は速度的なメリットはなさそうです。
最後に
特に手こずることもなく、目に見えてファイルサイズが減りました。
最新のブラウザであればWebAssemblyに対応しているそうなのでこれからは使っていきたいと思います。
上記リンクを貼っている私のサイトで、それぞれのコンパイルオプションでビルドしたものを公開しています。触っていただけるとありがたいです。