У Льоні сьогодні

Типи для представлення масивів даних в 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.