Потоковая передача JSON с oboe.js из сжатого gzip-ресурса

Я храню некоторые данные json в виде gzip-файла на сервере (чтобы уменьшить объем передаваемых данных, а также уменьшить использование диска на сервере).

Теперь я хочу распаковать и проанализировать данные json на стороне клиента (в браузере работает реакция/узел).

Я подумал, что использование oboe.js может быть подходящим выбором для этой задачи. К сожалению, напрямую передать оба потока при работе в браузере не представляется возможным. Решение, к которому я вернулся, состоит в том, чтобы передавать куски данных в oboe после их распаковки (см. код внизу этого поста).

Хотя это работает, браузер на некоторое время зависает, если слушателю узла требуется некоторое время для обработки узла (конечно, для анализа данных потребуется некоторое время, но я хотел бы, чтобы приложение оставалось отзывчивым и, возможно, даже обновляло просмотр по уже обработанным данным).

Я подозреваю, что все данные в основном передаются на гобой сразу, а не ждут, пока будет прочитан последний фрагмент. Это правильно? Есть ли подходящий способ замедлить объем данных, поступающих на гобой, или есть более прямой способ работы с gzip-потоком и гобоем?

var o = oboe();
var gunzip = zlib.createGunzip();

gunzip.on('data', (chunk) => o.emit('data', chunk.toString()))
      .on('end', o.emit('end'));

request(options).on('response', response => {
  o.emit('start', response.statusCode, response.headers);
  response.pipe(gunzip);
};

o.node('{name}', () => {
  //Do stuff with node
  return oboe.drop;
});

Кажется, когда поток передается на гобой, данные передаются на гобой, когда они доступны. Это решение, вероятно, было принято исходя из предположения, что события узла обрабатываются быстрее, чем данные, поступающие в поток.

Max Ploner 23.01.2019 17:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
448
1

Ответы 1

Кажется, вы не можете правильно использовать функциональность канала (например, адаптацию скорости) из-за «обертки» в строках 4-5. Просто удалите его.

Дополнительная информация о трубопроводе узел.js

Спасибо за предоставленный вами ресурс, я буду следить за этим и посмотрю, смогу ли я найти решение. Что вы имеете в виду под «просто удалить его» - использование gunzip.pipe(o) не работает («Неперехваченная ошибка: dest.once не является функцией»), но каким-то образом данные должны передаваться из gunzip в гобой.

Max Ploner 23.01.2019 16:33

Другие вопросы по теме