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,
ArrayBuffer
dicipta, dan kemudianUint8Array
dihasilkan 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
set
untuk 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
Int16Array
menggunakan kaedahsubarray
dan 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
Uint8Array
ke 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
DataView
untuk menulis pelbagai jenis data—integer 32-bit dan nombor terapung 32-bit—ke dalam penampan yang sama dan memeriksa hasilnya. -
DataView
menawarkan fleksibiliti akses data yang lebih besar berbandingTypedArray
dan 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.