*”If you stream it, you can do it” (Se o senhor transmitir, o senhor consegue) — Walt Disney[^1] *

Os streams estão entrando em cena à medida que buscamos maneiras de melhorar o desempenho. E se, em vez de esperar pelo nosso inteiro a resposta ajax completa, poderíamos começar a mostrar os dados à medida que eles chegam?

Os fluxos nos permitem fazer isso. Eles são uma fonte de dados que pode ser criada e processada de forma incremental. Isso significa que, à medida que pedaços de dados ficam disponíveis, podemos trabalhar neles imediatamente.

Usando o API de busca com um formato de dados chamado NDJSON que divide objetos JSON maiores em objetos JSON menores delimitados por caracteres de nova linha, podemos receber um fluxo de pedaços menores de dados JSON como um fluxo. Como nossos dados NDJSON estão sendo transmitidos, podemos começar a processar e renderizar imediatamente. Isso deixa os usuários felizes porque podem ver as coisas mais cedo e os desenvolvedores felizes porque aumenta o desempenho geral. Se o senhor associar tudo isso aos service workers, poderá realmente ver o melhorias no desempenho.

renderização incremental de NDJSON vs. objeto JSON

processo de streaming json

Parece uma situação em que todos ganham, mas qual é o problema? Bem, existem pacotes no npm, como o ndjson que serializa JSON para NDJSON, mas não temos uma maneira fácil de desserializar NDJSON para um fluxo de objetos JavaScript… até agora!

can-ndjson-stream é um módulo JavaScript simples que faz o trabalho pesado de serializar seu fluxo NDJSON em um arquivo ReadableStream de objetos JavaScript. Use-o da mesma forma que usaria JSON.parse com um objeto JSON.

ndjson streaming db row

Siga estas etapas simples para usar o can-ndjson-stream .

//1. require the can-ndjson-stream module
import ndjsonStream from 'can-ndjson-stream';

//2. pass the NDJSON stream response body to the ndjsonStream function. Typically, this would be used with the fetch() method.

const readableStream = ndjsonStream(response.body);  
//3. use readableStream, which is now a ReadableStream of JS objects, however you like. The ReadableStream API exposes a .getReader() and .cancel() method.

//https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream

este tutorial no blog da Bitovi, que o ajudará a começar, ou dê uma olhada na demonstração em o repositório can-ndjson-stream.

envie um tweet para nós como o senhor planeja usar esse módulo! Confira também o restante do biblioteca CanJS. Se o senhor precisar de ajuda, não hesite em deixar um comentário abaixo ou fazer perguntas na seção Gitter do CanJS ou fóruns!

NDJSON significa JSON delimitado por nova linha. Cada caractere de nova linha em um arquivo separa essa linha em objetos JSON individuais, o que nos permite transmitir muitos pedaços menores de JSON em vez de um objeto JSON grande.

Bianca Gandolfo

Sobre Bianca Gandolfo

Bianca é uma entusiasta de JavaScript que atualmente trabalha na equipe de código aberto da Bitovi. Ela gosta de fingir que está codificando as partes mais importantes da estrutura DoneJS em algum porão de hackers, mas na maior parte do tempo ela está apenas escrevendo documentação e corrigindo bugs perto da praia. Quando não está fazendo isso, ela pratica queimaduras solares enquanto se apaga repetidamente em uma prancha de surfe e escreve um currículo de JS para bootcamps de codificação em todo o mundo. Confira seus cursos em Estruturas de dados e algoritmos em JS e JS Foundations for Functional Programming (Fundamentos da Programação Funcional) em Mestres de Frontend.