0Pricing
JavaScript Academy · レッスン

活用例と制限事項

Worker が役立つ場面と、できないことを理解します。

「活用例と制限事項」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。

ワーカーが得意な処理

Web Workersは、UIを停止させてしまうようなCPU負荷の高い処理で力を発揮します。

  • 画像と動画の処理
  • 大きなファイル(CSV、JSON)の解析
  • 暗号処理とハッシュ計算
  • 物理計算、データ分析、シミュレーション

DOMにはアクセスできない

最大の制限は、ワーカーからDOMを操作できないことです。documentもwindowもありません。ワーカーはデータを計算して送り返し、メインスレッドがUIを更新します。

// Inside a worker:
// document.querySelector(...) -> ReferenceError
// Workers have no DOM at all.

利用できるもの

ワーカーでは、fetch、setTimeout、WebSocket、IndexedDB、crypto、型付き配列など、多くの便利なAPIを利用できます。そのため、データの取得や保存も別スレッドで問題なく行えます。

// Inside a worker this is valid:
// const res = await fetch('/data.json');
// const json = await res.json();
// self.postMessage(json);

構造化複製の制限

メッセージは構造化複製によってコピーされることを思い出してください。関数、DOMノード、メソッドを持つクラスのインスタンスは送信できず、シリアライズ可能なデータだけを送信できます。

// Cannot be sent:
// worker.postMessage(() => {});      // function - fails
// worker.postMessage(document.body); // DOM node - fails

起動とメッセージングのコスト

ワーカーの作成とメッセージのシリアライズにはオーバーヘッドがあります。小さなタスクでは、メッセージングのコストがメリットを上回ることがあります。ワーカーは、規模の大きい処理を継続的に行う場合に効果を発揮します。

ワーカーを維持する

タスクごとに新しいワーカーを起動するのは非効率的です。長期間稼働するワーカーを再利用して多数のメッセージを送るか、並列処理のために少数のワーカーで構成したプールを維持します。

// Reuse one worker for many tasks:
const worker = new Worker('worker.js');
function run(task) {
  worker.postMessage(task);
}
// Avoid: new Worker(...) on every single call.

ワーカープール

複数のCPUコアを利用するには、複数のワーカーを作成してタスクを分散させます。アイドル状態のワーカーを追跡し、受信した処理を空いているワーカーに割り当てます。

const pool = [];
for (let i = 0; i < 4; i++) {
  pool.push(new Worker('worker.js'));
}
// Round-robin or queue tasks across the pool.

メモリを共有する

高度な用途では、SharedArrayBufferを使ってスレッド間でメモリを直接共有できます(安全にアクセスするにはAtomicsを使用します)。特別なクロスオリジン分離ヘッダーが必要で、誤用もしやすいため注意が必要です。

// Requires COOP/COEP headers to be enabled.
// const shared = new SharedArrayBuffer(1024);
// Atomics.add(view, 0, 1); // safe concurrent update

エラーの分離

ワーカーで捕捉されなかったエラーがページをクラッシュさせることはありません。ワーカーのerrorイベントとして通知されるため、ログを記録するかワーカーを再起動する処理を実装してください。

worker.onerror = (e) => {
  console.log('worker failed:', e.message);
  // optionally recreate the worker here
};

ワーカーを使わない場面

タスクが単純な場合、頻繁にDOMを更新する必要がある場合、またはネットワークの待機がほとんどの場合は、ワーカーを使わないでください。非同期のfetchはすでにブロックしないためです。ワーカーは本当にCPU負荷が高い処理に使用します。

全体を組み立てる

Web Workersは、DOMへの直接アクセスや簡単なデータ共有と引き換えに、真の並列処理を実現します。負荷の高い計算に使用し、メッセージで通信し、ワーカーを再利用し、大きなバッファーを転送してアプリを高速かつスムーズに保ちましょう。

確認問題

ワーカーの用途と制限についての理解度を確認しましょう。

まとめ

ワーカーの用途と制限について学びました。

  • CPU負荷の高い処理に適していますが、DOMにはアクセスできません。
  • 多くのAPI(fetch、IndexedDB、crypto)を利用できます。
  • メッセージは構造化複製されるため、関数やDOMノードは送信できません。
  • 起動コストを分散するため、ワーカーまたはワーカープールを再利用します。
  • エラーはワーカー内に隔離されます。

Web Workersの学習はこれで終了です。次はIndexedDBです。

よくある質問

「活用例と制限事項」レッスンは無料ですか?

はい。「活用例と制限事項」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。

「活用例と制限事項」で何を学びますか?

Worker が役立つ場面と、できないことを理解します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「活用例と制限事項」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Web Worker を作成する
  2. postMessage でメッセージを送る
  3. Transferable オブジェクト
  4. 活用例と制限事項
← JavaScript Academyに戻る