- 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
Oh, la librería de en medio está muy buena.