Webワーカーは、Webアプリケーションのメインスレッドとは無関係に、JavaScriptがバックグラウンドで実行できるようにするHTML5仕様の機能です。このタスクの分離により、Web開発者は、ユーザーインターフェイスの応答性に影響を与えることなく、計算集中操作を実行できます。
バックグラウンド処理にWebワーカーを使用するには、通常、次の手順に従います。
worker.js
という名前のファイルを作成する場合があります。ワーカーをインスタンス化する:メインのJavaScriptファイルで、ワーカースクリプトへのパスでWorker
オブジェクトをインスタンス化することにより、新しいワーカーを作成します。例えば:
<code class="javascript">const myWorker = new Worker('worker.js');</code>
メッセージを送信: postMessage
方法を使用してメッセージを送信して、ワーカーと通信します。ワーカーは、 message
イベントのイベントリスナーを使用してこれらのメッセージを受信できます。
<code class="javascript">myWorker.postMessage({command: 'start', data: someData});</code>
対応の処理:メインスレッドで、 message
イベントのイベントリスナーを使用して、ワーカーから送信されたメッセージを聞いてください。
<code class="javascript">myWorker.onmessage = function(e) { console.log('Message received from worker', e.data); };</code>
ワーカーを終了する:完了したら、 terminate
方法でワーカーを終了できます。
<code class="javascript">myWorker.terminate();</code>
この方法でWebワーカーを使用すると、メインスレッドをフリーズまたはスローダウンすることなくバックグラウンド処理が発生し、それによりスムーズなユーザーエクスペリエンスが維持されます。
Webワーカーは、いくつかの方法でWebアプリケーションのパフォーマンスを大幅に改善できます。
特定の種類のタスクは、その性質と要件のためにWebワーカーに特に適しています。
はい、ウェブワーカーは互いに通信することができます。これは、コーディネーターとして機能するメインスレッドによって促進されるプロセスです。このコミュニケーションを達成する方法は次のとおりです。
ハブとしてのメインスレッド:メインスレッドは中央ハブとして機能し、1人の労働者からメッセージを受信し、別のワーカーに転送できます。この方法では、メインスレッドが通信プロセスに関与する必要があります。
メインスレッドで:
<code class="javascript">const worker1 = new Worker('worker1.js'); const worker2 = new Worker('worker2.js'); worker1.onmessage = function(e) { if (e.data.command === 'sendToWorker2') { worker2.postMessage(e.data.message); } }; worker2.onmessage = function(e) { if (e.data.command === 'sendToWorker1') { worker1.postMessage(e.data.message); } };</code>
共有労働者:労働者間コミュニケーションのもう1つの方法は、共有労働者の使用によるものです。共有労働者に複数のスクリプトでアクセスできるため、アプリケーションのさまざまな部分が単一の共有ワーカーを介して通信できるようになります。
共有労働者の作成:
<code class="javascript">const sharedWorker = new SharedWorker('sharedWorker.js'); sharedWorker.port.onmessage = function(e) { console.log('Message received from shared worker', e.data); }; sharedWorker.port.postMessage({command: 'message', data: someData});</code>
労働者から労働者への直接的なコミュニケーション:一般的ではなく、簡単ではありませんが、労働者はMessageChannel
とMessagePort
を使用して直接通信することができます。このアプローチでは、メインスレッドが促進できる労働者間にチャネルを設定する必要があります。
メインスレッドで:
<code class="javascript">const channel = new MessageChannel(); const worker1 = new Worker('worker1.js'); const worker2 = new Worker('worker2.js'); worker1.postMessage('connect', [channel.port1]); worker2.postMessage('connect', [channel.port2]);</code>
これらの方法を使用することにより、Webワーカーは互いに効率的に通信し、Webアプリケーション内のより複雑なバックグラウンド処理シナリオを可能にします。
以上がウェブワーカーとは何ですか?背景処理にどのように使用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。