ES6 : les tableaux typés

image_pdfimage_print

Les tableaux typés ne sont pas une nouveauté d’ES6. Il concernent uniquement les valeurs numériques. Ils trouvent leur source dans WebGL qui permet de gérer de la 3D de façon dynamique sur une page web. Comme les calculs arithmétiques avec JavaScript étaient trop lents (utilisation de données en 64 bits avec virgule flottante) ont été créés les tableaux typés avec une spécification déjà bien pris en charge par les navigateurs. ES6 reprend ce concept en l’améliorant comme on va le voir dans ce chapitre.

Architecture

Les tableaux typés servent à manipuler des données binaires : images, canvas, API (XMLHttpRequest, WebSockets, files…)…

On a deux objets spécifiques :

  • les buffers : ils contiennent les données,
  • les vues : elles permettent de manipuler les données stockées par les buffers.

Les buffers

Un buffer est un espace mémoire qui contient un certain nombre d’octets de données. Pour créer un buffer c’est tout simple :

let buffer = new ArrayBuffer(4);

Ici on a créé un buffer de 4 octets.

Les vues

Une vue est une interface pour manipuler les données stockées dans un buffer : lecture, écriture.

Il existe une vue générique qu’on crée avec DataView :

let buffer = new ArrayBuffer(4);
let vue = new DataView(buffer);

On peut alors manipuler les données du buffer avec cette vue.

Mais il existe aussi 9 vues spécifiques à certains types de données :

Nom

Taille en octets

Description

Int8Array

1

Entier signé en complément à deux sur 8 bits

Uint8Array

1

Entier non signé sur 8 bits

Uint8ClampedArray

1

Entier non signé sur 8 bits (compris entre 0 et 255)

Int16Array

2

Entier signé en complément à deux sur 16 bits

Uint16Array

2

Entier non signé sur 16 bits

Int32Array

4

Entier signé en complément à deux sur 32 bits

Uint32Array

4

Entier non signé sur 32 bits

Float32Array

4

Nombre flottant sur 32 bits selon la représentation IEEE

Float64Array

8

Nombre flottant sur 64 bits selon la représentation IEEE

On peut donc créer des vues qui gèrent un certain type de données :

let buffer = new ArrayBuffer(8);
let vue = new Uint8Array(buffer);

Ici on a une vue pour gérer des entiers non signés sur 8 bits. On peut en mettre 8 dans le buffer.

Laisser un commentaire