Comlink
WebWorkerはプリミティブなAPIなのでそのまま使うと結構しんどい
いい感じにWrapしてただの非同期なオブジェクト操作のように扱えるようにしてくれるライブラリがComlink
ComlinkのAPI
基本はexposeとwrap、その他よく使うのがproxyValue
expose
Worker側で呼び出す
渡した値(主に関数や関数をまとめたオブジェクト)は、Workerをwrapした側がawaitで取り出せるようになる
exposeは「露出する」とかそういう感じの意味で、Wrapper系のライブラリでは頻出単語らしい
複数回呼んでたらどうなるの?
先勝ちっぽさがある
wrap
利用側でWorkerを渡して呼び出す
プロパティや関数へのアクセスは基本的にすべて非同期
postMessageとonMessageをラップしているだけなのでそれはそう
proxyValue
Workerとメインスレッドのやりとりはディープコピーで行われ、クロージャなどは渡せない
参照を渡したい場合、proxyValueを使う
Reactとの統合の例