2013-01-19 51 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

“//这些会立即执行 //在'新工人'部分” 有意义时,它们将只执行一次..感谢 –