有没有办法将一组对象作为可传输对象传递给网络工作者?
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"}];
有没有办法将这些作为可传输对象传递给网络工作者实例?
不直接,但 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));
然后也使用工作程序中的数据视图将其读回。这将使您可以使用可转移项目将数据转移给工作人员。当然,这一切都取决于您的数据及其结构。
我正在从事一个 CPU 和内存密集型项目,其中一些处理被发送给网络工作者,以便在处理数字时不会挂起浏览器。 我面临的问题是我需要向 web worker 实例发送一些多维数组,但是在分析应用程序时我意识到它正在克隆数组,所以我想看看我是否将它们作为可传输对象传递。
为简单起见,假设我要传递的数组是:
var myArray1 = [{a: 0, b: "0"}, {a: 1, b: "0"}];
var myArray2 = [{c: 0, d: "0"}, {c: 1, d: "0"}];
有没有办法将这些作为可传输对象传递给网络工作者实例?
不直接,但 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));
然后也使用工作程序中的数据视图将其读回。这将使您可以使用可转移项目将数据转移给工作人员。当然,这一切都取决于您的数据及其结构。