Try Webworkers

53
Web Workers 使おう 2010/01/23 mollifier http://d.hatena.ne.jp/mollifier/

Transcript of Try Webworkers

Page 1: Try Webworkers

Web Workersを使おう

2010/01/23 mollifier http://d.hatena.ne.jp/mollifier/

Page 2: Try Webworkers

Web Workers とは Web Workers の使い方 活用できる場面

Page 3: Try Webworkers

Web Workers とは Web Workers の使い方 活用できる場面

Page 4: Try Webworkers

Web Workersは、新しいJavaScriptの機能

Page 5: Try Webworkers

例えば、JavaScriptで足し算したい場合

Page 6: Try Webworkers

素朴な書き方

Page 7: Try Webworkers

function setText(elem, text) { if (! elem.firstChild) { elem.appendChild(document.createTextNode("")); } elem.firstChild.data = text;}

function run() { var num = parseInt(document.getElementById("num").value, 10); var result = 0; for (var i = 0; i <= num; i++) { result += i; } // 計算完了 var retElem = document.getElementById("result"); setText(retElem, result.toString());}

Page 8: Try Webworkers

計算してる間ブラウザが反応しない

Page 9: Try Webworkers

Web Workersを使うと解決する

Page 10: Try Webworkers

というわけでデモ

Page 11: Try Webworkers

Web Workersを使うとバックグラウンドで処理を実行できる

Page 12: Try Webworkers

Web Workers とは Web Workers の使い方

活用できる場面

Page 13: Try Webworkers

Web Workers のコードってどういう風に書くの?

Page 14: Try Webworkers

簡単な例として、入力した数字までの合計を計算してみる

Page 15: Try Webworkers
Page 16: Try Webworkers

まずは HTML ファイル

Page 17: Try Webworkers

<!DOCTYPE html>

<html><head> <meta charset="UTF-8"> <script type="application/javascript" src="main.js"></script></head>

<body> <h1>計算したい</h1> <p> 1 から <input type="text" id="num" value="10"> までの合計 </p> <button id="run">計算!</button> <p id="result"></p>

<p><a href="../index.html">index</a></p></body>

</html>

Page 18: Try Webworkers

普通です。特に変わったところは無し。

Page 19: Try Webworkers

つぎに、JavaScriptファイル

Page 20: Try Webworkers

main.jsworker.js

二つファイルを作った

Page 21: Try Webworkers

main.js

ブラウザ本体側

計算したよ !

計算する

計算してくれ !

worker.js

バックグラウンド処理

表示する

Page 22: Try Webworkers

main.js の中身

Page 23: Try Webworkers

(function() { function init() {

function run() { var num = parseInt(document.getElementById("num").value, 10);

// 計算を行うワーカを生成 var worker = new Worker("worker.js");

// ワーカから結果を受け取る worker.onmessage = function(event) { var retElem = document.getElementById("result"); if (! retElem.firstChild) { retElem.appendChild(document.createTextNode("")); } retElem.firstChild.data = event.data; };

// ワーカーに計算させる worker.postMessage(num); }

document.getElementById("run"). addEventListener('click', run, false); }

window.addEventListener('load', init, false);})();

Page 24: Try Webworkers

// バックグラウンドで計算を行う// ワーカを作成する。// 引数として JavaScript ファイルの// URL を指定する。var worker = new Worker("worker.js");

// この時点ではまだ計算を開始しない。

Page 25: Try Webworkers

// バックグラウンドで計算を開始する// (num には数字が入っている)worker.postMessage(num);

Page 26: Try Webworkers

// 計算結果をワーカーから受けとるworker.onmessage = function(event) { // event.data に // 計算結果が入っている // ここで結果を表示する};

Page 27: Try Webworkers

worker.js の中身

Page 28: Try Webworkers

これがバックグラウンドで行われる処理

Page 29: Try Webworkers

// バックグラウンド処理を登録するonmessage = function(event) { // main.js の // worker.postMessage(num); // が呼び出されたとき、 // ワーカー側では // この関数が実行される

// ... 次のページに続く};

Page 30: Try Webworkers

onmessage = function(event) { // event.data に main.js 側で // 指定した数字が入っている var num = event.data; var result = 0; for (var i = 0;i <= num; i++) { result += i; } // 結果を main.js 側に通知する postMessage(result);};

Page 31: Try Webworkers

main.js

new Worker()

(4) postMessage

(5) onmessage

(3) onmessage

(2) postMessage

worker.js

(1) worker が作られる

Page 32: Try Webworkers

Web Workers とは Web Workers の使い方 活用できる場面

Page 33: Try Webworkers

じゃあ、これっていつ使うの?

Page 34: Try Webworkers

現状では別にいらない。無くても大丈夫。

Page 35: Try Webworkers

それでも、どんな場面で役に立つか考えてみた

Page 36: Try Webworkers

1. 画像の処理をする場合

Page 37: Try Webworkers

JavaScript で動的に画像を作成する

Page 38: Try Webworkers

たぶん重たい処理になる

Page 39: Try Webworkers

その間もブラウザ本体の操作ができる

Page 40: Try Webworkers

2. ローカルのデータを扱う場合

Page 41: Try Webworkers

例えばWeb StorageWeb Database

Page 42: Try Webworkers

クライアント側でデータベースを扱う場合

Page 43: Try Webworkers

データベースのアクセスをWeb Workers で

Page 44: Try Webworkers

読み書きしている間もブラウザ本体の操作ができる

Page 45: Try Webworkers

3. 巨大な数値、文字列を扱う場合

Page 46: Try Webworkers

例えばデータ圧縮暗号化

Page 47: Try Webworkers

もしやるとなったら、かなり重たい処理になる

Page 48: Try Webworkers

その間も普通のブラウザ操作ができるように

Page 49: Try Webworkers

というわけで、現状では活用例が無いけど

Page 50: Try Webworkers

Web Workers の登場で、JavaScript 側に重たい処理をまかせられる可能性が出てきた

Page 51: Try Webworkers

ひょっとしたら流行るかもしれません

Page 52: Try Webworkers

というわけで、新しい可能性の紹介でした

Page 53: Try Webworkers

ありがとうございました