javascript - 有没有办法将对象数组作为可转移对象传递给网络工作者?
问题描述
我正在开发一个 CPU 和内存密集型项目,其中一些处理被发送到网络工作者,以便在浏览器的数字处理时不挂起浏览器。我面临的问题是我需要向网络工作者实例发送一些多维数组,但是在分析应用程序时我意识到它正在克隆数组,所以我试图看看我是否将它们作为可转移对象传递。
为简单起见,假设我要传递的数组是:
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));
然后也使用 worker 中的数据视图将其读回。这将允许您使用可转让项目将数据传输给工作人员。当然,这一切都取决于您的数据及其结构。
推荐阅读
- reactjs - 无法解析“@material-ui/core/Alert”
- powershell - Powershell 控制台不同于脚本
- django - 如何查看管理面板的所有最近更改,谁做的,什么时候做的?
- javascript - 我不明白 mdn 中循环错误的闭包示例
- discord.py - Discord 机器人在完成音乐之前断开连接
- selenium - 通过 Jenkins 运行 Selenium Maven 项目时出现问题
- c++ - 通过汇编调用 C++ 成员函数(使用 asmjit)
- java - 我可以用一个替换多个易失性读取,因为它们都在 ReentrantLock.lock()/unlock() 中执行
- javascript - 为什么它没有选择我想要的答案?
- python - shell脚本中的字符串解码