簡単に言うと、Web Worker はバックグラウンドで実行される JavaScript スレッドであり、ページの応答には影響しません。
JavaScript はシングルスレッドのスクリプト言語であること、つまり同時に 1 つのことしか実行できません。そうしないと、非常に複雑な同期の問題が発生することを私たちは知っています。たとえば、JavaScript には同時に 2 つのスレッドがあります。1 つのスレッドは特定の DOM ノードにコンテンツを追加する役割を果たし、もう 1 つのスレッドはノードを削除します。このとき、ブラウザーはどちらのスレッドをメインスレッドとして使用する必要がありますか。
そのため、同期の複雑さの問題を避けるために、JavaScript は誕生以来シングルスレッドであり、これもこの言語の特徴です。
JavaScript のシングルスレッドメカニズムは、処理する必要がある非常に複雑なタスクがある場合、ページがユーザーの操作に応答する前にタスクの処理が完了するまで待たなければならないという問題を引き起こします。ページの応答とユーザー エクスペリエンスに悪影響を与えるため、この問題を解決するために、またマルチコア CPU の計算能力を活用するために、HTML5 は JavaScript が複数のコンポーネントを作成できるようにする Web Worker 標準を提案しました。ただし、これらの新しく作成されたスレッドは子スレッドとして使用され、メイン スレッドによって完全に制御されます。実際、DOM は依然としてシングルスレッドです。したがって、時間のかかるタスクの一部を Web ワーカーによって作成された子スレッドに引き渡してバックグラウンドで完了させることができ、同時にフォアグラウンド ページはユーザーの応答を処理できます。
Web Worker によって作成されたスレッドは制限されたサブスレッドであるため、いくつかの使用制限があります:
Web Worker は DOM ノードにアクセスできません。
Web Worker はグローバル変数またはグローバル関数にアクセスできません。
現在、Internet Explorer を除くすべての主要なブラウザーが Web ワーカーをサポートしています。
Angular に詳しい友人は、Angular1 が最も批判されているのは、その汚いチェック メカニズムであることを知っているはずです。スコープにデータが多すぎると、パフォーマンスに重大な影響を及ぼします。 Angular2 は WebWorker を使用して、インターフェイス スレッドが影響を受けないように、負荷の高い計算作業を補助スレッドに移動します。
以上がバックグラウンドで実行されている JavaScript スレッド -- Web ワーカーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。