developit / workerize-loader

🏗️ Automatically move a module into a Web Worker (Webpack loader)
https://npm.im/workerize-loader
2.31k stars 86 forks source link

Transferable support #51

Open qm3ster opened 6 years ago

qm3ster commented 6 years ago

Hi! Do you think you could include a way to pass Transferable objects correctly? It would be great to be able to return a MessagePort so that the function can return a stream instead of a single value.

developit commented 6 years ago

Absolutely! We added it to greenlet in only a few bytes, the same solution should work reasonably well here. It would only auto-detect transferables passed directly as arguments, not within nested objects:

https://github.com/developit/greenlet/blob/master/greenlet.js#L25-L29

cpoopc commented 5 years ago

look forward to it..

NicolasRannou commented 4 years ago

Hi I'm a bit late to the party but it seems unclear to me... Are transferable objects supported by workerize or not?

developit commented 4 years ago

They are not currently supported.

shayke commented 4 years ago

Absolutely! We added it to greenlet in only a few bytes, the same solution should work reasonably well here. It would only auto-detect transferables passed directly as arguments, not within nested objects:

https://github.com/developit/greenlet/blob/master/greenlet.js#L25-L29

May I ask why only direct arguments? Why not detecting ArrayBuffers nested inside an object or an array?

naoak commented 3 years ago

I was thinking of a way to specify a loader option for how to extract the transferable from the arguments and return value of a worker method, but I realized that it would be impossible to determine the best option for each worker method with just one loader option. Instead, the approach I took was to call setup functions on both the worker and the main thread side to determine how to extract the transferables for each worker method. I've made a helper module to achieve this.

https://github.com/naoak/workerize-transferable