- Le type Buffer a été la pierre angulaire du traitement des données binaires depuis les débuts de Node.js
- Mais aujourd’hui,
Uint8Array est le type JavaScript de base et fonctionne aussi en cross-platform
Buffer est une instance de Uint8Array, 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
Buffer a besoin de polyfills, ce qui rend de nombreux packages importants incompatibles avec le navigateur
- De plus,
Buffer#slice() et Uint8Array#slice() ont un comportement différent, ce qui peut entraîner des résultats imprévisibles
Plan
- Décision de faire migrer tous les packages de
Buffer vers Uint8Array
Buffer ne 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
Uint8Array et Buffer
- J’ai créé le package
uint8array-extras pour faciliter la migration
- Si votre code reçoit un
Buffer sans utiliser de méthodes spécifiques à Buffer, il suffit de mettre à jour la documentation et les types vers Uint8Array
- Changer le type d’entrée de
Buffer à Uint8Array est une modification non breaking, car un buffer est une instance de Uint8Array
- En revanche, changer le type de retour de buffer à
Uint8Array est une modification breaking, car les consommateurs peuvent utiliser des méthodes propres à buffer
- Si vous devez absolument convertir un
Uint8Array en Buffer, vous pouvez utiliser Buffer.from(uint8Array) (copie des données) ou Buffer.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
Questions
- Pourquoi
Buffer existait-il au départ ? : Buffer a été créé bien avant Uint8Array
- Comment convertir depuis/vers Base64 avec
Uint8Array ? : Pour l’instant, utilisez uint8array-extras. À terme, cela sera probablement pris en charge nativement par JavaScript
1 commentaires
Oh, cette bibliothèque au milieu est vraiment très bien.