有没有办法将一组对象作为可传输对象传递给网络工作者?

Is there a way to pass an array of objects to a web worker as a transferable object?

我正在从事一个 CPU 和内存密集型项目,其中一些处理被发送给网络工作者,以便在处理数字时不会挂起浏览器。 我面临的问题是我需要向 web worker 实例发送一些多维数组,但是在分析应用程序时我意识到它正在克隆数组,所以我想看看我是否将它们作为可传输对象传递。

为简单起见,假设我要传递的数组是:

var myArray1 = [{a: 0, b: "0"}, {a: 1, b: "0"}];

var myArray2 = [{c: 0, d: "0"}, {c: 1, d: "0"}];

有没有办法将这些作为可传输对象传递给网络工作者实例?

不直接,但 ArrayBuffersSharedArrayBuffers 可以传输给网络工作者,如果您的数据与您的示例一样统一,那么可以将该数据存储在数组缓冲区中,而不是比一组对象。

而不是

const arr = [{ a: 0, b: '0' }];

您可以将数据存储为

const ab = new ArrayBuffer(2 * 4);
const dv = new DataView(ab);
dv.setFloat32(0, 0);
dv.setUint32(4, '0'.charCodeAt(0));

然后也使用工作程序中的数据视图将其读回。这将使您可以使用可转移项目将数据转移给工作人员。当然,这一切都取决于您的数据及其结构。