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
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 cloningworker.postMessage({ buffer: largeBuffer }, [largeBuffer]);console.log(largeBuffer.byteLength); // 0 (detached)// worker.jsself.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.