Interface
Interface: Transferable
Objects may implement the Transferable interface to create their own
custom transferable objects. This is useful when an object being
passed into or from a worker contains a deeply nested transferable
object such as an ArrayBuffer or MessagePort.
Transferable objects expose two properties inspected by Piscina
to determine how to transfer the object. These properties are
named using the special static Piscina.transferableSymbol and
Piscina.valueSymbol properties:
-
The
Piscina.transferableSymbolproperty provides the object (or objects) that are to be included in thetransferList. -
The
Piscina.valueSymbolproperty provides a surrogate value to transmit in place of theTransferableitself.
Both properties are required.
For example:
const {
move,
transferableSymbol,
valueSymbol
} = require('piscina');
module.exports = () => {
const obj = {
a: { b: new Uint8Array(5); },
c: { new Uint8Array(10); },
get [transferableSymbol]() {
// Transfer the two underlying ArrayBuffers
return [this.a.b.buffer, this.c.buffer];
}
get [valueSymbol]() {
return { a: { b: this.a.b }, c: this.c };
}
};
return move(obj);
};