asm.js 減量やってみた
by
ueshita
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
asm.js 減量やってみた うえした (@ueshita)
Slide 2
Slide 2 text
EmscriptenでCライブラリを移植してみた うごいた。 わーい!すごーい!たーのしー!
Slide 3
Slide 3 text
Webエンジニアに見せてみた Web「ええやん。便利やん!」 Web「そんで、(JSのサイズは)なんぼなん?」 ぼく「1.2MBです・・・(震え声)」 Web「・・・」
Slide 4
Slide 4 text
Webの世界でMBはデカすぎる jQuery : 100KB three.js: 500KB my-library.js : 1.2MB 圧縮しても 400KB!
Slide 5
Slide 5 text
結果にコミットしたい JSファイルサイズを減量しないと(使命感)
Slide 6
Slide 6 text
最適化オプションに -Oz を指定 -O2 → -Oz 50KB 減った!
Slide 7
Slide 7 text
--llvm-lto 1 を付ける 関数呼び出しがいい感じにインライン化される 40KB 減った! --llvm-lto 2 or 3 等もあるが結果は変わらなかった。
Slide 8
Slide 8 text
-s NO_FILESYSTEM=1 を付ける 使用していないEmscriptenファイルシステムをカット (fopenとかfstreamが使えなくなります) 70KB 減った! 清水さんゴメンナサイ・・・
Slide 9
Slide 9 text
いらないソースを削る マルチプラットフォームなライブラリなので、 Webでは絶対に使わないコードがある。 #ifdefを使って頑張って削った 240KB 減った! 呼び出されない関数はリンクタイム最適化で捨てられるので、 無理に削る必要はない。
Slide 10
Slide 10 text
マクロをやめて関数にする ソースでCのマクロが多用されていた 同じ処理が色々なところに複製されている! マクロをやめて関数にしてみた 50KB 減った! inline関数でもいい感じにやってくれるかも
Slide 11
Slide 11 text
Emscriptenのバージョンを上げる 1.35.00 → 1.36.14 (sdk-incoming-64bit) 60KB 減った!
Slide 12
Slide 12 text
いろいろ減量してみた結果 1.2MB → 690KB gzip圧縮時 : 190KB いろいろ頑張ったけど、まだでかい・・・
Slide 13
Slide 13 text
ん? WebAssembly・・・? -s WASM=1 でビルド 無圧縮 asm.js比 サイズ 1/2!! gzip圧縮 asm.js比 サイズ 2/3!! 各ブラウザベンダー 早く対応してくれぇー!!