Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个web worker代码是多线程的吗?我有什么收获吗_Javascript_Html_Web Worker - Fatal编程技术网

Javascript 这个web worker代码是多线程的吗?我有什么收获吗

Javascript 这个web worker代码是多线程的吗?我有什么收获吗,javascript,html,web-worker,Javascript,Html,Web Worker,我有如下web工作者代码和onMessage处理程序,定义如下 var worker = new Worker('worker.js'); worker.addEventListener('message', function(e){ App.store.loadMany(App.Activity, e.data); }); worker.postMessage(structure); 我的web worker代码在worker.js中所做的全部工作就是调用onmessage回调并传回

我有如下web工作者代码和onMessage处理程序,定义如下

var worker = new Worker('worker.js');

worker.addEventListener('message', function(e){
  App.store.loadMany(App.Activity, e.data);
});

worker.postMessage(structure);
我的web worker代码在worker.js中所做的全部工作就是调用onmessage回调并传回传入的对象:

self.addEventListener('message', function(e){ 
  self.postMessage(e.data);
}, false);

我有点不确定这段代码是否是多线程的,我想它不是,如果我想知道这样做是否有什么好处。

您的工作人员将一条消息回显到GUI线程,然后该线程必须调用
App.store.loadMany()
。因此,在这种情况下没有任何好处

如果将主GUI线程更改为:

var worker = new Worker('worker.js');
worker.postMessage(structure);
以及您的worker.js

self.addEventListener('message', function(e){
  App.store.loadMany(App.Activity, e.data);
  self.postMessage('done');
});
您将把
App.store.loadMany()
的工作放入Worker线程。这是假设
App.store.loadMany()
可以在辅助进程中运行。工作者的工作有一些限制


这是一个很好的教程。

通过这种方式你不会得到任何东西,但它运行在不同的线程中。您可以通过在worker中编写无限循环来测试这一点,并查看父脚本是如何保持响应的。如果它在不同的线程中运行,为什么我没有得到任何东西?我想从UI线程中加载它。实际加载是在UI线程中完成的吗?我意识到'worker.js'中的代码运行在不同的线程中,但回调代码将运行在UI线程中?什么加载?您只是在发送一条被发回的消息。只有worker.js中的代码在不同的线程中运行。也就是最后一段。所有其他代码段都在主线程中运行。你到底在装什么?它应该是异步的。我正在将json对象加载到ember数据存储中。这就是我遇到的问题。您是否知道如何在UI线程和工作线程中访问App.store?现在它被创建为window.App。您可以尝试将App作为参数传递给worker,看看是否有效。我假设您正在使用emberjs。对吗?