11 puntos por xguru 2023-10-26 | 1 comentarios | Compartir por WhatsApp
  • El tipo Buffer fue una pieza fundamental del manejo de datos binarios desde los inicios de Node.js
  • Pero hoy en día Uint8Array es el tipo base de JavaScript y además funciona de forma multiplataforma
  • Buffer es una instancia de Uint8Array, pero introdujo muchos métodos que no se pueden usar en otros entornos de JavaScript
    • Por eso, el código que aprovecha métodos de Buffer necesita polyfills, lo que hace que muchos paquetes importantes no sean compatibles con el navegador
    • Además, Buffer#slice() y Uint8Array#slice() se comportan de manera distinta, por lo que pueden producir resultados impredecibles

Plan

  • Se decidió mover todos los paquetes de Buffer a Uint8Array
  • Buffer probablemente nunca será eliminado ni dejará de usarse por completo, pero al menos la comunidad podría ir alejándose gradualmente de él
  • Mi esperanza es que el equipo de Node.js al menos empiece por no recomendar el uso de Buffer

How

  • Primero, familiarízate con las sutiles incompatibilidades entre Uint8Array y Buffer
  • Para facilitar la migración, creé el paquete uint8array-extras
  • Si tu código recibe Buffer pero no usa métodos específicos de Buffer, solo necesitas actualizar la documentación y los tipos a Uint8Array
    • Cambiar el tipo de entrada de Buffer a Uint8Array es un cambio no disruptivo, ya que Buffer es una instancia de Uint8Array
  • Cambiar el tipo de retorno de Buffer a Uint8Array sí es un cambio disruptivo, porque los consumidores podrían estar usando métodos exclusivos de Buffer
  • Si necesariamente tienes que convertir Uint8Array a Buffer, puedes usar Buffer.from(uint8Array)(copia los datos) o Buffer.from(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength)(sin copiar). Pero por lo general hay una mejor manera
  • Los pasos para hacer la transición son
    • eliminar todos los import {Buffer} desde 'node:buffer'
    • eliminar globalmente todos los usos de Buffer
    • dejar de usar métodos específicos de Buffer

Preguntas

  • ¿Por qué existía Buffer en primer lugar? : Buffer fue creado mucho antes de que existiera Uint8Array
  • ¿Cómo convertir desde/hacia Base64 usando Uint8Array? : Por ahora, usa uint8array-extras. Con el tiempo, es muy probable que JavaScript lo soporte de forma nativa

1 comentarios

 
dodok8 2023-10-27

Oh, la librería de en medio está muy buena.