TypedArray dalam JavaScript
Artikel ini menjelaskan tentang TypedArray
dalam JavaScript.
Kami akan menjelaskan secara rinci konsep dasar TypedArray
, setiap tipe, cara menggunakannya, dan kasus penggunaan spesifik.
YouTube Video
TypedArray dalam JavaScript
TypedArray
dalam JavaScript adalah sebuah objek untuk menangani data biner buffered dengan efisien. TypedArray
mengalokasikan dan memanipulasi memori berdasarkan jenis data tertentu. Berbeda dengan array biasa, TypedArray
hanya dapat menyimpan data biner dengan ukuran tetap, bukan jenis data sembarang.
Struktur Dasar TypedArray
Komponen utama dari TypedArray
adalah ArrayBuffer
dan TypedArray
itu sendiri.
- ArrayBuffer: Sebuah buffer dengan ukuran tetap yang mengalokasikan data biner di dalam memori. Buffer ini hanyalah sebuah area data dan tidak dapat dibaca atau ditulis secara langsung.
- TypedArray: Sebuah objek pembungkus yang menerapkan jenis data tertentu ke buffer, memungkinkan akses dan manipulasi data.
Contoh Penggunaan Dasar
Berikut adalah contoh membuat ArrayBuffer
dan kemudian membuat TypedArray
berdasarkan buffer tersebut.
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, sebuah
ArrayBuffer
dibuat, dan kemudianUint8Array
dibuat berdasarkan buffer tersebut. Setiap elemen dianggap sebagai bilangan bulat tanpa tanda 8-bit, menyimpan nilai hanya dalam rentang yang ditentukan.
Jenis-jenis TypedArray
Ada berbagai jenis TypedArray
untuk setiap jenis data. Jenis-jenis utamanya adalah sebagai berikut.
Nama Tipe | Ukuran Elemen | Deskripsi |
---|---|---|
Int8Array |
1 byte | Bilangan bulat 8-bit bertanda |
Uint8Array |
1 byte | Bilangan bulat 8-bit tidak bertanda |
Uint8ClampedArray |
1 byte | Bilangan bulat 8-bit tidak bertanda (menyimpan nilai yang dijepit) |
Int16Array |
2 byte | Bilangan bulat 16-bit bertanda |
Uint16Array |
2 byte | Bilangan bulat 16-bit tidak bertanda |
Int32Array |
4 byte | Bilangan bulat 32-bit bertanda |
Uint32Array |
4 byte | Bilangan bulat 32-bit tidak bertanda |
Float32Array |
4 byte | Angka floating-point 32-bit |
Float64Array |
8 byte | Angka floating-point 64-bit |
TypedArray
ini semuanya efisien dalam penggunaan memori dan efektif untuk menangani data dalam jumlah besar.
Memanipulasi TypedArray
Anda dapat mengakses data dalam TypedArray
menggunakan indeks, seperti array biasa, tetapi beberapa metode khusus juga disediakan.
Mengatur nilai
Dalam TypedArray
, Anda dapat mengatur beberapa nilai sekaligus menggunakan metode 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
- Kode ini menggunakan metode
set
untuk menetapkan beberapa nilai sekaligus ke dalamInt16Array
, dan menampilkan setiap elemennya di konsol.
Mendapatkan subarray
Untuk mendapatkan sebagian dari TypedArray
sebagai subarray, gunakan metode subarray
. Ini merujuk pada buffer yang sama seperti TypedArray
asli.
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]
- Kode ini mengambil rentang elemen tertentu dari
Int16Array
menggunakan metodesubarray
dan menampilkan subarray di konsol.
Menyalin buffer
Buffer dari sebuah TypedArray
juga dapat disalin ke TypedArray
lain. Dengan menggunakan metode set
, Anda dapat menyalin dari posisi yang 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]
- Kode ini menyalin isi dari
Uint8Array
ke array lain menggunakan metodeset
, dan menampilkan array hasil salinan di konsol.
Menggunakan DataView
Sementara TypedArray
menangani buffer dengan tipe data tetap, DataView
adalah antarmuka yang memungkinkan manipulasi data biner secara fleksibel dengan offset dan tipe data yang arbitrer. Ini memungkinkan berbagai tipe data dicampur 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
-
Kode ini menggunakan
DataView
untuk menulis berbagai jenis data—integer 32-bit dan angka floating-point 32-bit—ke dalam buffer yang sama dan memeriksa hasilnya. -
DataView
menawarkan fleksibilitas akses data yang lebih besar dibandingkanTypedArray
dan sangat berguna saat bekerja dengan file format biner atau protokol jaringan.
Penggunaan TypedArray
TypedArray
terutama digunakan untuk menangani jumlah data biner yang besar secara efisien. Kasus penggunaan khusus meliputi hal-hal berikut.
Pemrosesan gambar
TypedArray
digunakan ketika memanipulasi informasi piksel pada data gambar. Dengan menggunakan Uint8Array
, Anda menyimpan nilai RGBA dari setiap piksel dan melakukan pengeditan serta pemrosesan gambar.
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}
- Kode ini membuat data gambar dengan lebar 100 dan tinggi 100 dalam format RGBA menggunakan
Uint8Array
, dan mengatur semua piksel menjadi merah.
Antarmuka dengan WebAssembly
TypedArray
digunakan untuk pertukaran data biner antara JavaScript dan WebAssembly. Dengan berbagi ruang memori JavaScript dan WebAssembly melalui ArrayBuffer
, pertukaran data yang cepat dapat dilakukan.
Pemrosesan data audio dan video
TypedArray
memainkan peran penting dalam pemrosesan audio dan video. Anda dapat menyimpan gelombang data audio dalam Float32Array
untuk melakukan pemutaran dan pemrosesan.
Kesimpulan
TypedArray
adalah alat yang kuat untuk menangani data biner dalam jumlah besar secara efisien. Ini sangat berguna dalam aplikasi yang memerlukan kinerja tinggi seperti pemrosesan gambar, WebAssembly, dan pemrosesan data audio/video. TypedArray
memiliki API yang mirip dengan array biasa, tetapi ada batasan terkait penggunaan memori dan jenis data, sehingga diperlukan pembedaan penggunaan yang tepat.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.