Adeus ao Buffer do Node.js. Chegou a hora de migrar para Uint8Array
(sindresorhus.com)- O tipo Buffer foi a base do processamento de dados binários desde os primórdios do Node.js
- Mas hoje em dia,
Uint8Arrayé um tipo padrão do JavaScript e também funciona em ambientes multiplataforma - Buffer é uma instância de
Uint8Array, mas introduziu vários métodos que não podem ser usados em outros ambientes JavaScript- Portanto, códigos que utilizam métodos de Buffer precisam de polyfills, o que faz com que muitos pacotes importantes deixem de ser compatíveis com o navegador
- Além disso,
Buffer#slice()eUint8Array#slice()funcionam de forma diferente, o que pode gerar resultados imprevisíveis
Plano
- Foi decidido mover todos os pacotes de Buffer para
Uint8Array - Buffer provavelmente nunca será removido e talvez nem deixe de ser usado, mas pelo menos a comunidade pode começar a se afastar dele gradualmente
- Minha esperança é que a equipe do Node.js comece, no mínimo, a não recomendar o uso de Buffer
How
- Primeiro, entenda as incompatibilidades sutis entre
Uint8Arraye Buffer - Para facilitar a migração, foi criado o pacote
uint8array-extras - Se o seu código recebe Buffer mas não usa métodos específicos relacionados a Buffer, basta atualizar a documentação e os tipos para
Uint8Array- Alterar o tipo de entrada de Buffer para
Uint8Arrayé uma mudança non-breaking, já que Buffer é uma instância deUint8Array
- Alterar o tipo de entrada de Buffer para
- Alterar o tipo de retorno de Buffer para
Uint8Arrayé uma mudança breaking, porque os consumidores podem estar usando métodos exclusivos de Buffer - Se for realmente necessário converter
Uint8Arrayem Buffer, você pode usarBuffer.from(uint8Array)(copia os dados) ouBuffer.from(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength)(sem cópia). Mas, em geral, há formas melhores - As etapas da migração são
- remover todos os
import {Buffer}de'node:buffer' - remover globalmente todos os usos de Buffer
- parar de usar métodos específicos de Buffer
- remover todos os
Perguntas
- Por que Buffer existia em primeiro lugar? : Buffer foi criado muito antes de
Uint8Arrayexistir - Como fazer conversão from/to Base64 usando
Uint8Array? : Por enquanto, useuint8array-extras. No futuro, isso provavelmente terá suporte nativo em JavaScript
1 comentários
Ah, no meio tem uma biblioteca muito boa.