TypedArray dalam JavaScript
Artikel ini menerangkan TypedArray dalam JavaScript.
Kami akan menerangkan secara terperinci konsep asas TypedArray, setiap jenisnya, cara menggunakannya, dan kes penggunaan tertentu.
YouTube Video
TypedArray dalam JavaScript
TypedArray dalam JavaScript adalah objek untuk mengendalikan data binari buffered secara berkesan. TypedArray memperuntukkan dan memanipulasikan memori berdasarkan jenis data tertentu. Tidak seperti array biasa, TypedArray hanya boleh memuatkan data binari bersaiz tetap, bukan jenis data sewenang-wenangnya.
Struktur Asas TypedArray
Komponen utama TypedArray ialah ArrayBuffer dan TypedArray itu sendiri.
- ArrayBuffer: Penimbal bersaiz tetap yang memperuntukkan data binari dalam memori. Penimbal ini hanyalah kawasan data dan tidak boleh dibaca atau ditulis secara langsung.
- TypedArray: Objek pemutar yang menggunakan jenis data tertentu pada penimbal, membolehkan akses dan manipulasi data.
Contoh Penggunaan Asas
Berikut adalah contoh mencipta ArrayBuffer dan kemudian mencipta TypedArray berdasarkan padanya.
1// Create a 16-byte buffer
2const buffer = new ArrayBuffer(16);
3
4// Create a TypedArray (Uint8Array) to handle 8-bit unsigned integers
5const uint8Array = new Uint8Array(buffer);
6
7// Set data
8uint8Array[0] = 255;
9uint8Array[1] = 128;
10
11// Retrieve data
12console.log(uint8Array[0]); // 255
13console.log(uint8Array[1]); // 128
- Dalam contoh ini,
ArrayBufferdicipta, dan kemudianUint8Arraydihasilkan berdasarkan penimbal tersebut. Setiap elemen dianggap sebagai integer tanpa tanda 8-bit, menyimpan nilai hanya dalam julat yang dinyatakan.
Jenis-jenis TypedArray
Terdapat pelbagai jenis TypedArray untuk setiap jenis data. Jenis utama adalah seperti berikut.
| Nama Jenis | Saiz Elemen | Penerangan |
|---|---|---|
Int8Array |
1 bait | Integer bertanda 8-bit |
Uint8Array |
1 bait | Integer tidak bertanda 8-bit |
Uint8ClampedArray |
1 bait | Integer tidak bertanda 8-bit (menyimpan nilai yang telah dihadkan) |
Int16Array |
2 bait | Integer bertanda 16-bit |
Uint16Array |
2 bait | Integer tidak bertanda 16-bit |
Int32Array |
4 bait | Integer bertanda 32-bit |
Uint32Array |
4 bait | Integer tidak bertanda 32-bit |
Float32Array |
4 bait | Nombor titik apung 32-bit |
Float64Array |
8 bait | Nombor titik apung 64-bit |
TypedArray ini semuanya cekap memori dan berkesan untuk mengendalikan jumlah data yang besar.
Mengendalikan TypedArray
Anda boleh mengakses data dalam TypedArray menggunakan indeks, seperti array biasa, tetapi beberapa kaedah khas juga disediakan.
Menetapkan nilai
Dalam TypedArray, anda boleh menetapkan pelbagai nilai sekaligus menggunakan kaedah set.
1const buffer = new ArrayBuffer(8);
2const int16Array = new Int16Array(buffer);
3
4// Set values
5int16Array.set([10, 20, 30]);
6
7console.log(int16Array[0]); // 10
8console.log(int16Array[1]); // 20
9console.log(int16Array[2]); // 30
- Kod ini menggunakan kaedah
setuntuk menetapkan beberapa nilai sekaligus kepadaInt16Array, dan memaparkan setiap elemen di konsol.
Mendapatkan subarray
Untuk mendapatkan sebahagian daripada TypedArray sebagai subarray, gunakan kaedah subarray. Ini merujuk kepada buffer yang sama seperti TypedArray asal.
1const int16Array = new Int16Array([1, 2, 3, 4, 5]);
2
3// Get a subarray containing elements from the 2nd to the 4th
4const subArray = int16Array.subarray(1, 4);
5
6console.log(subArray); // Int16Array [2, 3, 4]
- Kod ini mendapat julat elemen yang ditetapkan dari
Int16Arraymenggunakan kaedahsubarraydan memaparkan subarray tersebut di konsol.
Menyalin buffer
Buffer daripada TypedArray juga boleh disalin ke TypedArray lain. Dengan menggunakan kaedah set, anda boleh menyalin daripada posisi yang telah ditentukan.
1const srcArray = new Uint8Array([10, 20, 30, 40]);
2const destArray = new Uint8Array(4);
3
4// Copy
5destArray.set(srcArray);
6
7console.log(destArray); // Uint8Array [10, 20, 30, 40]
- Kod ini menyalin kandungan
Uint8Arrayke array lain menggunakan kaedahset, dan memaparkan array yang telah disalin di konsol.
Menggunakan DataView
Walaupun TypedArray mengendalikan buffer dengan jenis data tetap, DataView adalah antara muka yang membolehkan manipulasi data binari secara fleksibel dengan kecondongan dan jenis data yang sewenangnya. Ini membolehkan pelbagai jenis data dicampurkan dalam buffer yang sama.
1const buffer = new ArrayBuffer(8);
2const dataView = new DataView(buffer);
3
4// Write a 32-bit signed integer at offset 0
5dataView.setInt32(0, 12345);
6
7// Write a 32-bit floating-point number at offset 4
8dataView.setFloat32(4, 12.34);
9
10console.log(dataView.getInt32(0)); // 12345
11console.log(dataView.getFloat32(4)); // 12.34000015258789
-
Kod ini menggunakan
DataViewuntuk menulis pelbagai jenis data—integer 32-bit dan nombor terapung 32-bit—ke dalam penampan yang sama dan memeriksa hasilnya. -
DataViewmenawarkan fleksibiliti akses data yang lebih besar berbandingTypedArraydan amat berguna semasa bekerja dengan fail format binari atau protokol rangkaian.
Kes penggunaan TypedArray
TypedArray digunakan terutamanya untuk mengendalikan sejumlah besar data binari dengan cekap. Kes penggunaan khusus termasuk yang berikut.
Pemprosesan imej
TypedArray digunakan semasa mengendalikan maklumat piksel data imej. Dengan menggunakan Uint8Array, anda menyimpan nilai RGBA bagi setiap piksel dan menjalankan penyuntingan serta pemprosesan imej.
1const width = 100;
2const height = 100;
3const imageData = new Uint8Array(width * height * 4); // RGBA
4
5// Set pixel data
6for (let i = 0; i < imageData.length; i += 4) {
7 imageData[i] = 255; // Red
8 imageData[i + 1] = 0; // Green
9 imageData[i + 2] = 0; // Blue
10 imageData[i + 3] = 255; // Alpha
11}- Kod ini mencipta data imej dengan lebar 100 dan tinggi 100 dalam format RGBA menggunakan
Uint8Array, dan menetapkan semua piksel kepada warna merah.
Berhubung dengan WebAssembly
TypedArray digunakan untuk menukar data binari antara JavaScript dan WebAssembly. Dengan berkongsi ruang memori JavaScript dan WebAssembly melalui ArrayBuffer, pertukaran data yang pantas adalah mungkin.
Memproses data audio dan video
TypedArray memainkan peranan penting dalam memproses audio dan video. Anda boleh menyimpan gelombang data audio dalam Float32Array untuk memainkan dan memprosesnya.
Kesimpulan
TypedArray adalah alat yang kuat untuk mengurus data binari dalam jumlah yang besar dengan cekap. Ia amat berguna dalam aplikasi yang kritikal terhadap prestasi seperti pemprosesan imej, WebAssembly, dan pemprosesan data audio/video. TypedArray mempunyai API yang serupa dengan array biasa, tetapi terdapat batasan berkaitan penggunaan memori dan jenis data, jadi pembezaan yang betul dalam penggunaannya diperlukan.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.