我正在处理一个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实例?
答案 0 :(得分: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));
,然后也使用worker中的数据视图将其读回。这样您就可以使用可转让项目将数据转让给工人。当然,这一切都取决于您的数据及其结构。