我正在尝试使用Web Workers处理大量数据,并且在将数据传递回主线程进行显示时,我想使用可传输对象来减少对UI线程的影响。
该过程当前导致多维数组也可以包含对象。例如:
[{foo: [{bar: "Alice",
car: 23,
dab: [2, 3, 5]}],
faa: [{moo: {a: [2,3], b: [4,5]} },
{moo: {a: [6,7], b: [8,9]} }]},
{foo: [{bar: "John",
car: 33,
dab: [6, 7, 1]}],
faa: [{moo: {a: [5,5], b: [9,2]} },
{moo: {a: [7,7], b: [4,2]} }]},
...]
我看过这个字符串转换帖子,但是再一次,我看不出如何直接将它应用于我的数组结构: Converting between strings and ArrayBuffers
感谢帮助!
答案 0 :(得分:1)
很多人都有理解这个问题。所以,让我给你一个你的选择和他们做的图像:
postMessage
var object = { ... };
worker.postMessage(object);
object
复制到结构化克隆请注意,创建和解析结构化克隆是通过优化的本机代码完成的。
var object = { ... };
var binary = CreateTypedArrayFromObject(object);
worker.postMessage(binary.buffer, [binary.buffer]);
object
转换为TypedArray
ArrayBuffer
的{{1}}移至[工作人员] TypedArray
我指出的是你想要避免复制,但你还在制作副本,只是这次它不是原生的,而是javascript副本。如果要进行优化,则必须设计数据结构,以便在类型化数组上运行。如果它没有,甚至不尝试使用它们 - 您只需为代码添加额外的开销。