UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Web Worker】Web Worker?ServiceWorker?

Web Worker というワードを聞いて、あれServiceWorkerとはなにが違うの?と思ったので調べた

developer.mozilla.org

上のMDNドキュメントより

Web Workerは、ウェブアプリケーションにおけるスクリプトの処理をメインとは別のスレッドに移し、バックグラウンドでの実行を可能にする仕組みのことです。時間のかかる処理を別のスレッドに移すことが出来るため、 UI を担当するメインスレッドの処理を中断・遅延させずに実行できるという利点があります。

これを読んだときにServiceWorkerでは?と思ったが、読み進めるとWeb Worker には以下のような種類があり、ServiceWorkerはその1つだと知った

  • Dedicated Worker
    • 特有の URL で動作する専用ワーカーのインスタンスを生成することができる
    • そのコンテキストは DedicatedWorkerGlobalScope オブジェクトで表現される
  • Shared Worker
    • 複数のウィンドウや iframe、他のWorker などからアクセス可能な Worker を提供する
    • それらのスクリプトと Worker は同じドメイン内にある必要がある
    • スクリプトどうしがアクティブなポートで通信しなければならないので、Dedicated Workerより複雑
  • ServiceWorker
    • 複数のウェブアプリケーション間やブラウザ、 (利用可能なら) ネットワークとの間でプロキシサーバーとして動く
    • オフラインでのユーザーエクスペリエンスを実現するために設計されている
    • プッシュ通知やバックグラウンド同期の API 群へのアクセスも可能
  • Chrome Worker
  • Audio Worker
    • 音声処理を Worker のコンテキスト内でスクリプトで直接実行するときなど