11 पॉइंट द्वारा xguru 2023-10-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Buffer टाइप Node.js के शुरुआती दौर से binary data handling की आधारशिला रहा है
  • लेकिन आजकल Uint8Array बेसिक JavaScript टाइप है, और cross-platform वातावरण में भी काम करता है
  • Buffer, Uint8Array का एक instance है, लेकिन इसने ऐसे कई methods जोड़े हैं जिन्हें दूसरे JavaScript environments में इस्तेमाल नहीं किया जा सकता
    • इसलिए Buffer methods का उपयोग करने वाले code को polyfilling की ज़रूरत पड़ती है, जिससे कई महत्वपूर्ण packages browser-compatible नहीं रह जाते
    • साथ ही Buffer#slice() और Uint8Array#slice() अलग तरह से काम करते हैं, इसलिए अप्रत्याशित परिणाम आ सकते हैं

योजना

  • सभी packages को Buffer से Uint8Array पर ले जाने का फैसला किया गया है
  • संभव है कि Buffer कभी हटाया न जाए, और न ही पूरी तरह deprecated हो, लेकिन कम से कम community धीरे-धीरे buffer से दूर जा सकती है
  • मेरी उम्मीद है कि Node.js टीम कम से कम Buffer के उपयोग की सिफारिश न करना शुरू करे

How

  • पहले Uint8Array और Buffer के बीच सूक्ष्म incompatibilities को समझें
  • migration को आसान बनाने के लिए uint8array-extras package बनाया गया है
  • अगर आपका code Buffer लेता है और Buffer-specific methods का उपयोग नहीं करता, तो सिर्फ documentation और types को Uint8Array में update करना काफी है
    • input type को Buffer से Uint8Array में बदलना non-breaking change है, क्योंकि Buffer, Uint8Array का instance है
  • return type को Buffer से Uint8Array में बदलना breaking change है, क्योंकि consumer Buffer-only methods का उपयोग कर सकता है
  • अगर Uint8Array को ज़रूर Buffer में बदलना हो, तो Buffer.from(uint8Array)(data copy करता है) या Buffer.from(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength)(copy नहीं करता) इस्तेमाल कर सकते हैं. लेकिन आम तौर पर इससे बेहतर तरीका होता है
  • migration के steps हैं
    • 'node:buffer' import से import {Buffer} को पूरी तरह हटाएँ
    • global रूप से Buffer के सभी उपयोग हटाएँ
    • Buffer-specific methods का उपयोग बंद करें

सवाल

  • शुरू में Buffer था ही क्यों? : Buffer, Uint8Array बनने से बहुत पहले बनाया गया था
  • Uint8Array का उपयोग करके Base64 में from/to conversion कैसे करें? : अभी के लिए uint8array-extras का उपयोग करें. आगे चलकर संभव है कि JavaScript में यह native रूप से supported हो जाए

1 टिप्पणियां

 
dodok8 2023-10-27

ओह, बीच में वाला लाइब्रेरी वाकई बहुत अच्छा है