Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!08.10.2023
Типи для представлення масивів даних в JavaScript
-
String
- найбільш базовий тип; для тексту підійде, а для двійкових даних — ні. Технічно рядок може містити двійкові дані, але оскільки за стандартом рядки мають кодування UTF-16, то без особливої обробки вони будуть зіпсовані при перетвореннях. Та в будь-якому разі, це застарілий підхід, бо зараз є достатньо альтернатив. -
ArrayBuffer - справжній сучасний тип для збереження двійкових даних. Що важливо -
ArrayBuffer
можна передавати (transfer) зі сторінки до вебворкера та назад без копіювання. Сам по собіArrayBuffer
є “примітивним” типом, а працювати з ним зручно через “типізовані масиви”UInt8Array
та інші, а також через цікавий клас DataView, яким можна читати з масиву довільні дані. -
Buffer (той, що в Node.js) - в браузері можна замінити пакетом buffer - використовує всередині той самий
ArrayBuffer
. Так що пакети для Node.js, яким потрібний Buffer, теж можна підключати без зайвих витрат. -
Blob дуже схожий на
ArrayBuffer
, але за природою зовсім інша істота. ЯкщоArrayBuffer
- це масив даних в памʼяті, то Blob - це абстракція масиву даних, який може знаходитись будь-де. На практиці це “будь-де” значить або в памʼяті поточного процесу, або в спільній памʼяті браузера, або на диску. (КласFile
є нащадкомBlob
, до речі.) Через цеBlob
не можна змінювати, а читати дозволено тільки асинхронно. Зате можемо створювати на них посилання та в деяких випадках заощаджувати ресурси (якщо не створювати його власноруч). Втім, для роботи з невеликими даними безпосередньо в браузері від Blob немає користі. -
Як
ArrayBuffer
, так іBlob
можна вказувати як тіло запита HTTP, або навпаки, як тип результату. Тут треба дивитись — якщо будемо працювати з даними, кращеArrayBuffer
, якщо просто передавати далі — кращеBlob
.