Rumah >hujung hadapan web >Tutorial H5 >Pengenalan kepada tatasusunan baharu TypedArray yang diperkenalkan dalam kemahiran tutorial HTML5_html5
Array dalam Javascript adalah lelaki yang berkuasa:
Anda tidak boleh menentukan panjang semasa menciptanya, tetapi menukar panjang secara dinamik. Anda boleh membacanya sebagai tatasusunan biasa, atau menggunakannya sebagai timbunan. Anda boleh menukar nilai dan juga jenis setiap elemen dalam tatasusunan.Nah, sebenarnya ia adalah objek Sebagai contoh, kita boleh mencipta tatasusunan seperti ini:
Perkara yang maha kuasa boleh digunakan dalam pelbagai persekitaran, tetapi ia mungkin tidak sesuai untuk semua persekitaran.
TypedArray muncul tepat untuk menyelesaikan masalah "terlalu banyak perkara yang dilakukan" oleh tatasusunan dalam Javascript.
Asal usulTypedArray ialah jenis penimbal panjang tetap umum yang membenarkan membaca data binari dalam penimbal.
Ia telah diperkenalkan dalam spesifikasi WEBGL untuk menyelesaikan masalah pemprosesan data binari Javascript.
TypedArray telah disokong oleh kebanyakan penyemak imbas moden Contohnya, anda boleh mencipta TypedArray menggunakan kaedah berikut:
变量 | 索引 | |||||||
---|---|---|---|---|---|---|---|---|
字节数 | ||||||||
b = | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
索引数 | ||||||||
v1 = | 0 | 1 | ||||||
v2 = | 0 | 1 | 2 | 3 | 4 | 5 | ||
v3 = | 0 | 1 |
Di atas kami mencipta TypedArray melalui ArrayBuffer, tetapi sebenarnya, TypedArray menyediakan 3 pembina untuk mencipta kejadiannya.
TypedArray menyediakan empat kaedah: setter, getter, set dan subarray untuk operasi data.
Mengembalikan elemen pada indeks yang ditentukan.
set void penetap(indeks panjang tidak ditandatangani, nilai jenis)Tetapkan elemen pada indeks yang ditentukan kepada nilai yang ditentukan.
void set(TypedArray tatasusunan, opsional unsigned long offset) void set(type[] array, optional unsigned long offset)Tetapkan nilai mengikut tatasusunan, dan offset ialah kedudukan offset.
TypedArray subarray(mula panjang, hujung panjang pilihan)Mengembalikan TypedArray baharu, dengan bit permulaan dimulakan dan bit pengakhiran diakhiri.
Sebagai contoh, untuk membaca elemen anda boleh menggunakan :
var array = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);Elemen tetapan boleh digunakan :
var array = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); 4]); //12Dapatkan salinan menggunakan :
var array = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);类型 | 大小 | 描述 | Web IDL类型 | C 类型 |
---|---|---|---|---|
Int8Array |
1 | 8位有符号整数 | byte |
signed char |
Uint8Array |
1 | 8位无符号整数 | octet |
unsigned char |
Uint8ClampedArray |
1 | 8位无符号整数 (clamped) | octet |
unsigned char |
Int16Array |
2 | 16位有符号整数 | short |
short |
Uint16Array |
2 | 16位无符号整数 | unsigned short |
unsigned short |
Int32Array |
4 | 32位有符号整数 | long |
int |
Uint32Array |
4 | 32位无符号整数 | unsigned long |
unsigned int |
Float32Array |
4 | 32位IEEE浮点数 | unrestricted float |
float |
Float64Array |
8 | 64位IEEE浮点数 | unrestricted double |
double |
Int8Array
bait
char yang ditandatangani
Uint8Array
oktet
unsigned char
Uint8ClampedArray
oktet
unsigned char
Int16Array
pendek
pendek
Uint16Array
pendek yang tidak ditandatangani
pendek yang tidak ditandatangani
Int32Array
panjang
int
Uint32Array
panjang tidak ditandatangani
unsigned int
Float32Array
apungan tanpa had
terapung
Float64Array
double tanpa had
double
Kerana tatasusunan yang digunakan untuk menyimpan data imej dalam ImageData adalah jenis Uint8ClampedArray.
Contohnya:
var context = document.createElement("canvas").getContext("2d");var imageData = context.createImageData(100, 100);console.log(imageData.data);yang muncul sebagai dalam FireBug:
Mengapa menggunakan TypedArrayUint8ClampedArray { 0=0, 1=0, 2=0, lagi...}
Kami tahu bahawa nombor dalam Javascript ialah nombor titik terapung 64-bit. Untuk imej binari (setiap piksel imej disimpan sebagai integer tidak bertanda 8-bit), jika anda ingin menggunakan datanya dalam tatasusunan Javascript, ia bersamaan dengan menggunakan 8 kali memori imej untuk menyimpan data satu imej. Ini jelas sekali tidak saintifik. TypedArray boleh membantu kami menggunakan hanya 1/8 daripada memori asal untuk menyimpan data imej.
Atau untuk WebSocket, menggunakan base64 untuk penghantaran juga merupakan kaedah yang lebih mahal, dan beralih kepada penghantaran binari mungkin kaedah yang lebih baik.
Sudah tentu, TypedArray mempunyai lebih banyak faedah, seperti prestasi yang lebih baik Di bawah kami menjalankan beberapa ujian kecil untuk mengesahkan ini.
Pelayar yang mengambil bahagian dalam ujian ialah :
Ujian1: Bacaan kelajuan bacaan berurutanFireFox 17.0.1 dan Chrome 23.0.1271.97m
Dapat dilihat bahawa kelajuan bacaan Uint8ClampedArray jelas lebih cepat daripada Array (semakin panjang bar, lebih banyak masa yang diperlukan).
Ujian2: Bacaan rawak随即读取中Uint8ClampedArray的读取速度也是比Array要快的。
Ujian3:顺序写入Ujian4:复制操作(U8C ke U8C 和 Tatasusunan kepada U8C)