11 pontos por xguru 2023-10-26 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
dodok8 2023-10-27

Ah, no meio tem uma biblioteca muito boa.