- Tipe Buffer telah menjadi fondasi pemrosesan data biner sejak awal Node.js
- Namun kini Uint8Array adalah tipe JavaScript bawaan dan juga bekerja lintas platform
- Buffer adalah instance dari Uint8Array, tetapi memperkenalkan berbagai metode yang tidak bisa digunakan di lingkungan JavaScript lain
- Karena itu, kode yang memanfaatkan metode Buffer memerlukan polyfill, sehingga banyak paket penting menjadi tidak kompatibel dengan browser
- Selain itu, Buffer#slice() dan Uint8Array#slice() berperilaku berbeda sehingga dapat menimbulkan hasil yang tidak terduga
Rencana
- Memutuskan untuk memindahkan semua paket dari Buffer ke Uint8Array
- Buffer kemungkinan tidak akan pernah dihapus dan juga tidak akan benar-benar usang, tetapi setidaknya komunitas bisa perlahan menjauh dari buffer
- Harapannya adalah tim Node.js setidaknya mulai tidak lagi merekomendasikan penggunaan Buffer
Cara
- Pertama, pahami ketidakcocokan halus antara Uint8Array dan Buffer
- Untuk mempermudah migrasi, dibuat paket
uint8array-extras
- Jika kode Anda menerima Buffer dan tidak menggunakan metode khusus Buffer, cukup perbarui dokumentasi dan tipe menjadi Uint8Array
- Mengubah tipe input dari Buffer ke Uint8Array adalah perubahan non-breaking karena buffer adalah instance dari Uint8Array
- Jika mengubah tipe nilai balik dari buffer ke Uint8Array, itu adalah perubahan breaking karena konsumen mungkin menggunakan metode khusus buffer
- Jika Anda benar-benar harus mengonversi Uint8Array ke Buffer, Anda dapat menggunakan Buffer.from(uint8Array) (menyalin data) atau Buffer.from(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength) (tanpa menyalin). Namun, biasanya ada cara yang lebih baik
- Langkah-langkah untuk beralih adalah
- Hapus semua
import {Buffer} dari import 'node:buffer'
- Hapus semua penggunaan Buffer secara global
- Berhenti menggunakan metode khusus Buffer
Pertanyaan
- Mengapa sejak awal ada Buffer? : Buffer dibuat jauh sebelum Uint8Array diciptakan
- Bagaimana melakukan konversi from/to Base64 dengan Uint8Array? : Untuk saat ini, gunakan
uint8array-extras. Pada akhirnya, kemungkinan besar JavaScript akan mendukungnya secara bawaan
1 komentar
Oh, pustaka di bagian tengah itu sangat bagus.