Worker でだまされた
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ Worker は悪くないのです
◆ 新し目な機能だしバグありそうという先入観はよくないのです
◆ 新し目な機能だしバグありそうという先入観はよくないのです
ちょっと時間かかりそうな処理があったので Worker 使うことにしました
サンプルなので 配列の値に 100 足したものを返すだけにしてます
配列の要素がいっぱいあって Worker をたくさん起動するとブラウザ落ちるので 単純にこうしてみました
これでちゃんと……… って val が 3 ???!
val は forEach でスコープ作ってるはずだし どうなってるの?
Worker なんてまだ新しめなもの使ってるし バグなのかな
とりあえず beta 版の Chromium で試してみる
かわんない!
特におかしいところなんてないはず
let にしたら?
3
こっちでも全部最後のになる
なにがどうなってるの?
Worker 使うなってことなの?
としばらく悩んだところ
worker は 1 つだけで その onmessage プロパティを毎回上書きしてる!!!!!!!!
そんな初歩的なミスに気づいてしまったのです
worker は悪くありません
worker はちゃんと動くできる子です
安定してなさそうだからと言って 変なとこあったらバグ って先入観はよくないのです
あと 量産するなら使い終わったらちゃんと terminate してあげてください
サンプルなので 配列の値に 100 足したものを返すだけにしてます
;[1,2,3].forEach(val => {
var worker = new Worker("worker.js")
worker.onmessage = function(eve) {
console.log(val, eve.data)
}
worker.postMessage(val)
})
var worker = new Worker("worker.js")
worker.onmessage = function(eve) {
console.log(val, eve.data)
}
worker.postMessage(val)
})
クラッシュ!!
配列の要素がいっぱいあって Worker をたくさん起動するとブラウザ落ちるので 単純にこうしてみました
var worker = new Worker("worker.js")
;[1,2,3].forEach(val => {
worker.onmessage = function(eve) {
console.log(val, eve.data)
}
worker.postMessage(val)
})
;[1,2,3].forEach(val => {
worker.onmessage = function(eve) {
console.log(val, eve.data)
}
worker.postMessage(val)
})
3 101
3 102
3 103
3 102
3 103
これでちゃんと……… って val が 3 ???!
val は forEach でスコープ作ってるはずだし どうなってるの?
Worker なんてまだ新しめなもの使ってるし バグなのかな
とりあえず beta 版の Chromium で試してみる
3 101
3 102
3 103
3 102
3 103
かわんない!
特におかしいところなんてないはず
let にしたら?
"use strict"
var worker = new Worker("worker.js")
for(let i=1;i<=3;i++){
worker.onmessage = function(eve) {
console.log(i, eve.data)
}
worker.postMessage(i)
}
}()
var worker = new Worker("worker.js")
for(let i=1;i<=3;i++){
worker.onmessage = function(eve) {
console.log(i, eve.data)
}
worker.postMessage(i)
}
}()
3
3
3
3
3
3
こっちでも全部最後のになる
なにがどうなってるの?
Worker 使うなってことなの?
としばらく悩んだところ
worker は 1 つだけで その onmessage プロパティを毎回上書きしてる!!!!!!!!
そんな初歩的なミスに気づいてしまったのです
worker は悪くありません
worker はちゃんと動くできる子です
安定してなさそうだからと言って 変なとこあったらバグ って先入観はよくないのです
あと 量産するなら使い終わったらちゃんと terminate してあげてください