HTML5を業務アプリで使うための勉強会 # 6

今回はWeb Workerでした。 マルチスレッドができなかったJavaScriptでどのように処理をするのか、とても楽しみでしたが、シンプルで使いやすそうでした。 ただ、開発するときに注意することも多そうです。
6
taknb2nch @taknb2nch

本日も倉式珈琲店 青江店で19:00から行います。到着した方から場所の確保をお願いします。混雑状況次第で場所が変更になる可能性があります。 #gdgchugoku / HTML5を業務アプリで使うための勉強会 #6 http://t.co/CtCtWTVYEX #zusaar

2013-04-25 13:33:17
パトラッシュ@中間管理職 @patorash

HTML5勉強会。あ、そういえば先週のやつとぅぎゃってない。 #gdgchugoku

2013-04-25 19:07:45
パトラッシュ@中間管理職 @patorash

遅い処理は別スレッドでやろうぜ!それがWebWorker API。 #gdgchugoku

2013-04-25 19:14:22
パトラッシュ@中間管理職 @patorash

Workerは専用ワーカー。SharedWorkerは共有ワーカー。SharedWorkerはマルチページから呼べる。 #gdgchugoku

2013-04-25 19:21:06
パトラッシュ@中間管理職 @patorash

とりあえずSharedWorkerは難しそうというかつかいどころが難しそうなので割愛。 #gdgchugoku

2013-04-25 19:22:05
パトラッシュ@中間管理職 @patorash

onerrorイベント。ワーカー側で発生したエラーをメインスレッド側で取れる。 #gdgchugoku

2013-04-25 19:24:15
パトラッシュ@中間管理職 @patorash

terminateメソッドでワーカースレッドを終了させる。完全に終了。 #gdgchugoku

2013-04-25 19:25:01
パトラッシュ@中間管理職 @patorash

postMessageメソッド。ワーカースレッドにメッセージを送信する。これでスレッド間のやりとりを行う。onmessageイベントがコールバックされる。 #gdgchugoku

2013-04-25 19:27:27
パトラッシュ@中間管理職 @patorash

子スレッド同士のやりとりはできないので親スレッドを中継しないとできない? #gdgchugoku

2013-04-25 19:28:33
パトラッシュ@中間管理職 @patorash

親スレッドから子スレッドを止めるときは、terminateメソッドだが、子スレッド自身でスレッドを止めるときはcloseメソッド。 #gdgchugoku

2013-04-25 19:30:27
パトラッシュ@中間管理職 @patorash

importScriptsメソッドでJSを読み込んで実行。 #gdgchugoku

2013-04-25 19:32:38
パトラッシュ@中間管理職 @patorash

ErrorEvent は、デバッグに役立つメッセージが豊富。サブスレッドで他のJSを読み込むからデバッグするときわからなさそうだけどこいつを使うといいとか。 #gdgchugoku

2013-04-25 19:37:06
パトラッシュ@中間管理職 @patorash

メインスレッド側でvar worker = new Worker('ワーカーで実行する処理.js'); #gdgchugoku

2013-04-25 19:39:27
パトラッシュ@中間管理職 @patorash

ワーカースレッドを終了させるには、terminateメソッドを実行するが、終了させるとワーカースレッドが再開できない。postMessageメソッドで処理を停止しておくようなメッセージを送るのがいいのではないか? #gdgchugoku

2013-04-25 19:42:26
パトラッシュ@中間管理職 @patorash

サンプルコードでワーカースレッドを終了させたら、もうボタンを押しても反応しなくなった。 #gdgchugoku

2013-04-25 19:44:56
パトラッシュ@中間管理職 @patorash

Androidとかと同じで、UIスレッドと分けてあるからサブスレッドからUIいじろうとするとエラーになるよ。 #gdgchugoku

2013-04-25 19:47:42
パトラッシュ@中間管理職 @patorash

エラーオブジェクトにエラーが起きたところの情報が入っているので、サブスレッド側の情報を取れる。ワーカースレッド同士の通信はできない。 #gdgchugoku

2013-04-25 19:49:42
パトラッシュ@中間管理職 @patorash

ワーカースレッドの処理を別ファイル側に書いてしまうというのはわかりやすくていいね。 #gdgchugoku

2013-04-25 19:51:17
パトラッシュ@中間管理職 @patorash

postMessageを投げ合って通信する。onmessageコールバックで受け取り処理する。シンプルっちゃシンプル。 #gdgchugoku

2013-04-25 19:52:33
パトラッシュ@中間管理職 @patorash

ワーカースレッドに読み込ませるJSファイルのパスだが、今ロードしているhtmlファイルが起点になる。たぶん絶対パスもいけると。 #gdgchugoku

2013-04-25 19:54:14
パトラッシュ@中間管理職 @patorash

ワーカースレッドはちゃんと終了させようね。 #gdgchugoku

2013-04-25 19:57:41
パトラッシュ@中間管理職 @patorash

ワーカースレッド側のJSでimportScriptsでライブラリ的JSを指定するとそっちで定義してある関数が呼べる。 #gdgchugoku

2013-04-25 20:05:07