SlideShare a Scribd company logo
1 of 27
JavaScriptで
マルチスレッドプログラミング
     @kabochha
   JavaScriptでマルチスレッド
    プログラミングをしたい
 JavaScriptでマルチスレッド
  プログラミングをしたい
 ってわけでWebWorkerを試し
  てみよう!と
 JavaScriptでマルチスレッド
  プログラミングをしたい
 ってわけでWebWorkerを試し
  てみよう!と
 思ったんですが…
Web Workersとは

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

 高負荷な計算処理などをUI以外のス
  レッドで実行するための機能
 独立したスレッドなので、UI側のメ
  モリやCPUリソースに影響せずにタ
  スクを実行できる
Web Workerでできること
 navigatorオブジェクト
 locationオブジェクト(読み取り専用)
 XMLHttpRequest関数(Ajax)
 アプリケーションキャッシュ
 importScriptsを使ったJSONP
 その他のWeb Workersの生成
 下記windowオブジェクト
 バイナリデータとBase64ASCⅡを相互変換する
  atob(),bota()にsetTimeout()、clearTimeout()、
  setInterval()、clearInterval()、dump()
できないこと

windowオブジェクト
documentオブジェクト
parentオブジェクト
使いどころ
 大きなJSONや文字列の処理
 Canvasなどでのフィルタリング処理
 動画や音声の解析、処理
 複雑な計算(暗号化、3Dポジショニ
  ング、素数計算など)
 データの先読み、キャッシュ
 スペルチェックなどの構文解析
 IndexedDBを用いたデータ処理
ブラウザ対応度




http://caniuse.com
ブラウザ対応度 shared worker




http://caniuse.com
スマートフォンだと
 mobile Safariは5.0から
 Android Browerは2.1のみ
 Andorid Chromeは専有ワーカーのみ
  対応
スマートフォンだと
 mobile Safariは5.0から
 Android Browerは2.1のみ
 mobile Chromeは専有ワーカーのみ対
  応


というわけで現状だと使い
    にくい
Web Workersの種類


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


   自分自身を起動したスクリプトとの
    み通信できる
使い方
1.   Workerコンストラクタを呼び出す
2.   Web workersが送ってくるメッセー
     ジを受け取るメソッド(onmessage)
     を用意
3.   Workerの開始(postMessage)
4.   Web Worker側でもonmessageと
     postMessageを用意する
メインスクリプト
//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’);
Worker素クリプト

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

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

 動的にWorkerを生成したい
 Ⅰ枚のHTMLファイルで済ませたい
 Chromeの拡張機能としてバンドルし
  たい
使い方

1.   BlobBuilderとcreateObjectURLを
     使ってWorker用ファイルを構築する
2.   1を使ってWorkerオブジェクトを生
     成する
3.   ごにょごにょする
//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');
共有ワーカー

 ユーザー認証や接続状況をⅠヶ所に
  まとめて参照できる
 別window間のデータの一貫性を保証
  する
   モデルをⅠつの場所に集めることが
    できる
使い方

 new SharedWorkerで生成
 SharedWorker側はonmeaageではなく
  onconnectでメッセージ受信
 EventLisntenerを使う場合、start()を
  呼んでWorkerで始める
メインスクリプト
//共有ワーカーを生成
var worker = new SharedWorker("sworker.js");

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

//共有ワーカーにメッセージ送信
Worker.port.postMessage();
Workerスクリプト
//コネクション数のカウント
var connect = 0;

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

e.ports[0].postMessage("ports = " + connection);
}
Parallel.js
以上です
ご清聴ありがとうございました

More Related Content

What's hot

Vue.jsでさくっとMVVM
Vue.jsでさくっとMVVMVue.jsでさくっとMVVM
Vue.jsでさくっとMVVMSatoshi Anai
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_codeSugawara Genki
 
React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話GIG inc.
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示するregret raym
 
Chef+serverspec+werckerでインフラCIする話
Chef+serverspec+werckerでインフラCIする話Chef+serverspec+werckerでインフラCIする話
Chef+serverspec+werckerでインフラCIする話Masayuki Morita
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発 daisuke-a-matsui
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作Sugawara Genki
 
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話yoshioka_cb
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始めynaruta
 
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜Kazuya Hiruma
 
Introduction for Browser Side MVC
Introduction for Browser Side MVCIntroduction for Browser Side MVC
Introduction for Browser Side MVCRyunosuke SATO
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -Hayato Mizuno
 
あの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らはあの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らはMuyuu Fujita
 
#7 Controller
#7 Controller#7 Controller
#7 ControllerT0M0Macii
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたfirewood
 
Angular の紹介
Angular の紹介Angular の紹介
Angular の紹介Neo Xrea
 

What's hot (20)

densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
Vue.jsでさくっとMVVM
Vue.jsでさくっとMVVMVue.jsでさくっとMVVM
Vue.jsでさくっとMVVM
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_code
 
React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
Chef+serverspec+werckerでインフラCIする話
Chef+serverspec+werckerでインフラCIする話Chef+serverspec+werckerでインフラCIする話
Chef+serverspec+werckerでインフラCIする話
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
 
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話
 
REACT & WEB API
REACT & WEB APIREACT & WEB API
REACT & WEB API
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
 
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
 
Introduction for Browser Side MVC
Introduction for Browser Side MVCIntroduction for Browser Side MVC
Introduction for Browser Side MVC
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
あの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らはあの時AngularJSと出会った僕らは
あの時AngularJSと出会った僕らは
 
#7 Controller
#7 Controller#7 Controller
#7 Controller
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べた
 
Ruby風Swift NSOperation編
Ruby風Swift NSOperation編Ruby風Swift NSOperation編
Ruby風Swift NSOperation編
 
Angular の紹介
Angular の紹介Angular の紹介
Angular の紹介
 

Similar to Web Workers

20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows PhoneKenji Wada
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょKohki Nakashima
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門miso- soup3
 
ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験miso- soup3
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますfukuoka.ex
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideYusuke Tochigi
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころMasayuki Wakizaka
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWINYoshifumi Kawai
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすKUNITO Atsunori
 
Spring native について
Spring native についてSpring native について
Spring native についてTakamasa Mitsuji
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編ksimoji
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコムTomoyaTakegoshi
 
進化する Web ~ Progressive Web Apps の実装と応用 ~
進化する Web  ~ Progressive Web Apps の実装と応用 ~進化する Web  ~ Progressive Web Apps の実装と応用 ~
進化する Web ~ Progressive Web Apps の実装と応用 ~Microsoft Azure Japan
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 

Similar to Web Workers (20)

20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょ
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころ
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
 
Spring native について
Spring native についてSpring native について
Spring native について
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
進化する Web ~ Progressive Web Apps の実装と応用 ~
進化する Web  ~ Progressive Web Apps の実装と応用 ~進化する Web  ~ Progressive Web Apps の実装と応用 ~
進化する Web ~ Progressive Web Apps の実装と応用 ~
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 

Web Workers