首页 > 解决方案 > 有没有办法将对象数组作为可转移对象传递给网络工作者?

问题描述

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

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

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

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

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

标签: javascriptmultidimensional-arrayweb-workertransferable

解决方案


不是直接的,而是ArrayBuffers可以SharedArrayBuffers传输给网络工作者,如果你的数据和你的例子一样统一,那么可以将数据存储在数组缓冲区而不是对象数组中。

代替

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));

然后也使用 worker 中的数据视图将其读回。这将允许您使用可转让项目将数据传输给工作人员。当然,这一切都取决于您的数据及其结构。


推荐阅读