Auf Wiedersehen, Node.js Buffer. Es ist Zeit, zu Uint8Array zu wechseln
(sindresorhus.com)- Der Typ
Bufferwar seit den Anfängen von Node.js ein Grundpfeiler für die Verarbeitung binärer Daten - Heute ist
Uint8Arrayjedoch der grundlegende JavaScript-Typ und funktioniert auch plattformübergreifend Bufferist zwar eine Instanz vonUint8Array, führt aber viele Methoden ein, die in anderen JavaScript-Umgebungen nicht verfügbar sind- Deshalb erfordert Code, der
Buffer-Methoden nutzt, Polyfills, wodurch viele wichtige Pakete nicht mit Browsern kompatibel sind - Außerdem verhalten sich
Buffer#slice()undUint8Array#slice()unterschiedlich, was zu unvorhersehbaren Ergebnissen führen kann
- Deshalb erfordert Code, der
Plan
- Alle Pakete sollen von
BufferaufUint8Arrayumgestellt werden Bufferwird wahrscheinlich nie entfernt und auch nicht wirklich veralten, aber zumindest könnte sich die Community nach und nach davon entfernen- Meine Hoffnung ist, dass das Node.js-Team zumindest damit beginnt, die Verwendung von
Buffernicht mehr zu empfehlen
How
- Mach dich zunächst mit den subtilen Inkompatibilitäten zwischen
Uint8ArrayundBuffervertraut - Um die Migration zu erleichtern, wurde das Paket
uint8array-extraserstellt - Wenn dein Code
Bufferentgegennimmt und keineBuffer-spezifischen Methoden verwendet, musst du nur die Dokumentation und Typen aufUint8Arrayaktualisieren- Die Änderung des Eingabetyps von
BufferzuUint8Arrayist keine Breaking Change, daBuffereine Instanz vonUint8Arrayist
- Die Änderung des Eingabetyps von
- Die Änderung des Rückgabetyps von
BufferzuUint8Arrayist dagegen eine Breaking Change, weil Consumer möglicherweiseBuffer-spezifische Methoden verwenden - Wenn
Uint8Arrayzwingend inBufferumgewandelt werden muss, kannst duBuffer.from(uint8Array)(kopiert die Daten) oderBuffer.from(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength)(ohne Kopie) verwenden. In der Regel gibt es aber einen besseren Weg - Die Schritte für die Umstellung sind
- In Imports aus
'node:buffer'alleimport {Buffer}entfernen - Global alle Verwendungen von
Bufferentfernen - Die Nutzung von
Buffer-spezifischen Methoden beenden
- In Imports aus
Fragen
- Warum gab es
Bufferüberhaupt? :Bufferwurde lange vorUint8Arrayentwickelt - Wie konvertiert man mit
Uint8Arrayvon/nach Base64? : Verwende vorerstuint8array-extras. Wahrscheinlich wird dies irgendwann nativ in JavaScript unterstützt werden
1 Kommentare
Oh, die Bibliothek in der Mitte ist wirklich sehr gut.