0 Tage Serie
javascript / expert
Snippet

Zero-Copy Datentransfer mit Transferable-Objekten

Transferable-Objekte wie ArrayBuffer oder MessagePort können ohne Klonen zwischen Ausführungskontexten (z. B. Haupt-Thread zu Web-Worker) verschoben werden. Dies ist eine Zero-Copy-Operation, die den Overhead der Serialisierung eliminiert, wobei das Objekt im ursprünglichen Kontext unbrauchbar ('detached') wird.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
const worker = new Worker('worker.js');
const largeBuffer = new Uint8Array(1024 * 1024 * 100).buffer; // 100MB
// Transfer ownership instead of cloning
worker.postMessage({ buffer: largeBuffer }, [largeBuffer]);
console.log(largeBuffer.byteLength); // 0 (detached)
// worker.js
self.onmessage = (e) => {
const buffer = e.data.buffer;
console.log('Received 100MB buffer instantly');
};
nextjs
Erklärung
1
[largeBuffer]
Das zweite Argument von postMessage definiert die Objekte, deren Eigentümerschaft übertragen wird.
2
largeBuffer.byteLength // 0
Nach der Übertragung ist der Buffer vom Haupt-Thread getrennt und hat die Länge Null.