HTMLチュートリアル

HTMLホーム HTMLの紹介 HTMLエディター HTMLベーシック HTML要素 HTML属性 HTML見出し HTML段落 HTMLスタイル HTMLフォーマット HTMLの引用 HTMLコメント HTMLの色 HTML CSS HTMLリンク HTML画像 HTMLファビコン HTMLテーブル HTMLリスト HTMLブロックとインライン HTMLクラス HTMLID HTMLIframe HTML JavaScript HTMLファイルパス HTMLヘッド HTMLレイアウト HTMLレスポンシブ HTMLコンピューターコード HTMLセマンティクス HTMLスタイルガイド HTMLエンティティ HTMLシンボル HTML絵文字 HTML文字セット HTMLURLエンコード HTMLとXHTML

HTMLフォーム

HTMLフォーム HTMLフォーム属性 HTMLフォーム要素 HTML入力タイプ HTML入力属性 HTML入力フォームの属性

HTMLグラフィックス

HTMLキャンバス HTML SVG

HTMLメディア

HTMLメディア HTMLビデオ HTMLオーディオ HTMLプラグイン HTML YouTube

HTML API

HTMLジオロケーション HTMLドラッグアンドドロップ HTMLWebストレージ HTMLWebワーカー HTML SSE

HTMLの

HTMLの例 HTMLクイズ HTML演習 HTML証明書 HTMLの概要 HTMLアクセシビリティ

HTMLリファレンス

HTMLタグリスト HTML属性 HTMLグローバル属性 HTMLブラウザのサポート HTMLイベント HTMLの色 HTMLキャンバス HTMLオーディオ/ビデオ HTMLDoctypes HTML文字セット HTMLURLエンコード HTML言語コード HTTPメッセージ HTTPメソッド PXからEMへのコンバーター キーボードショートカット

HTML Web Workers API


Webワーカーは、ページのパフォーマンスに影響を与えることなく、バックグラウンドで実行されるJavaScriptです。


Webワーカーとは何ですか?

HTMLページでスクリプトを実行すると、スクリプトが終了するまでページが応答しなくなります。

Webワーカーは、ページのパフォーマンスに影響を与えることなく、他のスクリプトとは独立してバックグラウンドで実行されるJavaScriptです。Webワーカーがバックグラウンドで実行されている間、クリック、選択など、好きなことを続けることができます。


ブラウザのサポート

表の数字は、Webワーカーを完全にサポートする最初のブラウザーバージョンを示しています。

API
Web Workers 4.0 10.0 3.5 4.0 11.5

HTMLWebワーカーの例

以下の例では、バックグラウンドで数値をカウントする単純なWebワーカーを作成します。

Count numbers:


Webワーカーのサポートを確認する

Webワーカーを作成する前に、ユーザーのブラウザーがWebワーカーをサポートしているかどうかを確認してください。

if (typeof(Worker) !== "undefined") {
  // Yes! Web worker support!
  // Some code.....
} else {
  // Sorry! No Web Worker support..
}


Webワーカーファイルを作成する

それでは、外部JavaScriptでWebワーカーを作成しましょう。

ここでは、カウントするスクリプトを作成します。スクリプトは「demo_workers.js」ファイルに保存されます。

var i = 0;

function timedCount() {
  i = i + 1;
  postMessage(i);
  setTimeout("timedCount()",500);
}

timedCount();

上記のコードの重要な部分はpostMessage()メソッドです。これは、HTMLページにメッセージを投稿するために使用されます。

注:通常、Webワーカーはこのような単純なスクリプトには使用されませんが、CPUを集中的に使用するタスクには使用されます。


Webワーカーオブジェクトを作成する

Webワーカーファイルができたので、HTMLページから呼び出す必要があります。

次の行は、ワーカーがすでに存在するかどうかをチェックします。存在しない場合は、新しいWebワーカーオブジェクトを作成し、「demo_workers.js」でコードを実行します。

if (typeof(w) == "undefined") {
  w = new Worker("demo_workers.js");
}

次に、Webワーカーとの間でメッセージを送受信できます。

「onmessage」イベントリスナーをWebワーカーに追加します。

w.onmessage = function(event){
  document.getElementById("result").innerHTML = event.data;
};

Webワーカーがメッセージを投稿すると、イベントリスナー内のコードが実行されます。Webワーカーからのデータはevent.dataに保存されます。


Webワーカーを終了します

Webワーカーオブジェクトが作成されると、終了するまで(外部スクリプトが終了した後でも)メッセージをリッスンし続けます。

Webワーカーを終了し、ブラウザー/コンピューターのリソースを解放するには、次の terminate()方法を使用します。

w.terminate();

Webワーカーを再利用する

ワーカー変数をundefinedに設定すると、終了後にコードを再利用できます。

w = undefined;

完全なWebワーカーのサンプルコード

.jsファイルのワーカーコードはすでに確認済みです。以下は、HTMLページのコードです。

<!DOCTYPE html>
<html>
<body>

<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">Stop Worker</button>

<script>
var w;

function startWorker() {
  if (typeof(Worker) !== "undefined") {
    if (typeof(w) == "undefined") {
      w = new Worker("demo_workers.js");
    }
    w.onmessage = function(event) {
      document.getElementById("result").innerHTML = event.data;
    };
  } else {
    document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
  }
}

function stopWorker() {
  w.terminate();
  w = undefined;
}
</script>

</body>
</html>

WebワーカーとDOM

Webワーカーは外部ファイルにあるため、次のJavaScriptオブジェクトにアクセスできません。

  • ウィンドウオブジェクト
  • ドキュメントオブジェクト
  • 親オブジェクト