web workers

27
JavaScript で でででででででででででででで @kabochha

Upload: kaboccha

Post on 21-May-2015

1.746 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Web Workers

 JavaScript でマルチスレッドプログラミング

@kabochha

Page 2: Web Workers

 JavaScript でマルチスレッドプログラミングをしたい

Page 3: Web Workers

 JavaScript でマルチスレッドプログラミングをしたい

ってわけで WebWorker を試してみよう!と

Page 4: Web Workers

 JavaScript でマルチスレッドプログラミングをしたい

ってわけで WebWorker を試してみよう!と

思ったんですが…

Page 5: Web Workers

Web Workers とは

高負荷な計算処理などを UI 以外のスレッドで実行するための機能

Page 6: Web Workers

Web Workers とは

高負荷な計算処理などを UI 以外のスレッドで実行するための機能

独立したスレッドなので、 UI 側のメモリや CPU リソースに影響せずにタスクを実行できる

Page 7: Web Workers

Web Worker でできること navigator オブジェクト location オブジェクト(読み取り専用) XMLHttpRequest 関数 (Ajax) アプリケーションキャッシュ importScripts を使った JSONP その他の Web Workers の生成 下記 window オブジェクト バイナリデータと Base64ASCⅡ を相互変換する

atob(),bota() にsetTimeout() 、 clearTimeout() 、 setInterval() 、 clearInterval() 、 dump()

Page 8: Web Workers

できないこと

window オブジェクトdocument オブジェクトparent オブジェクト

Page 9: Web Workers

使いどころ大きな JSON や文字列の処理Canvas などでのフィルタリング処理動画や音声の解析、処理複雑な計算(暗号化、 3D ポジショニ

ング、素数計算など )データの先読み、キャッシュスペルチェックなどの構文解析IndexedDB を用いたデータ処理

Page 10: Web Workers

ブラウザ対応度

http://caniuse.com

Page 11: Web Workers

ブラウザ対応度 shared worker

http://caniuse.com

Page 12: Web Workers

スマートフォンだとmobile Safari は 5.0 からAndroid Brower は 2.1 のみAndorid Chrome は専有ワーカーの

み対応

Page 13: Web Workers

スマートフォンだとmobile Safari は 5.0 からAndroid Brower は 2.1 のみmobile Chrome は専有ワーカーの

み対応

というわけで現状だと使いにくい

Page 14: Web Workers

Web Workers の種類

専用ワーカーインラインワーカー共有ワーカー

Page 15: Web Workers

専用ワーカー

自分自身を起動したスクリプトとのみ通信できる

Page 16: Web Workers

使い方1. Worker コンストラクタを呼び出す2. Web workers が送ってくるメッ

セージを受け取るメソッド(onmessage) を用意

3. Worker の開始 (postMessage)4. Web Worker 側でも onmessage

と postMessage を用意する

Page 17: Web Workers

メインスクリプト//Worker の生成var worker = new Worker('work.js');

//Web Worker からのメッセージ受信用メソッドworker.onmessage = function(e) { console.log(e.data);//return Worker Started };

// Worker スタートworker.postMessage('Worker Started’);

Page 18: Web Workers

Worker 素クリプト

// メインスクリプトからのメッセージ受信用メソッドonmessage = function(e){

// メインスクリプト側にメッセージを送る postMessage(“return : “ + e.data); };

Page 19: Web Workers

インラインワーカー

動的に Worker を生成したいⅠ 枚の HTML ファイルで済ませた

いChrome の拡張機能としてバンドル

したい

Page 20: Web Workers

使い方

1. BlobBuilder と createObjectURLを使って Worker 用ファイルを構築する

2. 1 を使って Worker オブジェクトを生成する

3. ごにょごにょする

Page 21: Web Workers

//worker用のスクリプト生成var str = "onmessage = function(e) { postMessage(‘return ’ +e.data); }”;

//blobオブジェクト生成var blob = new Blob([str], {type:"text/javascript"});

//createObjectURLをChromeでもFirefoxでも使えるようにvar myUrl = window.webkitURL || window.URL;

//ファイル生成var blobURL = myUrl.createObjectURL(blob);

var worker = new Worker(blobURL);worker.onmessage = function(e) { console.log(e.data); // return Worker Started};worker.postMessage('Worker Started');

Page 22: Web Workers

共有ワーカー

ユーザー認証や接続状況をⅠヶ所にまとめて参照できる

別 window 間のデータの一貫性を保証する

モデルをⅠつの場所に集めることができる

Page 23: Web Workers

使い方

new SharedWorker で生成SharedWorker 側は onmeaage で

はなく onconnect でメッセージ受信EventLisntener を使う場

合、 start() を呼んで Worker で始める

Page 24: Web Workers

//共有ワーカーを生成var worker = new SharedWorker("sworker.js");

worker.port.onmessage = function(e){ console.log(e.data);// ports = xx};

//共有ワーカーにメッセージ送信Worker.port.postMessage();

メインスクリプト

Page 25: Web Workers

//コネクション数のカウントvar connect = 0;

//受信メソッドonconnect = function(e){connection++;

e.ports[0].postMessage("ports = " + connection);}

Worker スクリプト

Page 26: Web Workers

Parallel.js

Page 27: Web Workers

以上ですご清聴ありがとうございました