Slide 1

Slide 1 text

DOM Observable 福岡フロントエンド勉強会 #1 pixiv Inc. 森内建太 petamoriken 2024.3.15

Slide 2

Slide 2 text

2 自己紹介 ● Web エンジニア ● ECMAScript や WHATWG を追うのが好き ● 最近 Float16Array が SpiderMonkey, V8 に入った! petamoriken カスタマーオペレーション &セーフティ本部 オペレーション開発部

Slide 3

Slide 3 text

3 目次 ● JavaScript におけるストリーム ● Observable とは ● DOM Observable の提案 ● RxJS との違い ● 細かい話

Slide 4

Slide 4 text

4 JavaScript におけるストリーム ● Pull ストリーム ○ Iterator, AsyncIterator (ECMAScript) ○ ReadableStream (Streams Standard) ● Push ストリーム ○ EventTarget (DOM Standard) ■ 一応ストリームとして扱えるがどちらかといえばイベント

Slide 5

Slide 5 text

5 Observable とは ● Push ストリームのライブラリ実装 ○ JS だと RxJS が一番有名

Slide 6

Slide 6 text

6 DOM Observable の提案 ● TC39 の方で標準化を進めていたが5年くらい音沙汰がなかった ● RxJS コアチームリードの Ben Lesh さんが Web 側で標準化する提案を出した

Slide 7

Slide 7 text

7 DOM Observable の提案

Slide 8

Slide 8 text

8 RxJS との違い ● RxJS の Hot Observable を作る機能はない ● クリーンアップの処理のコールバックの渡し方が違う ● RxJS は fromEvent 函数で変換するが、直接 EventTarget にメソッドが生える ○ EventTarget#on が提案されていたが Break the Web で駄目 😭 ○ EventTarget#observe は IntersectionObserver 等と型が違うから微妙

Slide 9

Slide 9 text

9 細かい話 ● Observable#subscribe のコールバックは同期的に実行される ○ Promise#then や await ではマイクロタスクになるため非同期になる ○ Observable を非同期にしちゃうと Event#preventDefault が呼べなくなっちゃう 👉 Promise に変換するときに要注意!

Slide 10

Slide 10 text

10 詳しくは Zenn へ!