久しぶりの
ブログです。
最近はわりと自堕落的に、
本を読んだり、落書きをしたり、
Unityで遊んだり、ネットワークで遊んだり、
Pythonで遊んだり、Cで遊んだり、
してました。遊んでばっかりだな…
それで自分の底の浅さや至らなさなどを痛感したり、
頑張っていきたいと思ったり。
特に何かを強いられているわけではないのですが、
やはり何かを課さないといけないのでは、とか思い、
兎にも角にも少しでも出来る事をやっていこうと、
そんな感じで。ブログを書いていこうと思ったこの頃。
毎sy…いや、せめて毎月…
特に書くことはないのですが、
何か書かないと、アレなので、
最近ちょっと触ってみたWebWorkerのことでも書こうかなという感じです。
また読みづらい文章書いてるな
などと思いながら読んで頂けると本望です。
WebWorkerのことはわりとMDNさまや、html5rocksさまに色々書かれているので、詳しくはこちらを読んで頂けると幸いです。(投)
Webのことはあまり詳しくないのですが、MDN(Mozilla Developer Network)を眺めているだけで色々わかった気分になるので、とても良い読み物です
html5rocksもとてもワクワクする感じが楽しい。暇なとき、食事のおともに。
結局のところ、
JavaScriptはシングルスレッドなので、スクリプト中のコードは必ず順番に処理されるのですが、
複数のスクリプトを同時に実行したい場合、主にイベントやコールバックを用い、また、非同期処理の結果によって処理を分けたい場合はPromiseAPIなどを用いると思います。多分。
そんなわけですが、
それらは並行処理を擬似的に再現してるわけで、実際のところ、DOMやUIのレンダリングなどと同じメインスレッドで処理しているらしいです。
WebWorkerというものはバックグラウンドでJSファイルを実行する仕組みらしく、表で動いているメインスレッドとは別に、独立したスレッドで動作させる事が出来ます。
たとえば、こんな感じでUIの処理と素数計算が同時に動作するページだと、
画像が動いてる途中で思い処理が走ると、UIの処理が止まってしまいます。
WebWorkerを用いるとUIを止めずに動かすことが出来ます。
外部ファイルにJSファイルを分けるのが面倒なので、HTML5Rocksで紹介されているインラインワーカーを使用して、BlobBuilderが無くなったため、Blobを用いています。
ほかのWorkerの生成方法はここはここで色々紹介されています。
あと、githubのhtmlを表示するのはgithackというのを使ってます。ベンリ。
正直のところ、
外部ファイルにしたり、Blobにしたり、メッセージを送ったり返したり
色々面倒なのですが、
Parallel.jsというのがあるらしいので、そっちで書くとちょっとマシな気がします。
Parallel.jsのデモ(動きは一緒です。
せっかくParalleljsなのだから、もっと並列なコードを書きたい…とか
思ったのですが、
並列で素数を数えるのがわりと難しかったり、mapがうまいこと動かなかったり
だったので、また思い立ったときに書ければな…
みたいなこの頃