有没有办法将对象数组作为可转移对象传递给 Web 工作者



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

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

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

{a: 1, b: "0"}];

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

{c: 1, d: "0"}];

有没有办法将这些对象作为可转移对象传递给 Web worker 实例?

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

而不是

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

然后使用辅助角色中的数据视图将其读回。这将允许您使用可转移物料将数据传输给工作人员。当然,这一切都取决于您的数据及其结构。

最新更新