2013-01-19 88 views
1

所以我有這個主要的js文件:HTML5 WebWorker邏輯流程

var worker = new Worker("../Scripts/worker.js"); 
worker.onmessage = function (event) { 
    alert("Worker said : " + event.data); 
}; 
worker.postMessage("Naruto"); 
worker.postMessage("Sakura"); 

和worker.js是在這裏:

self.onmessage = function (event) { 
     self.postMessage("Hi " + event.data); 
}; 

self.postMessage("WHERE'S SASUKE? [1]"); 
self.postMessage("WHERE'S SASUKE? [2]"); 

我還在他們是如何工作的有點糊塗了。但是出來的東西是這樣的(按出場順序):

Worker said: WHERE'S SASUKE? [1] 
Worker said: WHERE'S SASUKE? [2] 
Worker said: Hi Naruto 
Worker said: Hi Sakura 

他們說,要啓動工作,使用postMesage()。

第一個問題: 因此,如果我的主要js文件postMessage(「Naruto」),爲什麼工作人員首先顯示兩個「Where are SASUKE?」然後顯示火影忍者和櫻花?它不應該首先觸發它的onMessage事件,因爲它從主線程收到數據?

第二個問題: 當我postMessage(「火影忍者」),它顯示了兩個「在哪裏SASUKE?」。但爲什麼當我做postMessage(「櫻」),它沒有顯示兩個「在哪裏SASUKE?」?我的意思是,我在主線程中調用了postMessage()兩次,爲什麼只顯示兩個「WHERE'S SASUKE」?它不應該「執行」兩次worker.js,因此看到四個「Where are SASUKE?」? (賜教請)

+0

1 /「他們說要啓動一名工人,請使用postMesage()。「誰說的 ?您將主要「線程」註冊到工作活動中,這隻需從工作人員廣播消息即可。 2從主線程向工作人員廣播消息的地方,看看每次發送消息時,爲什麼工作人員會回覆「Where are SASUKE」,因爲您的腳本沒有這樣做? – mpm

+0

https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers產生一個工人部分。第6行代碼。我也使用了這個術語,但你知道這個意思 –

+0

除了這個例子沒有發佈來自worker的消息,這也啓動了工作線程 – mpm

回答

1

一些註釋可以幫助你瞭解這是怎麼回事

main.js

var worker = new Worker("../Scripts/worker.js"); 

// register handler, 
// code is executed only when a message is received from worker 
worker.onmessage = function (event) { 
    alert("Worker said : " + event.data); 
}; 

worker.js

// register onmessage handler , 
// code will not be executed at this point but only when you post a message 
self.onmessage = function (event) { 
     self.postMessage("Hi " + event.data); 
}; 

// these are executed immediately 
// they will be executed only once during the 'new Worker' part 
self.postMessage("WHERE'S SASUKE? [1]"); 
self.postMessage("WHERE'S SASUKE? [2]"); 
+0

「//這些會立即執行 //在'新工人'部分」 有意義時,它們將只執行一次..感謝 –