JavaScript ArrayBuffer
ArrayBuffer — bu xotiraning ma'lum bir o'lchamdagi qismi (blok). U binar ma'lumotlarni saqlash uchun poydevor vazifasini o'taydi.
Xotira bloki
ArrayBuffer — bu shunchaki baytlar to'plami. Uning ichidagi ma'lumotlarni to'g'ridan-to'g'ri o'qib bo'lmaydi. Uni o'qish uchun har doim "ko'rinish" (view) kerak bo'ladi.
ArrayBuffer yaratish
ArrayBuffer yaratishda uning hajmi baytlarda ko'rsatiladi:
// 16 baytlik xotira maydoni yaratish
const myBuf = new ArrayBuffer(16)
// Hajmini tekshirish
console.log(myBuf.byteLength) // 16Muhim qoidalar
- Hajmi o'zgarmas: ArrayBuffer yaratilgandan so'ng uning hajmini o'zgartirib bo'lmaydi.
- To'g'ridan-to'g'ri foydalanib bo'lmaydi:
myBuf[0]deb qiymat yozib yoki o'qib bo'lmaydi. Buning uchunTyped ArrayyokiDataViewkerak. :::
ArrayBuffer-dan foydalanish
Xotira blokidagi ma'lumotlarni boshqarish uchun uning ustiga "niqob" yoki "ko'rinish" (view) kiydirishimiz kerak:
const buffer = new ArrayBuffer(8) // 8 bayt
// 1. Uint8Array orqali (har bir element 1 bayt)
const view8 = new Uint8Array(buffer) // Maksimal 8 ta son
view8[0] = 255
// 2. Int32Array orqali (har bir element 4 bayt)
const view32 = new Int32Array(buffer) // Maksimal 2 ta son
view32[0] = 100000ArrayBuffer-ni nusxalash (Slice)
Massivlardagi kabi, xotira blokining bir qismini slice() metodidan foydalanib nusxalab olish mumkin:
const buffer = new ArrayBuffer(16)
const sliced = buffer.slice(4, 12) // 4-baytdan 12-baytgacha nusxa oladi
console.log(sliced.byteLength) // 8NOTE
slice() metodi har doim yangi xotira bloki yaratadi va ma'lumotlarni nusxalaydi. Ular bir-biriga bog'liq bo'lmaydi.
SharedArrayBuffer
Oddiy ArrayBuffer bitta oqimda (thread) ishlaydi. Agar siz ma'lumotlarni kodingizning turli qismlari (masalan, Web Workers) o'rtasida bir vaqtda ishlatmoqchi bo'lsangiz, SharedArrayBuffer-dan foydalanishingiz kerak.
CAUTION
Xavfsizlik sababli (Spectre/Meltdown hujumlari), SharedArrayBuffer barcha saytlarda ham ishlamasligi mumkin. Buning uchun maxsus HTTP sarlavhalari (COOP/COEP) talab qilinadi.
Xulosa
- ArrayBuffer: Faqat xotira bloki, unga to'g'ridan-to'g'ri yozib bo'lmaydi.
- View (Ko'rinish): Xotirani qanday talqin qilishni belgilaydi (Typed Array yoki DataView).
- Hajmi: Baytlarda o'lchanadi va o'zgarmasdir.
Keyingi qadam
Xotira blokidagi turli xil ma'lumotlarni (masalan, ham son, ham matn) bitta joyda boshqarishni o'rganish uchun DataView darsiga o'ting.
