`ArrayBuffer` dalam JavaScript
Artikel ini menerangkan ArrayBuffer dalam JavaScript.
Kami akan menerangkan semuanya tentang ArrayBuffer, daripada asas hingga kepada penggunaannya, jenis berkaitan, dan aplikasi praktikal.
YouTube Video
ArrayBuffer dalam JavaScript
ArrayBuffer dalam JavaScript adalah satu objek untuk mengendalikan data binari aras rendah dan sangat berguna untuk memanipulasi data binari dalam WebAPIs, operasi fail, dan komunikasi rangkaian.
Apakah ArrayBuffer
ArrayBuffer ialah satu struktur data untuk mengendalikan data binari dengan panjang tetap. Ia membolehkan pengendalian data binari mentah yang tidak boleh dikendalikan oleh array atau objek JavaScript biasa.
ArrayBuffer itu sendiri tidak boleh memanipulasi data secara langsung. Sebaliknya, data dibaca dan ditulis menggunakan TypedArray atau DataView yang berdasarkan sebuah ArrayBuffer.
ArrayBuffer sangat berguna dalam keadaan-keadaan berikut.
- Semasa memproses data binari yang diterima dari rangkaian
- Apabila perkongsian data yang cekap dalam
Web Workerdiperlukan. - Apabila menjalankan pemprosesan imej atau rendering 3D dengan Canvas atau WebGL.
- Apabila memanipulasi fail (terutamanya fail binari).
Mencipta sebuah ArrayBuffer
Pertama, mari kita mulakan dengan cara untuk mencipta satu instance ArrayBuffer. ArrayBuffer memperuntukkan memori dalam unit bait, jadi anda tentukan saiznya semasa penciptaan.
1const buffer = new ArrayBuffer(16); // Create a 16-byte buffer
2console.log(buffer.byteLength); // 16
- Dalam contoh ini, sebuah buffer sebanyak 16 bait diperuntukkan. Buffer ini belum mengandungi sebarang data.
Memanipulasi data dengan TypedArray
Anda tidak boleh mengakses ArrayBuffer secara langsung, jadi anda gunakan TypedArray untuk membaca dan menulis data. TypedArray menyediakan pelbagai jenis pandangan seperti Int8Array dan Float32Array, yang membolehkan akses data binari dengan cekap.
Contoh menggunakan Int8Array
1const buffer = new ArrayBuffer(8); // Create an 8-byte buffer
2const int8View = new Int8Array(buffer); // Create an Int8Array
3
4int8View[0] = 42; // Write data to the first byte
5console.log(int8View[0]); // 42
Int8Arrayboleh menyimpan data pada setiap bait, membolehkan buffer menyimpan 8 elemen. Dengan menggunakan pelbagai jenis paparan, anda boleh memanipulasi data dengan cekap.
Contoh lain TypedArray
JavaScript mempunyai pelbagai jenis TypedArray. Sebagai contoh, jika anda ingin mengendalikan integer tanpa tanda 32-bit, gunakan Uint32Array.
1const buffer = new ArrayBuffer(16);
2const uint32View = new Uint32Array(buffer);
3
4uint32View[0] = 123456;
5console.log(uint32View[0]); // 123456
Uint32Arrayboleh menyimpan data dalam unit 4-bait, jadi penimbal boleh memuatkan empat elemen. Adalah penting untuk memilihTypedArrayyang sesuai berdasarkan jenis data yang anda kendalikan.
Manipulasi data yang fleksibel menggunakan DataView
TypedArray hanya boleh mengendalikan data dengan jenis tetap, tetapi dengan menggunakan DataView, anda boleh menulis data dari sebarang jenis ke mana-mana lokasi. Ini sangat berguna apabila menangani penimbal yang mengandungi jenis data bercampur.
1const buffer = new ArrayBuffer(16);
2const dataView = new DataView(buffer);
3
4// Write a 32-bit signed integer to byte 0
5dataView.setInt32(0, 2147483647);
6console.log(dataView.getInt32(0)); // 2147483647
7
8// Write a 16-bit unsigned integer to byte 4
9dataView.setUint16(4, 65535);
10console.log(dataView.getUint16(4)); // 65535
Dengan menggunakan DataView, anda boleh menentukan offset bait dan membaca atau menulis data dengan pelbagai jenis. Ini sangat berguna apabila mengendalikan struktur binari yang kompleks seperti protokol rangkaian atau format fail.
Pertimbangan Endianness
Apabila menggunakan DataView, anda juga perlu memberi perhatian kepada endianness (susunan bait). Bergantung pada seni bina komputer, susunan data yang disimpan dalam ingatan boleh berbeza. Kaedah DataView mempunyai pilihan untuk menentukan endianness.
1const buffer = new ArrayBuffer(4);
2const view = new DataView(buffer);
3
4// Write a 32-bit integer in little-endian format
5view.setInt32(0, 42, true); // true indicates little-endian
6console.log(view.getInt32(0, true)); // 42
Jika anda tidak menentukan endianness yang betul, data mungkin tidak ditafsirkan dengan betul dalam persekitaran yang berbeza, jadi adalah penting untuk berhati-hati dalam komunikasi rangkaian atau operasi fail.
Aplikasi ArrayBuffer
ArrayBuffer ialah alat yang berkuasa yang sering digunakan dalam pembangunan web dan API pelayar. Mari kita lihat beberapa contoh aplikasi.
Menerima dan Memproses Data Binari
Sebagai contoh, anda boleh mendapatkan data binari daripada pelayan menggunakan XMLHttpRequest atau API fetch dan mengendalikannya sebagai ArrayBuffer.
1fetch('https://codesparklab.com/image.jpg')
2 .then(response => response.arrayBuffer())
3 .then(buffer => {
4 const view = new Uint8Array(buffer);
5 console.log(view);
6 });- Dalam contoh ini, data imej diperoleh daripada pelayan dan dikendalikan sebagai
Uint8Array. Dengan cara ini, anda boleh memproses data yang diterima daripada pelayan menggunakanArrayBuffer.
Penggunaan dalam WebGL
Dalam WebGL, ArrayBuffer digunakan untuk mengendalikan data binari seperti data bucu dan data warna dengan cekap.
1const vertices = new Float32Array([
2 -1.0, -1.0,
3 1.0, -1.0,
4 1.0, 1.0,
5 -1.0, 1.0
6]);
7
8// Send data to the WebGL buffer
9const buffer = gl.createBuffer();
10gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
11gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);- Dalam contoh ini,
Float32Arraydigunakan untuk menentukan koordinat bucu segi empat tepat dan menghantarnya ke penimbal WebGL.
Pengurusan Memori dan ArrayBuffer
ArrayBuffer mengurus memori di peringkat bait, menjadikannya sangat cekap, tetapi anda juga perlu berhati-hati dengan pengurusan memori. Apabila berurusan dengan data binari yang besar, adalah penting untuk melepaskan ArrayBuffer yang tidak digunakan dengan betul. Walaupun JavaScript secara automatik melakukan pengumpulan sampah, jika ArrayBuffer terus dirujuk, ia boleh menyebabkan kebocoran memori.
Ringkasan
ArrayBuffer menyediakan asas untuk pemprosesan data binari dalam JavaScript. Dengan menggabungkan TypedArray dan DataView, adalah mungkin untuk mengendalikan data binari dengan cekap dan fleksibel. Alat ini sangat penting dalam pembangunan web, terutamanya dalam banyak situasi yang melibatkan pengendalian data binari seperti komunikasi rangkaian dan WebGL. Dengan memahami mereka dengan betul dan menggunakannya secara sesuai, anda boleh meningkatkan prestasi dan kecekapan.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.