0

Web ワーカーについての一般的な質問があります。ユーザーがいるウィンドウから負荷を取り除くため、別のスレッドでバックグラウンド計算を行っていることを理解しています。

しかし、その「別のスレッド」とは、コンピューターで別のプログラムを実行している、別のブラウザーを開いている、または同じブラウザーの新しいタブのようなものを意味するかどうかについて混乱しています。これは後者のケースだと思いますが、それについて 100% 確信があるわけではなく、適切な説明を見つけることができません。

これは、Web ワーカーでできることの制限にどのような影響を与えるでしょうか?

前もって感謝します!

4

1 に答える 1

3

Webworker は、独立した実行スレッドのように機能します。コンピューター プロセスでは、複数のスレッドを同時に実行できます。複数のプロセッサがある場合、これらの複数のスレッドは実際には同時に実行できます。プロセッサが 1 つしかない場合、コンピューターの OS は、異なるスレッド間のタイム スライスを処理し、各スレッドが短時間実行された後、次のスレッドが実行されます。同時。

ブラウザーでは、Webworker は、ブラウザー ウィンドウ スレッド (ブラウザーで開いているブラウザー ページごとに 1 つ) とは独立して実行される実行スレッドです。ブラウザ ウィンドウ スレッドには、いくつかの制限があります。主な制限は、メイン ブラウザ スレッドで JavaScript コードが実行されていない場合にのみ、ユーザー イベント (マウスの移動、マウス クリック、キーボード イベントなど) を処理することです。そのため、ブラウザのメイン スレッドで実行時間の長い JavaScript コードを実行すると、ブラウザはロックされているように見え、JavaScript の実行中はユーザー イベントを処理しません。これは一般に、ユーザー エクスペリエンスが悪いと見なされます。

しかし、この JavaScript を Webworker で実行すると、メインのブラウザー ウィンドウ スレッドでのイベントの処理をブロックすることなく、長時間実行することができます。長時間実行される計算が終了すると、メイン ブラウザ ウィンドウ スレッドにメッセージを送信し、結果を処理できます (たとえば、ページに表示するか、特定のアクションが何であれ)。

作業を小さなチャンクに分割し、定期的なタイマーで小さなチャンクを実行することで、メインのブラウザー スレッドの制限を回避する方法があります。ただし、Web ワーカー スレッドを使用すると、プログラミングを大幅に簡素化できます。

Web ワーカー自身は、ブラウザ ページにアクセスできません。そこから値を読み取ったり、変更したりすることはできません。アニメーションなどを実行することもできません。これにより、ページからより独立したタスクに対する有用性が少し制限されます。古典的な使用法は、長時間実行される計算です (たとえば、画像からのデータの分析、ajax 呼び出しの実行、複雑な計算の実行など)。Web ワーカーは、メッセージング システムを介してメイン スレッドと通信できます。ボイスメールを残すようなものです。Webworker はメイン スレッドを呼び出し、メッセージを残します。次にメイン スレッドが何もすることがなくなったときに、Web ワーカーからのメッセージがあるかどうかを確認し、ある場合はそれらを処理します。このようにして、メイン スレッドと Web ワーカー スレッドは通信できますが、通信中に一方が他方に割り込むことはできません。

于 2013-03-21T04:23:13.253 に答える