ホームページ >ウェブフロントエンド >H5 チュートリアル >バックグラウンド処理にHTML5 Web Workers APIを使用するにはどうすればよいですか?
HTML5 Web Workers APIを使用すると、メインブラウザースレッドとは別に、JavaScriptコードをバックグラウンドで実行できます。これにより、長期にわたるタスクの実行中にユーザーインターフェイス(UI)のブロックを防ぎます。使用方法は次のとおりです。
ワーカーの作成:スクリプトURLを使用して新しいワーカーを作成することから始めます。このスクリプトには、バックグラウンドで実行するコードが含まれます。これは、メインのJavaScriptファイルで行われます。
<code class="javascript">const worker = new Worker('worker.js');</code>
これにより、背景スレッドを表すWorker
オブジェクトが作成されます。 'worker.js'
ワーカースクリプトへの実際のパスに置き換えます。
ワーカースクリプト( worker.js
):このスクリプトには、バックグラウンドで実行されるコードが含まれています。このスクリプトには、メインスレッドとは別の独自のグローバルな範囲があることに注意することが重要です。メインスレッドのDOMまたはグローバル変数に直接アクセスできません。これが簡単な例です:
<code class="javascript">self.onmessage = function(e) { let result = e.data * 2; self.postMessage(result); };</code>
このワーカースクリプトは、メインスレッドからのメッセージ( onmessage
)を聴きます。 e.data
プロパティのデータを受信し、計算を実行し、 postMessage
を使用して結果をメインスレッドに送り返します。 self
労働者のグローバルな範囲を指します。
通信(メインスレッド):メインスレッドはpostMessage()
を使用してワーカーにメッセージを送信できます。
<code class="javascript">worker.postMessage(10); // Send the number 10 to the worker</code>
メッセージの受信(メインスレッド):メインスレッドは、 onmessage
イベントリスナーを使用して、ワーカーからのメッセージを聴いています。
<code class="javascript">worker.onmessage = function(e) { console.log('Result:', e.data); // Log the result received from the worker };</code>
労働者の終了:労働者と一緒に終わったら、リソースを解放するように終了する必要があります。
<code class="javascript">worker.terminate();</code>
従来のJavaScriptの実行はメインスレッドで実行されます。つまり、長期にわたるタスク(複雑な計算、大規模なファイル処理、ネットワークリクエストなど)がUIをブロックし、ユーザーにとってWebページを反応しないイライラさせます。 Webワーカーはいくつかの重要な利点を提供します:
いいえ、WebワーカーはDOMに直接アクセスできません。これは、潜在的な競合を防ぎ、安定性を保証する重要なセキュリティ機能です。ただし、最初のセクションで示されているように、メインスレッドとワーカー間でデータpostMessage()
交換できます。
postMessage()
メソッドを使用すると、メインスレッドとワーカーの間に構造化されたデータ(数字、文字列、配列、オブジェクト)を送信できます。メインスレッドとワーカーの両方が、データを受信して処理するためにmessage
イベントを聞く必要があります。構造化されたクローン可能なデータのみに渡すことができることを忘れないでください。これは、参照で共有されるのではなく、データがコピーされることを意味します。大規模なデータセットを効率的に転送するには、転送可能なオブジェクトの使用を検討してください。
ウェブワーカーは大きな利点を提供しますが、いくつかの落とし穴は避けるべきです。
error
とmessage
イベントを適切に処理することは、ワーカーのライフサイクルを管理し、漏れを回避するために重要です。以上がバックグラウンド処理にHTML5 Web Workers APIを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。