Webworker は、独立した実行スレッドのように機能します。コンピューター プロセスでは、複数のスレッドを同時に実行できます。複数のプロセッサがある場合、これらの複数のスレッドは実際には同時に実行できます。プロセッサが 1 つしかない場合、コンピューターの OS は、異なるスレッド間のタイム スライスを処理し、各スレッドが短時間実行された後、次のスレッドが実行されます。同時。
ブラウザーでは、Webworker は、ブラウザー ウィンドウ スレッド (ブラウザーで開いているブラウザー ページごとに 1 つ) とは独立して実行される実行スレッドです。ブラウザ ウィンドウ スレッドには、いくつかの制限があります。主な制限は、メイン ブラウザ スレッドで JavaScript コードが実行されていない場合にのみ、ユーザー イベント (マウスの移動、マウス クリック、キーボード イベントなど) を処理することです。そのため、ブラウザのメイン スレッドで実行時間の長い JavaScript コードを実行すると、ブラウザはロックされているように見え、JavaScript の実行中はユーザー イベントを処理しません。これは一般に、ユーザー エクスペリエンスが悪いと見なされます。
しかし、この JavaScript を Webworker で実行すると、メインのブラウザー ウィンドウ スレッドでのイベントの処理をブロックすることなく、長時間実行することができます。長時間実行される計算が終了すると、メイン ブラウザ ウィンドウ スレッドにメッセージを送信し、結果を処理できます (たとえば、ページに表示するか、特定のアクションが何であれ)。
作業を小さなチャンクに分割し、定期的なタイマーで小さなチャンクを実行することで、メインのブラウザー スレッドの制限を回避する方法があります。ただし、Web ワーカー スレッドを使用すると、プログラミングを大幅に簡素化できます。
Web ワーカー自身は、ブラウザ ページにアクセスできません。そこから値を読み取ったり、変更したりすることはできません。アニメーションなどを実行することもできません。これにより、ページからより独立したタスクに対する有用性が少し制限されます。古典的な使用法は、長時間実行される計算です (たとえば、画像からのデータの分析、ajax 呼び出しの実行、複雑な計算の実行など)。Web ワーカーは、メッセージング システムを介してメイン スレッドと通信できます。ボイスメールを残すようなものです。Webworker はメイン スレッドを呼び出し、メッセージを残します。次にメイン スレッドが何もすることがなくなったときに、Web ワーカーからのメッセージがあるかどうかを確認し、ある場合はそれらを処理します。このようにして、メイン スレッドと Web ワーカー スレッドは通信できますが、通信中に一方が他方に割り込むことはできません。