Выбор ответа Senior Нативные модули обновлено

Передача больших данных между JS и нативом

Вопрос

Модуль обработки фото возвращает в JS отредактированное изображение размером 12 МБ. Как правильно спроектировать API?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Натив сохраняет результат в файл и возвращает путь file://... Даже без JSON-сериализации большие данные в куче JS дороги: base64 увеличивает объём на треть и создаёт огромную строку, массив пикселей ещё хуже, а множество мелких вызовов добавляет накладные расходы.

Варианты ответа

  1. Натив сохраняет результат в файл и возвращает путь file://...правильный ответ
  2. Вернуть base64-строку: через JSI она передаётся без каких-либо затрат
  3. Вернуть массив чисел с пикселями, чтобы JS мог сразу показать изображение
  4. Разбить картинку на части по 1 КБ и передать их сотнями отдельных вызовов

Разбор

Даже без JSON-сериализации большие данные в куче JS дороги: base64 увеличивает объём на треть и создаёт огромную строку, массив пикселей ещё хуже, а множество мелких вызовов добавляет накладные расходы. Пути к файлам почти ничего не стоят: и Image, и загрузчики умеют работать с файлами напрямую, а пиксели остаются в нативной памяти.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.