SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Web Workersを
          使おう
   2010/01/23
   mollifier
   http://d.hatena.ne.jp/mollifier/
   Web Workers とは
   Web Workers の使い方
   活用できる場面
   Web Workers とは
   Web Workers の使い方
   活用できる場面
Web Workersは、
新しいJavaScript
の機能
例えば、
JavaScriptで
足し算したい場合
素朴な書き方
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());
}
計算してる間
ブラウザが反応し
ない
Web Workersを
使うと解決する
というわけでデモ
Web Workersを
使うとバックグラ
ウンドで処理を実
行できる
   Web Workers とは
   Web Workers の使
    い方
   活用できる場面
Web Workers の
コードってどうい
う風に書くの?
簡単な例として、
入力した数字まで
の合計を計算して
みる
まずは HTML ファ
イル
<!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>
普通です。
特に変わったとこ
ろは無し。
つぎに、
JavaScript
ファイル
main.js
worker.js

二つファイルを
作った
main.js              worker.js

  ブラウザ本体側               バックグラウンド処理


             計算してくれ !


                                  計算する

                  計算したよ !

表示する
main.js の中身
(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);
})();
// バックグラウンドで計算を行う
// ワーカを作成する。
// 引数として JavaScript ファイルの
// URL を指定する。
var worker =
  new Worker("worker.js");

// この時点ではまだ計算を開始しない。
// バックグラウンドで計算を開始する
// (num には数字が入っている)
worker.postMessage(num);
// 計算結果をワーカーから受けとる
worker.onmessage =
   function(event) {
     // event.data に
     // 計算結果が入っている
     // ここで結果を表示する
};
worker.js の中身
これがバックグラウ
ンドで行われる処理
// バックグラウンド処理を登録する
onmessage = function(event) {
  // main.js の
  // worker.postMessage(num);
  // が呼び出されたとき、
  // ワーカー側では
  // この関数が実行される

  // ... 次のページに続く
};
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);
};
main.js                      worker.js

new Worker()       (1) worker が作られる


                (2) postMessage


                                          (3) onmessage

                        (4) postMessage

(5) onmessage
   Web Workers とは
   Web Workers の使い方
   活用できる場面
じゃあ、これって
いつ使うの?
現状では
別にいらない。
無くても大丈夫。
それでも、どん
な場面で役に立
つか考えてみた
1. 画像の処理を
する場合
JavaScript で
動的に画像を作
成する
たぶん重たい処
理になる
その間もブラウ
ザ本体の操作が
できる
2. ローカルの
データを扱う場合
例えば
Web Storage
Web Database
クライアント側で
データベースを扱
う場合
データベースのア
クセスを
Web Workers で
読み書きしている
間もブラウザ本体
の操作ができる
3. 巨大な数値、
文字列を扱う場合
例えば
データ圧縮
暗号化
もしやるとなった
ら、かなり重たい
処理になる
その間も普通のブ
ラウザ操作ができ
るように
というわけで、現
状では活用例が無
いけど
Web Workers の
登場で、
JavaScript 側に
重たい処理をまか
せられる可能性が
出てきた
ひょっとしたら
流行るかもしれ
ません
というわけで、
新しい可能性の紹
介でした
ありがとう
ございました

Mais conteúdo relacionado

Mais procurados

WebGL and Three.js
WebGL and Three.jsWebGL and Three.js
WebGL and Three.jsyomotsu
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描くAtsushi Tadokoro
 
Metro スタイル アプリで印刷
Metro スタイル アプリで印刷Metro スタイル アプリで印刷
Metro スタイル アプリで印刷Mitsuhito Ishino
 
メディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描くメディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描くAtsushi Tadokoro
 
ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用Sho Okada
 
cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法賢 秋穂
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングAtsushi Tadokoro
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackTaketo Sano
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~Unity Technologies Japan K.K.
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
Vue.js でタイマーを作る
Vue.js でタイマーを作るVue.js でタイマーを作る
Vue.js でタイマーを作るmizdra
 
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)Ryuma Tsukano
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6TanUkkii
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテストYoichiro Sakurai
 
背景にCanvasを動かす
背景にCanvasを動かす背景にCanvasを動かす
背景にCanvasを動かすtakashi umezu
 

Mais procurados (20)

WebGL and Three.js
WebGL and Three.jsWebGL and Three.js
WebGL and Three.js
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
情報編集(Web) HTML5 実践1 Canvas + Javascriptで図形を描く
 
Metro スタイル アプリで印刷
Metro スタイル アプリで印刷Metro スタイル アプリで印刷
Metro スタイル アプリで印刷
 
メディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描くメディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描く
 
ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用
 
cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
 
Objective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & HackObjective-C が好きになる Tips & Hack
Objective-C が好きになる Tips & Hack
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
One night Vue.js
One night Vue.jsOne night Vue.js
One night Vue.js
 
20090212
2009021220090212
20090212
 
Vue.js でタイマーを作る
Vue.js でタイマーを作るVue.js でタイマーを作る
Vue.js でタイマーを作る
 
introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)introduction to Marionette.js (jscafe14)
introduction to Marionette.js (jscafe14)
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
 
MlnagoyaRx
MlnagoyaRxMlnagoyaRx
MlnagoyaRx
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテスト
 
背景にCanvasを動かす
背景にCanvasを動かす背景にCanvasを動かす
背景にCanvasを動かす
 

Destaque

Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012
Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012
Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012Electro World Türkiye
 
гзн васильева т.в
гзн васильева т.вгзн васильева т.в
гзн васильева т.вAtner Yegorov
 
Mediatechnologyworkneedtocomplete
MediatechnologyworkneedtocompleteMediatechnologyworkneedtocomplete
Mediatechnologyworkneedtocompletearfa4739
 
Doce meses
Doce mesesDoce meses
Doce mesesLorian
 
Social innovations
Social innovationsSocial innovations
Social innovationsOlena Ursu
 
Don't stop me now
Don't stop me nowDon't stop me now
Don't stop me nowIan Nield
 
Ee2352 ssd may june 2014
Ee2352 ssd may june 2014Ee2352 ssd may june 2014
Ee2352 ssd may june 2014aaru 432
 

Destaque (9)

Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012
Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012
Yüzyılın İndirimi 28 Aralik 2011 - 01 Ocak 2012
 
гзн васильева т.в
гзн васильева т.вгзн васильева т.в
гзн васильева т.в
 
Leren onderzoeken op het HLO
Leren onderzoeken op het HLOLeren onderzoeken op het HLO
Leren onderzoeken op het HLO
 
Mediatechnologyworkneedtocomplete
MediatechnologyworkneedtocompleteMediatechnologyworkneedtocomplete
Mediatechnologyworkneedtocomplete
 
Doce meses
Doce mesesDoce meses
Doce meses
 
Social innovations
Social innovationsSocial innovations
Social innovations
 
Don't stop me now
Don't stop me nowDon't stop me now
Don't stop me now
 
Ee2352 ssd may june 2014
Ee2352 ssd may june 2014Ee2352 ssd may june 2014
Ee2352 ssd may june 2014
 
Frog fish cheese
Frog fish cheeseFrog fish cheese
Frog fish cheese
 

Semelhante a Try Webworkers

Web Workers
Web WorkersWeb Workers
Web Workerskaboccha
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料codeal
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Hideki Hashizume
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和schoowebcampus
 
Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programmingtakesako
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Daizen Ikehara
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-EdoYuji Takayama
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)fumoto kazuhiro
 

Semelhante a Try Webworkers (20)

Web Workers
Web WorkersWeb Workers
Web Workers
 
Lt 111217
Lt 111217Lt 111217
Lt 111217
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
Hadoop jobbuilder
Hadoop jobbuilderHadoop jobbuilder
Hadoop jobbuilder
 
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programming
 
About Jobs
About JobsAbout Jobs
About Jobs
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発Knockout.js を利用したインタラクティブ web アプリケーション開発
Knockout.js を利用したインタラクティブ web アプリケーション開発
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-Edo
 
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
 

Try Webworkers