- Der Typ
Buffer war seit den Anfängen von Node.js ein Grundpfeiler für die Verarbeitung binärer Daten
- Heute ist
Uint8Array jedoch der grundlegende JavaScript-Typ und funktioniert auch plattformübergreifend
Buffer ist zwar eine Instanz von Uint8Array, 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() und Uint8Array#slice() unterschiedlich, was zu unvorhersehbaren Ergebnissen führen kann
Plan
- Alle Pakete sollen von
Buffer auf Uint8Array umgestellt werden
Buffer wird 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
Buffer nicht mehr zu empfehlen
How
- Mach dich zunächst mit den subtilen Inkompatibilitäten zwischen
Uint8Array und Buffer vertraut
- Um die Migration zu erleichtern, wurde das Paket
uint8array-extras erstellt
- Wenn dein Code
Buffer entgegennimmt und keine Buffer-spezifischen Methoden verwendet, musst du nur die Dokumentation und Typen auf Uint8Array aktualisieren
- Die Änderung des Eingabetyps von
Buffer zu Uint8Array ist keine Breaking Change, da Buffer eine Instanz von Uint8Array ist
- Die Änderung des Rückgabetyps von
Buffer zu Uint8Array ist dagegen eine Breaking Change, weil Consumer möglicherweise Buffer-spezifische Methoden verwenden
- Wenn
Uint8Array zwingend in Buffer umgewandelt werden muss, kannst du Buffer.from(uint8Array) (kopiert die Daten) oder Buffer.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' alle import {Buffer} entfernen
- Global alle Verwendungen von
Buffer entfernen
- Die Nutzung von
Buffer-spezifischen Methoden beenden
Fragen
- Warum gab es
Buffer überhaupt? : Buffer wurde lange vor Uint8Array entwickelt
- Wie konvertiert man mit
Uint8Array von/nach Base64? : Verwende vorerst uint8array-extras. Wahrscheinlich wird dies irgendwann nativ in JavaScript unterstützt werden
1 Kommentare
Oh, die Bibliothek in der Mitte ist wirklich sehr gut.