TypedArray sa JavaScript
Ipinaliliwanag ng artikulong ito ang TypedArray
sa JavaScript.
Ipapaliwanag namin nang detalyado ang pangunahing konsepto ng TypedArray
, bawat uri, paano ito gamitin, at ang mga partikular na kaso ng paggamit.
YouTube Video
TypedArray sa JavaScript
Ang TypedArray
sa JavaScript ay isang object para sa mahusay na paghawak ng buffered binary data. Ang TypedArray
ay naglalaan at nagmamanipula ng memory batay sa tiyak na mga uri ng data. Hindi tulad ng karaniwang arrays, ang TypedArray
ay maaari lamang maglaman ng fixed-size binary data, hindi arbitraryong mga uri ng data.
Ang Pangunahing Estruktura ng TypedArray
Ang mga pangunahing sangkap ng isang TypedArray
ay ang ArrayBuffer
at ang mismong TypedArray
.
- ArrayBuffer: Isang fixed-size buffer na naglalaan ng binary data sa memory. Ang buffer na ito ay isa lamang data area at hindi maaaring basahin o sulatan nang direkta.
- TypedArray: Isang wrapper object na nag-aaplay ng tiyak na uri ng data sa buffer, na nagpapahintulot ng access at pag-manipula ng data.
Pangunahing Halimbawa ng Paggamit
Narito ang isang halimbawa ng paglikha ng isang ArrayBuffer
at pagkatapos ay paglikha ng isang TypedArray
batay dito.
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
- Sa halimbawang ito, isang
ArrayBuffer
ang nalikha, at pagkatapos ay ginawa ang isangUint8Array
batay sa buffer na iyon. Ang bawat elemento ay itinuturing bilang isang 8-bit unsigned integer, nag-iimbak ng mga halaga lamang sa loob ng tinukoy na saklaw.
Mga Uri ng TypedArray
Mayroong iba't ibang uri ng TypedArray
para sa bawat uri ng data. Ang pangunahing mga uri ay ang mga sumusunod.
Pangalan ng Uri | Sukat ng Elemento | Paglalarawan |
---|---|---|
Int8Array |
1 byte | 8-bit na naka-sign na integer |
Uint8Array |
1 byte | 8-bit na unsigned na integer |
Uint8ClampedArray |
1 byte | 8-bit na unsigned na integer (naglalaman ng clamped na mga halaga) |
Int16Array |
2 bytes | 16-bit na naka-sign na integer |
Uint16Array |
2 bytes | 16-bit na unsigned na integer |
Int32Array |
4 bytes | 32-bit na naka-sign na integer |
Uint32Array |
4 bytes | 32-bit na unsigned na integer |
Float32Array |
4 bytes | 32-bit na floating-point na numero |
Float64Array |
8 bytes | 64-bit na floating-point na numero |
Ang mga TypedArray
na ito ay memory-efficient at epektibo para sa paghawak ng malalaking volume ng data.
Pagmanipula ng TypedArrays
Maaari mong ma-access ang data sa isang TypedArray
gamit ang mga index, katulad ng isang karaniwang array, ngunit may ilang espesyal na method na magagamit din.
Pagse-set ng mga halaga
Sa isang TypedArray
, maaari kang maglagay ng maraming halaga nang sabay-sabay gamit ang set
method.
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
- Gumagamit ang code na ito ng
set
method upang magtalaga ng maraming halaga nang sabay-sabay sa isangInt16Array
, at ipinapakita ang bawat elemento sa console.
Pagkuha ng subarray
Upang makuha ang bahagi ng isang TypedArray
bilang subarray, gamitin ang subarray
method. Ito ay tumutukoy sa parehong buffer tulad ng orihinal na TypedArray
.
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]
- Kinukuha ng code na ito ang tinukoy na saklaw ng mga elemento mula sa isang
Int16Array
gamit angsubarray
method at ipinapakita ang subarray sa console.
Pagko-copy ng buffers
Ang buffer ng isang TypedArray
ay maaari ring kopyahin sa isa pang TypedArray
. Gamit ang set
method, maaari kang mag-copy mula sa isang tinukoy na posisyon.
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]
- Kinokopya ng code na ito ang laman ng isang
Uint8Array
sa ibang array gamit angset
method, at ipinapakita ang kinopyang array sa console.
Gamit ang DataView
Habang ang isang TypedArray
ay humahawak ng mga buffer na may nakapirming uri ng data, ang DataView
ay isang interface na nagbibigay-daan sa nababaluktot na manipulasyon ng binary data na may mga arbitrary offset at uri ng data. Ito ay nagpapahintulot sa iba't ibang uri na pagsamahin sa loob ng parehong buffer.
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
-
Gumagamit ang code na ito ng
DataView
upang magsulat ng iba't ibang uri ng data—32-bit na integer at 32-bit na floating-point number—sa parehong buffer at sinusuri ang mga resulta. -
Ang
DataView
ay nag-aalok ng mas malaking kakayahang umangkop sa pag-access ng data kaysa saTypedArray
at lalong kapaki-pakinabang kapag nagtatrabaho sa mga file na may binary format o mga network protocol.
Mga kaso ng paggamit ng TypedArray
Ang TypedArray
ay pangunahing ginagamit para sa mahusay na paghawak ng malalaking dami ng binary data. Ang mga tiyak na kaso ng paggamit ay kinabibilangan ng mga sumusunod.
Pagpoproseso ng imahe
Ang TypedArray
ay ginagamit kapag nagmamaniobra ng impormasyon ng pixel mula sa data ng imahe. Gamit ang Uint8Array
, hawak mo ang mga halaga ng RGBA ng bawat pixel at ginagawa ang pag-edit at pagpoproseso ng imahe.
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}
- Gumagawa ang code na ito ng image data na may lapad na 100 at taas na 100 sa RGBA format gamit ang
Uint8Array
, at itinatakda lahat ng pixel sa pula.
Pakikipag-ugnayan sa WebAssembly
Ginagamit ang TypedArray
para sa pagpapalitan ng binary data sa pagitan ng JavaScript at WebAssembly. Sa pamamagitan ng pagbabahagi ng memory space ng JavaScript at WebAssembly gamit ang ArrayBuffer
, posible ang mabilis na pagpapalitan ng data.
Pagpoproseso ng audio at video na data
May mahalagang papel ang TypedArray
sa pagpoproseso ng audio at video. Puwede mong iimbak ang mga waveform ng audio data sa Float32Array
para sa pag-playback at pagproseso.
Konklusyon
Ang TypedArray
ay isang makapangyarihang kagamitan para sa mahusay na paghawak ng malalaking dami ng binary data. Ito ay lalo nang kapaki-pakinabang sa mga application na kritikal sa performance tulad ng pagproseso ng imahe, WebAssembly, at pagproseso ng audio/video na data. Ang TypedArray
ay may API na kapareho ng karaniwang arrays, ngunit may mga limitasyon sa paggamit ng memory at mga uri ng data, kaya kinakailangan ng tamang pagkakaiba sa paggamit.
Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.