有没有一种方法可以将对象数组作为可转移对象传递给网络工作者?

时间:2018-12-20 23:29:32

标签: javascript multidimensional-array web-worker transferable

我正在处理一个CPU和内存密集型项目,该项目的某些处理被发送给Web Worker,以便在处理数字时不会挂起浏览器。 我面临的问题是我需要向Web Worker实例发送一些多维数组,但是在对应用程序进行性能分析时,我意识到它正在克隆数组,因此,我尝试查看是否将它们作为可传递对象传递。 / p>

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

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

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

有没有办法将这些作为可传输对象传递给Web Worker实例?

1 个答案:

答案 0 :(得分: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));

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