WebWorker調査メモ

Webブラウザ上でマルチスレッドを実現する方法を調査していたところ、WebWorkerなるものを見つけた。当初探していたものと異なるが、メモリ空間の分離ができ、他のところで役立ちそうなため、メモ。

developer.mozilla.org

特徴

  • ブラウザ上のJavaScriptは1つの実行スレッドを持つが、WebWorkerを使うと、別のスレッド(Worker)を作ることができる。
  • Workerで重たい処理を実行していても、メインスレッドはブロックされず、DOM操作を行うことができる。
  • WorkerからDOMを操作することはできない。 その他、Worker内で利用できるAPI、機能には制限がある。

developer.mozilla.org

  • MDNではしばしばスレッドという表現がされるが、少なくともJavaScript上ではメインスレッドとWorkerでメモリ空間が別々。プロセスといったほうがイメージが近い。
  • メインスレッドとWorkerはメッセージパッシングで通信する。渡したオブジェクトはコピーされる。そのためメインスレッドで編集してもWorkerには影響ない。逆も同じ。
  • 基本機能はスマートフォン環境を含め、多くのブラウザでサポートされている。SharedWorker(iframe,異なるwindowでworkerを共有する)などの凝った機能はIEスマートフォンでサポートされていない場合が多い。

参考リンク

MDNのドキュメント、APIなどの一覧。 developer.mozilla.org

チュートリアル形式のドキュメント www.html5rocks.com