Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Übertragbare Objekte sind Objekte, die Ressourcen besitzen, die von einem Kontext in einen anderen übertragen werden können. Dies stellt sicher, dass die Ressourcen jeweils nur in einem Kontext verfügbar sind. Nach einer Übertragung ist das ursprüngliche Objekt nicht mehr verwendbar; es verweist nicht mehr auf die übertragene Ressource, und ein Versuch, das Objekt zu lesen oder zu schreiben, führt zu einer Ausnahme.
Übertragbare Objekte werden häufig verwendet, um Ressourcen zu teilen, die nur sicher einem einzigen JavaScript-Thread gleichzeitig zugänglich gemacht werden können. Zum Beispiel ist ein ArrayBuffer ein übertragbares Objekt, das einen Speicherblock besitzt. Wenn ein solches Puffer zwischen Threads übertragen wird, wird die zugehörige Speicherressource vom ursprünglichen Puffer getrennt und an das im neuen Thread erstellte Pufferobjekt angehängt. Das Pufferobjekt im ursprünglichen Thread ist nicht mehr verwendbar, da es keine Speicherressource mehr besitzt.
Das Übertragen kann auch genutzt werden, wenn tiefe Kopien von Objekten mit structuredClone() erstellt werden. Nach dem Klonvorgang werden die übertragenen Ressourcen bewegt, anstatt kopiert zu werden, zu dem geklonten Objekt.
Sowohl für postMessage() als auch structuredClone() müssen übertragene Ressourcen an das Datenobjekt angehängt werden, da sie andernfalls auf der Empfängerseite nicht verfügbar wären, da das übertragbare Array nur angibt, wie bestimmte Ressourcen gesendet werden sollen, jedoch diese nicht tatsächlich sendet (obwohl sie immer getrennt werden würden).
Der Mechanismus, der verwendet wird, um die Ressourcen eines Objekts zu übertragen, hängt vom Objekt ab. Zum Beispiel wird bei der Übertragung eines ArrayBuffer zwischen Threads die Speicherressource, auf die es verweist, buchstäblich zwischen Kontexte in einem schnellen und effizienten Zero-Copy-Vorgang verschoben. Andere Objekte können durch Kopieren der zugehörigen Ressource und anschließendes Löschen aus dem alten Kontext übertragen werden.
Nicht alle Objekte sind übertragbar. Eine Liste der übertragbaren Objekte wird unten bereitgestellt.
Der folgende Code demonstriert, wie Übertragung funktioniert, wenn eine Nachricht von einem Hauptthread zu einem Web-Worker-Thread gesendet wird. Die Uint8Array wird im Worker kopiert (dupliziert), während ihr Puffer übertragen wird. Nach der Übertragung führt jeder Versuch, uInt8Array vom Hauptthread zu lesen oder zu schreiben, zu einem Fehler, aber Sie können immer noch die byteLength überprüfen, um zu bestätigen, dass sie jetzt null ist.
Hinweis: Typisierte Arrays wie Int32Array und Uint8Array sind serialisierbar, aber nicht übertragbar. Ihr zugrundeliegender Puffer ist jedoch ein ArrayBuffer, ein übertragbares Objekt. Wir hätten uInt8Array.buffer im Datenparameter senden können, aber nicht uInt8Array im Transfer-Array.
Der folgende Code zeigt eine structuredClone()-Operation, bei der der zugrunde liegende Puffer vom ursprünglichen Objekt auf den Klon kopiert wird.
Schnittstellen, die übertragen werden können, sollten diese Information in ihrer Einführung enthalten.
Einige der Elemente, die laut verschiedenen Spezifikationen übertragen werden können, sind unten aufgelistet (diese Liste ist möglicherweise nicht erschöpfend!):
Hinweis: Übertragbare Objekte sind in Web IDL-Dateien mit dem Attribut [Transferable] gekennzeichnet. Die Unterstützung durch Browser kann in den jeweiligen Kompatibilitätsinformationen des Objekts durch die Unterfunktion transferable angegeben werden (siehe RTCDataChannel für ein Beispiel).
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.