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
で のデコードを試した pixiv Inc. 2019.9.13 Fukuoka.rs #5 LT
Slide 2
Slide 2 text
2 自己紹介 ● 主にフロントエンドエンジニア ● ActionScript 3.0 を JavaScript に書き直したり WebGL を駆使したサイトを作ったり PHP のコードをリファクタリングしたり ● ブラウザの限界に迫るのが好き 課題解決部
Slide 3
Slide 3 text
3 とは ● アセンブリでないバイトコード ● 豊富な実行環境がある ○ モダンブラウザ Chrome / Firefox / Safari / Edge ○ Node.js v8 以降(AWS Lambda, BigQuery など) ○ Wasmer というランタイムを使えば Rust / C / Go / Ruby などで実行できる ● ECMAScript と似た策定プロセスを取っている
Slide 4
Slide 4 text
4 の策定プロセス ● Phase 1 Feature Proposal ○ 機能追加が承認される ● Phase 2 Proposed Spec Text Available ○ 最初の Spec テキストが作られる ● Phase 3 Implementation Phase ○ Spec テキストが完成し、レビューが完了する ● Phase 4 Standardize the Feature ○ 1つのツールチェイン、2つ以上の実行環境が作られ、承認される
Slide 5
Slide 5 text
ブラウザにフォーカスして 話していきます 5
Slide 6
Slide 6 text
6 ブラウザにおける の用途 ● C などで書かれたコード資材(ライブラリ)をブラウザ上で動かす ○ モバイルアプリと Web アプリの一部コードの共通化が出来る ○ Emscripten などを使って WebAssembly or asm.js に変換する ■ なんとか動かすことは出来るが特殊な知識・技術を必要とする ○ C/C++とWebAssemblyを利用したライブラリ開発 https://www.slideshare.net/llamerada-jp/ccwebassembly
Slide 7
Slide 7 text
7 ブラウザにおける の用途 ● DOM も含めて非 JavaScript で開発する ○ WebAssembly から直接 DOM API を触る機能はまだない ■ Phase 1 Interface Types で議論されている ○ JavaScript の函数は実行できるので DOM API をラップして渡すことは出来る ■ Rust の Yew (wasm-bindgen) や C# (.NET) の Blazor などは自動でラップ ● グルーコードを触れない個人的にあまり好きではない ……
Slide 8
Slide 8 text
8 ブラウザにおける の用途 ● 重いデコード処理や行列演算などをブラウザで行う ○ JavaScript よりも実行速度が速いためプロダクトの要所で使う ■ 将来的に Phase 2 Threads, Fixed-width SIMD で更に速くできる ○ デコードできないファイル形式を扱うことが出来る ■ 通信コスト削減が出来る WebP 形式の画像は Safari で扱えないが WebAssembly で対応できる?
Slide 9
Slide 9 text
9 のデコード ● https://github.com/petamoriken/wasm-webp-test ● image クレートを使って WebP のデコードをした(まだ輝度しか取り出せない)
Slide 10
Slide 10 text
10 結果 ● Chrome ● Firefox ● Safari
Slide 11
Slide 11 text
11 やってみた感想 ● image クレートの WebP 対応が微妙 ○ 輝度しか対応していない(PR で作業されている) ○ VP8 のチャンクが VP8␣ 始まりでないといけない ■ ImageMagick で生成した WebP が不正扱いになってしまう 要調査 ● WebAssembly のエラー周りが大変 ○ 仕様としては Phase 1 Exception handling で議論されてそう ○ wasm-bindgen を使う場合は console_error_panic_hook を使うと見やすくなる