--- title: SharedArrayBuffer slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer tags: - Constructeur - JavaScript - Mémoire partagée - Reference - SharedArrayBuffer - TypedArrays translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer original_slug: Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer ---
L'objet SharedArrayBuffer
est utilisé afin de représenter un tampon de données binaires brutes générique de longueur fixe. Il est semblable à l'objet {{jsxref("ArrayBuffer")}} mais peut ici être utilisé pour créer différentes vues sur une même mémoire partagée. À la différence d'un ArrayBuffer
, un SharedArrayBuffer
ne peut pas être détaché.
Note : L'objet SharedArrayBuffer
a été désactivé le 5 janvier 2018 par défaut pour l'ensemble des principaux navigateurs afin de réduire les failles Meltdown et Spectre. Chrome a réactivé cet objet avec la version 67 pour les plateformes sur lesquelles des fonctionnalités sont présentes pour protéger des vulnérabilités telles que Spectre (« site-isolation feature »)
new SharedArrayBuffer([length])
longueur
Un nouvel objet SharedArrayBuffer
de la taille donnée, dont les éléments sont initialisés à 0.
Pour partager une zone mémoire entre plusieurs objets {{jsxref("SharedArrayBuffer")}} d'un agent à un autre (ici un agent correspond au programme principal de la page web ou à l'un de ses web workers), on utilise postMessage
et le clonage structuré.
L'algorithme de clonage structuré permet d'envoyer des objets SharedArrayBuffers
et TypedArrays
vers SharedArrayBuffers
. Dans les deux cas, l'objet SharedArrayBuffer
est transmis au récepteur, ce qui crée un nouvel objet SharedArrayBuffer
, privé, au sein de l'agent qui reçoit (comme avec {{jsxref("ArrayBuffer")}}). Cependant, le bloc de mémoire référencé par les deux objets Shared
ArrayBuffer
est bien le même bloc. Aussi, si un agent interagit avec cette zone, l'autre agent pourra voir les modifications.
var sab = new SharedArrayBuffer(1024); worker.postMessage(sab);
La mémoire partagée peut être créée et mise à jour de façon simultanée entre les workers et le thread d'exécution principal. Selon le système (le processeur, le système d'exploitation, le navigateur), cela peut prendre du temps avant que le changement soit propagé sur l'ensemble des contextes. Pour que la synchronisation s'effectue, on doit utiliser les opérations {{jsxref("Atomics", "atomiques", "", 1)}}.
SharedArrayBuffer
new
Les constructeurs SharedArrayBuffer
doivent être utilisés avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Si on appelle un constructeur SharedArrayBuffer
comme une fonction, sans new
, cela lèvera une exception {{jsxref("TypeError")}}.
var sab = SharedArrayBuffer(1024); // TypeError: appeler le constructeur natif SharedArrayBuffer sans // new est interdit
var sab = new SharedArrayBuffer(1024);
SharedArrayBuffer.length
SharedArrayBuffer
dont la valeur est 1.SharedArrayBuffer
.SharedArrayBuffer
Toutes les instances de SharedArrayBuffer
héritent de {{jsxref("SharedArrayBuffer.prototype")}}.
{{page('fr/Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/prototype','Propriétés')}}
{{page('fr/Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/prototype','Méthodes')}}
Spécification | État | Commentaires |
---|---|---|
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} | {{Spec2('ES8')}} | Définition initiale. |
{{Compat("javascript.builtins.SharedArrayBuffer")}}