uupaa/Thread.js は、WebWorker に MessageChannel を使っていたが、実は不要なんじゃないか説があり、実際のところを調べた。
結論を先に言えば不要だった。
window.onmessage は闇を抱えており、それは「あらゆるコンテキストからメッセージが onmessage に流れ込み、どのコンテキストからのメッセージなのか判別ができなくなる」というものだ。MessageChannel はそれを解決する優れた手段である。
2つ以上のコンテキストが存在する場所とは、具体的には以下となる。
- メインページ(window) 上の別の空間
- iframe と window 間の通信
- SharedWorker 内の通信
- 上記の混在