Google Gears を使って Game of Life を作る: その2 - Workerpool について
- Date
- 2007-07-08 (Sun)
- Category
- Google | javascript
暫く間があきました。6月の後半から先週まで、プロジェクト3つが並列に走っていたので、ちょっと時間が取れませんでした。忘れてしまう前に Google Gears の Workerpool について少しまとめておきたいと思います。
- 以前のエントリにも書きましたが、PC のメモリが無限でないように、Workerpool も無限に作る事は出来ません。
- エラーがあるときは、基本的に無言で Firefox ごと落ちます。それが精神的にも良くないし、問題の特定を難しくしていますが、理不尽な仕様やバグなど、僕はまだ聞いていません。つまり無言で落ちるような状況では、おそらく自身のコードを疑うべきでしょう。
- Worker が他の object とメッセージ交換する方法は、worker の id を指定してメッセージを送るだけ、それのみです。String や Number 以外のものをやり取りしようと思ったら、Object を JSON にシリアライズして、それを eval するしかないようです。ここでメモリが共有できたりすればスピードアップでも出来そうだけれども。
- Worker を作る時に、その Worker がすべき作業書のようなものをスクリプトとして渡さなければいけません。mycom の "重たいJavaScript処理"もこれで解決! - Google Gearsのワーカプールを試す や本家 Google の Google Gears WorkerPool Demo では オブジェクトをStringのコンストラクタとして渡して、JSON シリアライズをやっていますが、まず僕にとってその方法が直感的でないし、将来 Safari なんかで動くようになった時にそれでは動かないでしょう。それにメインで使わない関数で object の名前空間を汚染するのもやだし。
そこで別の方法を考えました。Here Document が使えれば一番いいんだけれどもブラウザ上の Javascript 実装にはそんな機能は存在しません。結局 HTML の pre タグ内にコードを書き込んでおいて、それを取得する、という形にしました。その時ただ読み込むだけだと、Browser が勝手に挿入する WBR 要素と、大なり/小なり記号が実体参照に変換されてしまうのでそれだけ変換するようにしました。コードは以下。
Union.prototype.initScript = function (elm_id) { // workscript holder should be <pre> tag or // you have to set white-space: pre on CSS property. var elm_pre = $(elm_id); var script = ""; var len = elm_pre.childNodes.length; for (var i = 0; i < len; ++i) { switch (elm_pre.childNodes[i].nodeName) { case '#text': script += elm_pre.childNodes[i].nodeValue; case 'WBR': default: // do nothing; } } return script.replace(new RegExp(/\<\;/), '<').replace(new RegExp(/\>\;/), '>'); } - Main Thread から Worker にメッセージを送る場合、Workerpool オブジェクトのインスタンスを使っての sendMessage メソッドを使ってメッセージを送ります。
- 逆に各 Worker から、メッセージを送り返す場合は google.gears.workerPool.sendMessage という static メソッドを使います。しかしこの static method は Firefox の DOM Inspector には出てきません。あと、Google の例では gearsWorkerPool.sendMessage という別のメソッドを使っています。興味深いですね…
そんな所でしょうか。あとまた気がついたら追記します。
Comment:0
Trackback:0
- TrackBack URL for this entry
- http://blogs.grf-design.com/mt/mt-tb.cgi/221
- Listed below are links to weblogs that reference
- Google Gears を使って Game of Life を作る: その2 - Workerpool について from The Croton