11 Punkte von xguru 2023-10-26 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
dodok8 2023-10-27

Oh, die Bibliothek in der Mitte ist wirklich sehr gut.