コンテンツにスキップ

JavaScript/Web Worker

出典: フリー教科書『ウィキブックス(Wikibooks)』

Web Workers API

[編集]

概要

[編集]

Web Workersは、ウェブアプリケーションでバックグラウンドスレッドを実行するHTML5の機能です。メインスレッドから分離されたスクリプトを実行することで、重い処理をブラウザのUIをブロックせずに実行できます。

主な特徴

[編集]
  • マルチスレッド処理 - JavaScriptでCPUに負荷のかかる処理を並列実行可能
  • パフォーマンス向上 - メインスレッドをブロックせずに複雑な計算を実行
  • リソース管理 - ウェブアプリケーションのレスポンシブ性を維持

Web Workerの種類

[編集]

デディケーテッド・ワーカー

[編集]

単一のスクリプトによって使用される専用のワーカー。最もシンプルな実装方法。

シェアード・ワーカー

[編集]

複数のスクリプト(異なるウィンドウ、タブ、iFrame)から共有可能なワーカー。

サービス・ワーカー

[編集]

ネットワークリクエストや Push 通知、オフライン機能を管理するための特殊なワーカー。

基本的な使用方法

[編集]

ワーカースクリプトの作成

[編集]
// worker.js
self.onmessage = function(event) {
    const result = performHeavyComputation(event.data);
    self.postMessage(result);
};

function performHeavyComputation(data) {
    // 重い計算処理
    return data * data;
}

メインスレッドでのワーカー初期化

[編集]
// メインスクリプト
const worker = new Worker('worker.js');

worker.onmessage = function(event) {
    console.log('ワーカーから受信:', event.data);
};

worker.postMessage(42); // ワーカーに data を送信

制限事項

[編集]
  • DOMへの直接アクセス不可
  • window オブジェクトの使用不可
  • クロスオリジンスクリプトの読み込みに制限あり

エラーハンドリング

[編集]
worker.onerror = function(error) {
    console.error('ワーカーでエラー発生:', error);
};

ユースケース

[編集]
  • 大規模データの処理
  • 画像・ビデオ編集
  • 暗号化処理
  • 複雑な数学的計算
  • リアルタイムデータ解析

パフォーマンスに関する注意

[編集]
  • ワーカーの作成とメッセージ交換には軽微なオーバーヘッドあり
  • 短い処理には不向き
  • データのシリアライズ/デシリアライズにコストがかかる

ブラウザサポート

[編集]

最新のモダンブラウザで広くサポートされています。Internet Explorer 10以降、Chrome、Firefox、Safari、Edgeで利用可能。

関連技術

[編集]

結論

[編集]

Web Workersは、ウェブアプリケーションのパフォーマンスを大幅に向上させる強力な API です。適切に設計・実装することで、よりレスポンシブで効率的なウェブアプリケーションを作成できます。