I\'m trying to use Web Workers to process large volumes of data, and when passing data back to the main thread for display, I would like to use a transferable object to redu
Lot's of people have problem understanding this. So let me give you a image of your options and what they do:
postMessage
with your datavar object = { ... };
worker.postMessage(object);
object
to structured cloneNote that creating and parsing structured clone is done by optimized native code.
var object = { ... };
var binary = CreateTypedArrayFromObject(object);
worker.postMessage(binary.buffer, [binary.buffer]);
object
to TypedArray
ArrayBuffer
of the TypedArray
to the [Worker]ArrayBuffer
What I'm pointing out is that you wanted to avoid copy, but you're still making a copy, only this time it's not native but javascript copy. If you want to optimize, you have to design your data structure so that it operates on typed arrays. If it doesn't, just don't even try to use them - you will just add extra overhead to your code.