Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
WebAssembly で WebP のデコードを試した / Decode WebP with WebAssembly by Pure Rust
森建
September 13, 2019
Technology
0
550
WebAssembly で WebP のデコードを試した / Decode WebP with WebAssembly by Pure Rust
Fukuoka.rs vol.5 〜LT会〜
https://fukuokars.connpass.com/event/139461/
森建
September 13, 2019
Tweet
Share
More Decks by 森建
See All by 森建
Stage 2 Decorators の変遷 / Stage 2 Decorators history
petamoriken
0
1.7k
linaria: Zero-Runtime CSS in JS
petamoriken
2
1.2k
ESNext の議論に参加しよう / Join the ESNext discussion
petamoriken
3
440
Multithreading WebAssembly by Rust
petamoriken
2
580
TC39 で提案されている ECMAScript 最新仕様 / ECMAScript latest specification proposed in TC39
petamoriken
2
520
バイト列から整数を得る
petamoriken
1
260
WebAssembly by Rust
petamoriken
0
870
Cloud FunctionsでOpen Graph Protocolの画像を自動生成する
petamoriken
0
630
Other Decks in Technology
See All in Technology
DeepL の用語集が(いつのまにか)日本語に対応してたので試してみた
irokawah0
0
160
データ分析で切り拓け! エンジニアとしてのデータ分析職キャリア戦略
ksnt
0
120
Scrum Fest Osaka 2022 フルリモート下でのチームビルディング
moritamasami
2
1.2k
Data in Google I/O - IO Extended GDG Seoul
kennethanceyer
0
150
QiitaConference2022
fuwasegu
0
190
Istio入門
nutslove
15
5k
ROS再入門-はじめてのSLAM-
miura55
0
400
RDRA + JavaによるレジャーSaaSプロダクトの要件定義と実装のシームレスな接続
jjebejj
PRO
3
660
Modern Android dependency injection
hugovisser
1
130
JJUG2022_spring_Keycloak (Red Hat Single Sign-on)
tinoue
0
200
#JP_Stripes Sapporo Stripeの活用例を色々ご紹介します!
miu_crescent
0
110
プログラマがオブジェクト指向しても幸せになれない理由
shirayanagiryuji
0
140
Featured
See All Featured
Three Pipe Problems
jasonvnalue
89
8.7k
Six Lessons from altMBA
skipperchong
14
1.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
181
15k
Stop Working from a Prison Cell
hatefulcrawdad
261
17k
Building an army of robots
kneath
299
40k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
What's in a price? How to price your products and services
michaelherold
229
9.4k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
Testing 201, or: Great Expectations
jmmastey
21
5.4k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
Atom: Resistance is Futile
akmur
255
20k
Transcript
で のデコードを試した pixiv Inc. 2019.9.13 Fukuoka.rs #5 LT
2 自己紹介 • 主にフロントエンドエンジニア • ActionScript 3.0 を JavaScript に書き直したり
WebGL を駆使したサイトを作ったり PHP のコードをリファクタリングしたり • ブラウザの限界に迫るのが好き 課題解決部
3 とは • アセンブリでないバイトコード • 豊富な実行環境がある ◦ モダンブラウザ Chrome /
Firefox / Safari / Edge ◦ Node.js v8 以降(AWS Lambda, BigQuery など) ◦ Wasmer というランタイムを使えば Rust / C / Go / Ruby などで実行できる • ECMAScript と似た策定プロセスを取っている
4 の策定プロセス • Phase 1 Feature Proposal ◦ 機能追加が承認される •
Phase 2 Proposed Spec Text Available ◦ 最初の Spec テキストが作られる • Phase 3 Implementation Phase ◦ Spec テキストが完成し、レビューが完了する • Phase 4 Standardize the Feature ◦ 1つのツールチェイン、2つ以上の実行環境が作られ、承認される
ブラウザにフォーカスして 話していきます 5
6 ブラウザにおける の用途 • C などで書かれたコード資材(ライブラリ)をブラウザ上で動かす ◦ モバイルアプリと Web アプリの一部コードの共通化が出来る
◦ Emscripten などを使って WebAssembly or asm.js に変換する ▪ なんとか動かすことは出来るが特殊な知識・技術を必要とする ◦ C/C++とWebAssemblyを利用したライブラリ開発 https://www.slideshare.net/llamerada-jp/ccwebassembly
7 ブラウザにおける の用途 • DOM も含めて非 JavaScript で開発する ◦ WebAssembly
から直接 DOM API を触る機能はまだない ▪ Phase 1 Interface Types で議論されている ◦ JavaScript の函数は実行できるので DOM API をラップして渡すことは出来る ▪ Rust の Yew (wasm-bindgen) や C# (.NET) の Blazor などは自動でラップ • グルーコードを触れない個人的にあまり好きではない ……
8 ブラウザにおける の用途 • 重いデコード処理や行列演算などをブラウザで行う ◦ JavaScript よりも実行速度が速いためプロダクトの要所で使う ▪ 将来的に
Phase 2 Threads, Fixed-width SIMD で更に速くできる ◦ デコードできないファイル形式を扱うことが出来る ▪ 通信コスト削減が出来る WebP 形式の画像は Safari で扱えないが WebAssembly で対応できる?
9 のデコード • https://github.com/petamoriken/wasm-webp-test • image クレートを使って WebP のデコードをした(まだ輝度しか取り出せない)
10 結果 • Chrome • Firefox • Safari
11 やってみた感想 • image クレートの WebP 対応が微妙 ◦ 輝度しか対応していない(PR で作業されている)
◦ VP8 のチャンクが VP8␣ 始まりでないといけない ▪ ImageMagick で生成した WebP が不正扱いになってしまう 要調査 • WebAssembly のエラー周りが大変 ◦ 仕様としては Phase 1 Exception handling で議論されてそう ◦ wasm-bindgen を使う場合は console_error_panic_hook を使うと見やすくなる