Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Dezember 2021 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Das SharedArrayBuffer-Objekt wird verwendet, um einen generischen rohen binären Datenpuffer darzustellen, ähnlich dem ArrayBuffer-Objekt, jedoch so, dass es möglich ist, Ansichten auf gemeinsam genutzten Speicher zu erstellen. Ein SharedArrayBuffer ist kein Transferable Object, im Gegensatz zu einem ArrayBuffer, der übertragbar ist.
Um Speicher mithilfe von SharedArrayBuffer-Objekten von einem Agent im Cluster zu einem anderen zu teilen (ein Agent ist entweder das Hauptprogramm der Webseite oder einer ihrer Webworker), wird postMessage und strukturiertes Klonen verwendet.
Der Algorithmus für strukturiertes Klonen akzeptiert SharedArrayBuffer-Objekte und Typarrays, die auf SharedArrayBuffer-Objekte abgebildet sind. In beiden Fällen wird das SharedArrayBuffer-Objekt an den Empfänger übermittelt, was zu einem neuen, privaten SharedArrayBuffer-Objekt im empfangenden Agent führt (genau wie bei ArrayBuffer). Der gemeinsam genutzte Datenblock, auf den die beiden SharedArrayBuffer-Objekte verweisen, ist jedoch derselbe Datenblock, und ein Nebeneffekt auf den Block in einem Agent wird schließlich im anderen Agent sichtbar.
Gemeinsam genutzter Speicher kann gleichzeitig in Workern oder dem Hauptthread erstellt und aktualisiert werden. Je nach System (CPU, Betriebssystem, Browser) kann es eine Weile dauern, bis die Änderung in allen Kontexten propagiert wird. Um dies zu synchronisieren, sind atomare Operationen erforderlich.
SharedArrayBuffer-Objekte werden von einigen Web-APIs verwendet, wie zum Beispiel:
Gemeinsam genutzter Speicher und hochauflösende Timer wurden Anfang 2018 effektiv deaktiviert im Lichte von Spectre. Im Jahr 2020 wurde ein neuer, sicherer Ansatz standardisiert, um gemeinsamen Speicher wieder zu ermöglichen.
Um gemeinsam genutzten Speicher zu verwenden, muss Ihr Dokument in einem sicheren Kontext sein und über Ursprünge isoliert sein. Sie können die Eigenschaften Window.crossOriginIsolated und WorkerGlobalScope.crossOriginIsolated verwenden, um zu überprüfen, ob das Dokument über Ursprünge isoliert ist:
Wenn über Ursprünge isoliert, wirft postMessage() für SharedArrayBuffer-Objekte nicht länger Ausnahmen, und gemeinsam genutzter Speicher zwischen Threads ist daher verfügbar.
Je nachdem, ob die oben genannten Sicherheitsmaßnahmen ergriffen werden, haben die verschiedenen Speicherfreigabe-APIs unterschiedliche Verfügbarkeiten:
WebAssembly.Memory-Objekte können mit dem shared Konstruktor-Flag erstellt werden. Wenn dieses Flag auf true gesetzt ist, kann das konstruierte Memory-Objekt zwischen Workern über postMessage() geteilt werden, genau wie SharedArrayBuffer, und der zugrunde liegende buffer des Memory-Objekts ist ein SharedArrayBuffer. Daher gelten die oben aufgeführten Anforderungen für das Teilen eines SharedArrayBuffer zwischen Workern auch für das Teilen eines WebAssembly.Memory.
Der WebAssembly Threads-Vorschlag definiert auch einen neuen Satz von atomaren Instruktionen. Genau wie SharedArrayBuffer und seine Methoden bedingungslos aktiviert sind (und nur das Teilen zwischen Threads durch die neuen Header gesteuert wird), sind die WebAssembly-atomaren Instruktionen ebenfalls bedingungslos erlaubt.
SharedArrayBuffer-Objekte können durch Einschließen der maxByteLength-Option beim Aufruf des SharedArrayBuffer()-Konstruktors wachstumsfähig gemacht werden. Sie können überprüfen, ob ein SharedArrayBuffer wachstumsfähig ist und wie groß es maximal sein kann, indem Sie auf seine growable- und maxByteLength-Eigenschaften zugreifen. Sie können einem wachstumsfähigen SharedArrayBuffer mit einem grow()-Aufruf eine neue Größe zuweisen. Neue Bytes werden auf 0 initialisiert.
Diese Funktionen machen das Wachstum von SharedArrayBuffers effizienter — andernfalls müssen Sie eine Kopie des Puffers mit einer neuen Größe erstellen. Es bringt auch die JavaScript-Parität mit WebAssembly in dieser Hinsicht (Wasm-Speicher kann mit WebAssembly.Memory.prototype.grow() resized werden).
Aus Sicherheitsgründen können SharedArrayBuffers nicht in der Größe reduziert werden, sondern nur wachsen.
Erstellt ein neues SharedArrayBuffer-Objekt.
Gibt den Konstruktor zurück, der zur Konstruktion von Rückgabewerten von SharedArrayBuffer-Methoden verwendet wird.
Diese Eigenschaften sind auf SharedArrayBuffer.prototype definiert und werden von allen SharedArrayBuffer-Instanzen geteilt.
SharedArrayBuffer.prototype.byteLengthDie Größe, in Bytes, des Arrays. Diese wird festgelegt, wenn das Array erstellt wird und kann nur geändert werden, wenn der SharedArrayBuffer wachstumsfähig ist, unter Verwendung der SharedArrayBuffer.prototype.grow()-Methode.
SharedArrayBuffer.prototype.constructorDie Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für SharedArrayBuffer-Instanzen ist der Initialwert der SharedArrayBuffer-Konstruktor.
SharedArrayBuffer.prototype.growableSchreibgeschützt. Gibt true zurück, wenn der SharedArrayBuffer wachsen kann, oder false, wenn nicht.
SharedArrayBuffer.prototype.maxByteLengthDie schreibgeschützte maximale Länge, in Bytes, auf die der SharedArrayBuffer wachsen kann. Diese wird bei der Erstellung des Arrays festgelegt und kann nicht geändert werden.
SharedArrayBuffer.prototype[Symbol.toStringTag]Der anfängliche Wert der [Symbol.toStringTag]-Eigenschaft ist der String "SharedArrayBuffer". Diese Eigenschaft wird in Object.prototype.toString() verwendet.
Vergrößert den SharedArrayBuffer auf die angegebene Größe in Bytes.
SharedArrayBuffer.prototype.slice()Gibt einen neuen SharedArrayBuffer zurück, dessen Inhalt eine Kopie der Bytes dieses SharedArrayBuffer von begin (einschließlich) bis end (ausschließlich) ist. Wenn entweder begin oder end negativ ist, bezieht es sich auf einen Index vom Ende des Arrays, im Gegensatz zum Anfang.
Beachten Sie, dass diese Beispiele nicht direkt aus der Konsole oder einer beliebigen Webseite ausgeführt werden können, da SharedArrayBuffer nicht definiert ist, es sei denn, seine Sicherheitsanforderungen sind erfüllt.
| ECMAScript® 2027 Language Specification # sec-sharedarraybuffer-objects |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
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.