Open6

WebAssembly のビルド時最適化にまつわる雑記

ピン留めされたアイテム
かめのこにょこにょこかめのこにょこにょこ

このスクラップがカバーする範囲

  • 各ツールがどのように WebAssembly を最適化するか
  • WebAssembly の最適化に使えそうな手法の紹介

このスクラップがカバーしない範囲

  • WebAssembly の最適化ツールの使い方
かめのこにょこにょこかめのこにょこにょこ

DCE の限界

かめのこにょこにょこかめのこにょこにょこ

emscripten side modules

Dynamic Linking

  • emscripten を使えばダイナミックリンクができる
  • 必要に応じてコードを追加でダウンロードすることで、ダウンロードした WebAssembly バイナリに含まれる関数/データがすべて使われるようにできそう
  • Asyncify と組み合わせれば、dlopen 時に WebAssembly バイナリをダウンロードというのも可能
かめのこにょこにょこかめのこにょこにょこ

データセクションの最適化

  • 非 0 な部分だけをデータセクションに格納するようにする
    • 線形メモリが 0 初期化されている + データセクションは分割可能
  • Clang の最適化オプションで勝手にやってくれる
  • データの再配置が必要な場合はこの最適化が使えない
    • 例. emscripten side modules