Web Worker: 現在のメイン (ウィンドウ) スレッドとは別のスレッドでバックグラウンドでスクリプトを実行する方法。
2.JavaScript は通常、対応するキュー (マクロタスク キュー、マイクロタスク キュー) にタスクを配置することによって非同期操作を処理します。イベント ループはこれらのキューを継続的にチェックし、実行の準備ができたらタスクをコール スタックにプッシュします。このアプローチでは、ノンブロッキングの実行が保証されますが、すべてが単一のスレッドで実行されます。
一方、Web Workers では、独自のコール スタック、非同期キュー、イベント ループを備えた完全に別個のスレッドでスクリプトを実行できます。この分離により、ワーカーが独立して動作するため、メインスレッドが重い計算や長時間実行されるタスクによってブロックされるのを防ぎます。
Web Worker API は、いくつかのタイプのワーカーを提供します:
専用ワーカーに焦点を当てます。
3.
4.1 ワーカーコード
if (window.Worker) { const worker = new Worker("/src/worker.js"); worker.postMessage({ operation: "get_dog_imgs", url: "https://dog.ceo/api/breeds/image/random", count: 5 //number of photos }); worker.onmessage = (e) => { console.log(e.data); if (e && e.data) { setdata((old) => [...old, e.data]); // update react state showCallStack(); // function to show the callstack } }; worker.onerror = (e) => { console.log(e); }; }このコードでは、ワーカーはメッセージ (onmessage) をリッスンし、指定された URL からカウントで指定された回数だけデータを取得します。
ワーカー内の呼び出しスタックは次のようになります:
4.2 クライアントコード
if (window.Worker) { const worker = new Worker("/src/worker.js"); worker.postMessage({ operation: "get_dog_imgs", url: "https://dog.ceo/api/breeds/image/random", count: 5 //number of photos }); worker.onmessage = (e) => { console.log(e.data); if (e && e.data) { setdata((old) => [...old, e.data]); // update react state showCallStack(); // function to show the callstack } }; worker.onerror = (e) => { console.log(e); }; }このコードは、ワーカーにメッセージを送信し、メイン スレッドでフェッチされたデータを受信する方法を示します。
完全なコードについては code にアクセスしてください
5.
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3