- 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() e Uint8Array#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
Uint8Array e 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 de Uint8Array
- 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
Uint8Array em Buffer, você pode usar Buffer.from(uint8Array) (copia os dados) ou Buffer.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
Perguntas
- Por que Buffer existia em primeiro lugar? : Buffer foi criado muito antes de
Uint8Array existir
- Como fazer conversão from/to Base64 usando
Uint8Array? : Por enquanto, use uint8array-extras. No futuro, isso provavelmente terá suporte nativo em JavaScript
1 comentários
Ah, no meio tem uma biblioteca muito boa.