这个 Web worker 代码是多线程的吗,我是否获得了什么

Is this web worker code multi-threaded and am I gaining anything

本文关键字:是否 获得了 什么 worker Web 代码 多线程 这个      更新时间:2023-09-26

我有以下 web worker 代码和 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);

和您的工作人员.js

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

您将App.store.loadMany()的工作放入工作线程中。这是假设App.store.loadMany()可以在 worker 中运行。对于工作人员可以执行的操作有一些限制。

这里有一个很好的教程。