回答:
それらが意図されているものには大きな違いがあります:
ウェブワーカー
Webワーカーは、Webコンテンツがバックグラウンドスレッドでスクリプトを実行するための簡単な手段を提供します。ワーカースレッドは、ユーザーインターフェイスを妨げることなくタスクを実行できます。さらに、XMLHttpRequestを使用してI / Oを実行できます(ただし、responseXMLおよびチャネル属性は常にnullです)。作成されたワーカーは、そのコードで指定されたイベントハンドラーにメッセージを投稿することで、そのコードを作成したJavaScriptコードにメッセージを送信できます(逆も同様です)。
サービスワーカー
Service Workerは基本的に、Webアプリケーションとブラウザーおよびネットワーク(利用可能な場合)の間に位置するプロキシサーバーとして機能します。これらは、(とりわけ)効果的なオフラインエクスペリエンスの作成を可能にし、ネットワークリクエストをインターセプトし、ネットワークが利用可能であり、更新されたアセットがサーバー上にあるかどうかに基づいて適切なアクションを実行することを目的としています。また、プッシュ通知やバックグラウンド同期APIへのアクセスも許可されます。
したがって、Webワーカーはユーザーインターフェースをフリーズさせずに高価なスクリプトを実行するのに便利ですが、Serviceワーカーはネットワーク要求からの応答を変更するのに役立ちます(たとえば、オフラインアプリを構築するとき)。
Buksyの答えは正しいですが、私の意見では、元の質問、つまり「サービスワーカーがWebワーカーができないことは何ができるのか、またはその逆は」には答えません。
それらのライフサイクルと、保持できるオリジンあたりのインスタンス数には、根本的な違いがあります。要するに:
| Web Workers | Service Workers |
|--------------|--------------|------------------|
| Instances | Many per tab | One for all tabs |
| Lifespan | Same as tab | Independent |
| Intended use | Parallelism | Offline support |
Buksyの答えは基本的に表の最後の行です。クレジット:スライド35から、Nolan LawsonによるDemystifying Web Workers and Service Workersからこの表を取り上げました。
特に、Webワーカーを生成および終了する方法を次に示します。
一方、サービスワーカーには独自のライフサイクルがありますが、これは確かに「最も複雑な部分」です。
したがって、ライフサイクルは2つの基本的な違いの1つです(それらの使用目的の結果)。
以前はブラウザーサポートに大きな違いがありました。Safarifor iOSでは11.3(2018年3月29日)までService Workerをまったく使用できませんでした。ServiceWorkerを使用できますか?を参照してください。対照的に、Webワーカーのブラウザーサポートは2012年よりもはるかに優れています。Webワーカーを使用できますか?
IE11をサポートする必要がある場合、使用できるのはWebワーカーのみです。IE11にはサービスワーカーがありません。IE11 のサポートの終了は明らかに2025年 10月14日です。
ブラウザ間のAPIサポートには微妙な違いがあります。HTML5ワーカーテスト(Nolan Lawsonによる)を参照してください。特定のブラウザでは、ある種類のワーカーが特定のAPI呼び出しをサポートしているのに対して、他の種類はサポートしていない場合があります。そのページにアクセスして、独自のブラウザーをテストしてください!