JavaScriptからFlashに処理を委譲するのは前途多難ぽい
30分かけて書いた記事が全部消えたので書き直しだぜ!
ところで、Flash も重い処理を行うとブラウザが固まりますよ。PaperVision 3d のサンプルとかは、なかなか派手に固まります。
結局、やることと言えば、setTimeout での処理のぶつ切りです。
(GreasemonekyからFlashに処理を委譲するサンプル(途中) - やればできる子の日記のコメントより)
ということで、結局Flashに処理を委譲するのはダメぽいです。寝る!
寝る前に、今までの経緯をまとめます。
やりたいことは、こんな感じ。
- 現在表示しているページ(wikipedia等)の内容に対し重い処理を行い、処理結果をサーバに送りたい。
- JavaScrptで全部処理してしまうとブラウサが固まってしまうため現実的でない。
解決案は以下の通り。
- 案0:setTimeout()で処理を細切れにする。
- 面倒だからやりたくないなあ……。
- 案1:GearsMoneky(Google Gears + Greasemonkey)でマルチスレッド
- Google GearsにはWorkerPoolというJS上でマルチスレッドする仕組みがあるので、それをGMから呼び出せば並行処理できるんじゃないか。
- ブラウザがクラッシュする。ダメ。
- 案2:GMからFlashを読み込み、Flashに処理を委譲する
- 「Flashはブラウザとは違うスレッドで動いているはずだから、Flashに処理を任せればブラウザが固まらずに済むのではないか」という案。
- FlashとJavaScript間の通信はExternalInterfaceクラスを使って行うことができる。
- Flashに重い処理をさせるとブラウザも固まるらしい。無念。
- 案3:Concurrent.Threadで同期処理
- 案4:JavaAppletに処理を委譲する。
- JavaAppletはスレッドを作れるので、マルチスレッドで処理できるのは確実だろう。
- アプレットの読み込みそのものが重くてブラウザが固まる。意味ないやん。
- 案5:SilverLightに処理を委譲する。
- SilverLightのCLRってスレッド作れるんやろうか。
- SilverLightってJavaScriptと通信できるんやろうか。
- 次の調査対象はコレだ!
と言うわけで、次はSilverLightかなぁ……。
ここ数週間で、PythonやらJavaScriptやらActionScript3やら慣れない言語に次々手を出してますが、次はC#かぁ。EnterpriseArchitectのプラグインを作ったくらいしか経験無いぞ。大丈夫か。