Au revoir Node.js Buffer. Il est temps de passer à Uint8Array
(sindresorhus.com)- Le type Buffer a été la pierre angulaire du traitement des données binaires depuis les débuts de Node.js
- Mais aujourd’hui,
Uint8Arrayest le type JavaScript de base et fonctionne aussi en cross-platform Bufferest une instance deUint8Array, mais il a introduit diverses méthodes qui ne peuvent pas être utilisées dans d’autres environnements JavaScript- Par conséquent, le code qui exploite les méthodes de
Buffera besoin de polyfills, ce qui rend de nombreux packages importants incompatibles avec le navigateur - De plus,
Buffer#slice()etUint8Array#slice()ont un comportement différent, ce qui peut entraîner des résultats imprévisibles
- Par conséquent, le code qui exploite les méthodes de
Plan
- Décision de faire migrer tous les packages de
BufferversUint8Array Bufferne sera probablement jamais supprimé et ne deviendra sans doute jamais obsolète, mais au moins la communauté pourra progressivement s’en éloigner- Mon espoir est que l’équipe Node.js commence au moins à ne plus recommander l’usage de
Buffer
How
- D’abord, bien comprendre les subtiles incompatibilités entre
Uint8ArrayetBuffer - J’ai créé le package
uint8array-extraspour faciliter la migration - Si votre code reçoit un
Buffersans utiliser de méthodes spécifiques àBuffer, il suffit de mettre à jour la documentation et les types versUint8Array- Changer le type d’entrée de
BufferàUint8Arrayest une modification non breaking, car un buffer est une instance deUint8Array
- Changer le type d’entrée de
- En revanche, changer le type de retour de buffer à
Uint8Arrayest une modification breaking, car les consommateurs peuvent utiliser des méthodes propres à buffer - Si vous devez absolument convertir un
Uint8ArrayenBuffer, vous pouvez utiliserBuffer.from(uint8Array)(copie des données) ouBuffer.from(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength)(sans copie). Mais il existe généralement une meilleure approche - Les étapes de la transition sont
- Supprimer tous les
import {Buffer}depuis l’import'node:buffer' - Supprimer globalement tous les usages de
Buffer - Cesser d’utiliser les méthodes spécifiques à
Buffer
- Supprimer tous les
Questions
- Pourquoi
Bufferexistait-il au départ ? :Buffera été créé bien avantUint8Array - Comment convertir depuis/vers Base64 avec
Uint8Array? : Pour l’instant, utilisezuint8array-extras. À terme, cela sera probablement pris en charge nativement par JavaScript
1 commentaires
Oh, cette bibliothèque au milieu est vraiment très bien.