バックグラウンドで実行されている JavaScript スレッド -- Web ワーカー

零下一度
リリース: 2017-06-25 09:28:34
オリジナル
1424 人が閲覧しました

簡単に言うと、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 はグローバル変数またはグローバル関数にアクセスできません。

  • Web Worker は、alert() などの関数を呼び出したり、確認したりすることはできません。
  • Web Worker は、ウィンドウやドキュメントなどのブラウザーのグローバル変数にアクセスできません
  • ただし、Web Worker の Javascript は引き続き setTimeout()、setInterval を使用できます。 () および他の関数と同様に、Ajax 通信に XMLHttpRequest オブジェクトを使用することもできます。

現在、Internet Explorer を除くすべての主要なブラウザーが Web ワーカーをサポートしています。

Angular に詳しい友人は、Angular1 が最も批判されているのは、その汚いチェック メカニズムであることを知っているはずです。スコープにデータが多すぎると、パフォーマンスに重大な影響を及ぼします。 Angular2 は WebWorker を使用して、インターフェイス スレッドが影響を受けないように、負荷の高い計算作業を補助スレッドに移動します。

以上がバックグラウンドで実行されている JavaScript スレッド -- Web ワーカーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート