| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis dcembre 2021.
* Certaines parties de cette fonctionnalit peuvent bnficier de prise en charge variables.
L'objet SharedArrayBuffer est utilis afin de reprsenter un tampon de donnes binaires brutes gnrique de longueur fixe. Il est semblable l'objet ArrayBuffer, mais peut ici tre utilis pour crer diffrentes vues sur une mme mmoire partage. la diffrence d'un ArrayBuffer, un SharedArrayBuffer n'est pas un objet transfrable.
Pour partager une zone mmoire entre plusieurs objets
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 utilisera postMessage() et le clonage structur.
L'algorithme de clonage structur permet d'envoyer des objets SharedArrayBuffers et TypedArrays vers des objets SharedArrayBuffer. Dans les deux cas, l'objet SharedArrayBuffer est transmis au rcepteur, ce qui cre un nouvel objet SharedArrayBuffer, priv, au sein de l'agent qui reoit (comme avec ArrayBuffer). Cependant, le bloc de mmoire rfrenc par les deux objets SharedArrayBuffer est bien le mme bloc. Aussi, si un agent interagit avec cette zone, l'autre agent pourra voir les modifications.
let sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);
La mmoire partage peut tre cre et mise jour de faon simultane entre les workers et le thread d'excution principal. Selon le systme (le processeur, le systme 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 des oprations atomiques.
SharedArrayBufferWebGLRenderingContext.bufferData()WebGLRenderingContext.bufferSubData()WebGL2RenderingContext.getBufferSubData()La mmoire partage et les chronomtres de haute prcision ont t dsactivs dbut 2018 suite la vulnrabilit Spectre. En 2020, une nouvelle approche, scurise, a t mise en place afin de ractiver la mmoire partage. En suivant quelques rgles de scurit, postMessage() ne lve plus d'exception pour les objets SharedArrayBuffer et une mmoire partage entre les threads est disponible.
Pour commencer, le document doit tre mis disposition dans un contexte scuris.
Pour les documents de plus haut niveau, deux en-ttes HTTP doivent tre utiliss pour isoler le site des origines tierces :
Cross-Origin-Opener-Policy avec la valeur same-origin (ce qui protge l'origine des ventuels attaquants)Cross-Origin-Embedder-Policy avec la valeur require-corp (ce qui protge les ventuelles victimes de votre origine)Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Pour vrifier si l'isolation envers les origines tierces a russi, vous pouvez vrifier la proprit crossOriginIsolated qui est disponible dans les contextes de la fentre et des workers :
if (crossOriginIsolated) {
// on poste le SharedArrayBuffer
} else {
// on fait autre chose
}
Voir aussi les changements prvus quant la mmoire partage pour les diffrents navigateurs.
newLes constructeurs SharedArrayBuffer doivent tre utiliss avec l'oprateur new. Si on appelle un constructeur SharedArrayBuffer comme une fonction, sans new, cela lvera une exception TypeError.
var sab = SharedArrayBuffer(1024);
// TypeError: appeler le constructeur natif SharedArrayBuffer sans
// new est interdit
var sab = new SharedArrayBuffer(1024);
SharedArrayBuffer()Cre un nouvel objet SharedArrayBuffer.
SharedArrayBuffer.prototype.byteLengthLa taille du tableau, exprime en octets. Celle-ci est dtermine la construction du tableau et ne peut pas tre modifie par la suite, elle est accessible en lecture seule uniquement.
SharedArrayBuffer.prototype.slice(debut, fin)Renvoie un nouvel objet SharedArrayBuffer dont le contenu et une copie des octets de l'objet SharedArrayBuffer courant entre l'indice de dbut (inclus) et l'indice de fin (exclus). Si l'un des deux indices est ngatif, il est relatif la fin du tableau plutt qu'au dbut.
SharedArrayBufferlet sab = new SharedArrayBuffer(1024);
SharedArrayBuffersab.slice(); // SharedArrayBuffer { byteLength: 1024 }
sab.slice(2); // SharedArrayBuffer { byteLength: 1022 }
sab.slice(-2); // SharedArrayBuffer { byteLength: 2 }
sab.slice(0, 1); // SharedArrayBuffer { byteLength: 1 }
const canvas = document.querySelector("canvas");
const gl = canvas.getContext("webgl");
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, sab, gl.STATIC_DRAW);
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-sharedarraybuffer-objects |
AtomicsArrayBufferparlib-simple une bibliothque qui fournit des abstractions pour synchroniser et distribuer des tchesCette page a t modifie le 10 avr. 2026 par les contributeurices du MDN.
SharedArrayBufferObject/FunctionObject.prototype.__defineGetter__()Object.prototype.__defineSetter__()Object.prototype.__lookupGetter__()Object.prototype.__lookupSetter__()Object.prototype.hasOwnProperty()Object.prototype.isPrototypeOf()Object.prototype.propertyIsEnumerable()Object.prototype.toLocaleString()Object.prototype.toString()Object.prototype.valueOf()Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |