11 poin oleh xguru 2023-10-26 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
dodok8 2023-10-27

Oh, pustaka di bagian tengah itu sangat bagus.