`ArrayBuffer` sa JavaScript
Ipinaliliwanag ng artikulong ito ang ArrayBuffer
sa JavaScript.
Ipapaliwanag namin ang lahat tungkol sa ArrayBuffer
, mula sa mga pangunahing kaalaman hanggang sa paggamit nito, mga kaugnay na uri, at praktikal na aplikasyon.
YouTube Video
ArrayBuffer
sa JavaScript
Ang ArrayBuffer
sa JavaScript ay isang object para sa paghawak ng mababang antas ng binary na data at lubos na kapaki-pakinabang para sa pagmamanipula ng binary na data sa WebAPIs, mga operasyon ng file, at komunikasyon sa network.
Ano ang ArrayBuffer
Ang ArrayBuffer
ay isang istruktura ng data para sa paghawak ng binary na datos na may nakatakdang haba. Pinapahintulutan nitong hawakan ang raw na binary data na hindi kayang hawakan ng karaniwang mga array o object sa JavaScript.
Ang ArrayBuffer
mismo ay hindi direktang makakamanipula ng data. Sa halip, ang data ay binabasa at isinusulat gamit ang TypedArray
o DataView
batay sa isang ArrayBuffer
.
Ang ArrayBuffer
ay lubos na kapaki-pakinabang sa mga sumusunod na sitwasyon.
- Kapag pinoproseso ang binary na data na natanggap mula sa network
- Kapag kinakailangan ang mahusay na pagbabahagi ng datos sa
Web Worker
. - Kapag gumagawa ng pagproseso sa imahe o 3D rendering gamit ang Canvas o WebGL.
- Kapag nagma-manipula ng mga file (lalo na ang mga binary file).
Paglikha ng isang ArrayBuffer
Una, magsimula tayo sa kung paano lumikha ng isang instance ng ArrayBuffer
. Ang ArrayBuffer
ay naglalaan ng memorya sa mga unit ng byte, kaya tinutukoy mo ang laki nito sa oras ng paglikha.
1const buffer = new ArrayBuffer(16); // Create a 16-byte buffer
2console.log(buffer.byteLength); // 16
- Sa halimbawang ito, isang buffer na may 16 bytes ang itinalaga. Ang buffer na ito ay wala pang anumang data.
Pagmamanipula ng data gamit ang TypedArray
Hindi mo direktang ma-access ang isang ArrayBuffer
, kaya gumamit ka ng TypedArray
upang magbasa at magsulat ng data. Ang TypedArray
ay nagbibigay ng iba't ibang uri ng mga view tulad ng Int8Array
at Float32Array
, na nagbibigay-daan sa mahusay na pag-access sa binary na data.
Halimbawa gamit ang 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
- Ang
Int8Array
ay maaaring mag-imbak ng data sa bawat byte, na nagbibigay-daan sa buffer na maglaman ng 8 elemento. Sa ganitong paraan, sa pamamagitan ng paggamit ng iba't ibang uri ng view, maaari mong manipulahin ang data nang mas mahusay.
Iba pang mga halimbawa ng TypedArray
Ang JavaScript ay may iba't ibang uri ng TypedArray
. Halimbawa, kung nais mong magproseso ng 32-bit na unsigned integers, gamitin mo ang Uint32Array
.
1const buffer = new ArrayBuffer(16);
2const uint32View = new Uint32Array(buffer);
3
4uint32View[0] = 123456;
5console.log(uint32View[0]); // 123456
Ang Uint32Array ay maaaring mag-imbak ng datos sa 4-byte na mga yunit, kaya ang buffer ay maaaring maglaman ng apat na elemento. Mahalagang pumili ng tamang
TypedArray` batay sa uri ng data na iyong pinoproseso.
Flexible na pagmanipula ng data gamit ang DataView
Ang TypedArray
ay maaaring magproseso lamang ng data na may permanenteng uri, ngunit sa pamamagitan ng paggamit ng DataView
, maaari kang magsulat ng data ng anumang uri sa kahit anong lokasyon. Ito ay lubos na kapaki-pakinabang kapag humahawak ng buffers na may pinagsamang uri ng data.
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
Gamit ang DataView
, maaari mong tukuyin ang byte offset at basahin o isulat ang data na may iba't ibang uri. Ito ay lubos na kapaki-pakinabang kapag humahawak ng mga komplikadong binary structures tulad ng network protocols o file formats.
Pag-isipan ang Endianness
Kapag gumagamit ng DataView
, kailangan mo ring bigyang-pansin ang endianness (byte order). Depende sa arkitektura ng computer, maaaring magkaiba ang pagkakasunod-sunod ng data sa memorya. Ang mga pamamaraan ng DataView
ay may mga opsyon upang tukuyin ang 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
Kung hindi mo tukuyin ang tamang endianness, maaaring hindi tama ang interpretasyon ng data sa iba't ibang kapaligiran, kaya't mahalaga ang pagiging maingat lalo na sa network communication o mga operasyon sa file.
Mga aplikasyon ng ArrayBuffer
Ang ArrayBuffer
ay isang makapangyarihang tool na madalas ginagamit sa web development at browser APIs. Tingnan natin ang ilang halimbawa ng mga aplikasyon.
Pagtanggap at Pagproseso ng Binary Data
Halimbawa, maaari kang kumuha ng binary data mula sa isang server gamit ang XMLHttpRequest
o ang fetch
API at i-proseso ito bilang isang 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 });
- Sa halimbawang ito, ang image data ay kinuha mula sa server at iprinoproseso bilang isang
Uint8Array
. Sa ganitong paraan, maaari mong iproseso ang data na natanggap mula sa server gamit angArrayBuffer
.
Paggamit sa WebGL
Sa WebGL, ang ArrayBuffer
ay ginagamit upang mahusay na magproseso ng binary data tulad ng vertex data at color data.
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);
- Sa halimbawang ito, ang
Float32Array
ay ginagamit upang tukuyin ang vertex coordinates ng isang rectangle at ipadala ang mga ito sa isang WebGL buffer.
Pamamahala ng Memorya at ArrayBuffer
Ang ArrayBuffer
ay namamahala ng memorya sa antas ng byte, kaya't ito ay napaka-episyente, ngunit kailangan mo ring maging maingat sa pamamahala ng memorya. Kapag humaharap sa malalaking binary na datos, mahalagang maayos na i-release ang hindi nagagamit na mga ArrayBuffer
. Bagama't awtomatikong isinasagawa ng JavaScript ang garbage collection, kung ang isang ArrayBuffer
ay patuloy na ginagamit, maaari itong magdulot ng memory leaks.
Buod
Ang ArrayBuffer
ang nagbibigay ng pundasyon para sa pagpoproseso ng binary na datos sa JavaScript. Sa pamamagitan ng pagsasama ng TypedArray
at DataView
, posible ang mahusay at flexible na paghawak ng binary na datos. Sila ay mga kailangang-kailangang kasangkapan sa pag-develop ng web, lalo na sa maraming sitwasyong may kinalaman sa paghawak ng binary na datos tulad ng komunikasyong pang-network at WebGL. Sa pamamagitan ng wastong pag-unawa at tamang paggamit ng mga ito, maaari mong mapahusay ang performance at kahusayan.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.