Node.js 26.5.0 இப்போது கிடைக்கிறது. இது ஒரு Current release, LTS branch அல்ல, எனவே இது இந்தத் தளத்தின் அதிநவீனத் திறன்களைக் கொண்டுள்ளது. அந்த வேறுபாடு முக்கியமானது. பதினெட்டு மாத கால நிலைத்தன்மையை எதிர்பார்க்கும் ஒரு production fleet-இல் இதை நீங்கள் கண்மூடித்தனமாக மாற்றக்கூடாது. ஆனால் இந்தச் சிறிய, வேகமான releases தான் எதிர்காலம் உருவாவதை நீங்கள் காணும் இடமாகும். பராமரிப்பாளர்கள் (maintainers) எந்த API-களைத் தீட்டுகிறார்கள் மற்றும் runtime அடுத்து எங்குに向ிகிறது என்பதை இவை காட்டுகின்றன. 26.5.0-இல், முக்கியப் பணி Web Streams API-இல் மேற்கொள்ளப்பட்டுள்ளது, மேலும் சில குறிப்பிட்ட திருத்தங்கள் Node-ஐ browser parity-க்கு நெருக்கமாகக் கொண்டு செல்கின்றன. இந்த release, file system மற்றும் URL handling அடுக்குகளில் உள்ள இரண்டு சிக்கல்களையும் சரிசெய்கிறது.
Node.js-இல் Web Streams என்ன செய்கின்றன?
நீங்கள் நீண்ட காலமாக Node-இல் streaming code எழுதியிருந்தால், built-in stream module தனக்கென ஒரு தனித்துவத்தைக் கொண்டுள்ளது என்பதை நீங்கள் அறிவீர்கள். Readable, Writable, Transform, மற்றும் Duplex ஆகியவை பல ஆண்டுகளாக இந்த ecosystem-இன் முக்கியத் தூண்களாக உள்ளன. அவை சக்திவாய்ந்தவை, ஆனால் browser-இல் நீங்கள் சந்திக்கும் streams போன்றே அவை இருக்காது. ஒரு front-end service worker மற்றும் back-end route handler ஆகியவற்றிற்கு இடையே logic-ஐப் பகிர முயற்சிக்கும்போது, அந்த இடைவெளி ஒரு தடையை (friction) உருவாக்குகிறது. இதனால் நீங்கள் adapters-களை மீண்டும் எழுத வேண்டியிருக்கும், தரவுகளைப் புதிய வடிவங்களுக்கு மாற்ற வேண்டியிருக்கும் அல்லது shared code-ஐத் தவிர்க்க வேண்டியிருக்கும்.
அந்த இடைவெளியைக் குறைக்கவே Web Streams API உருவாக்கப்பட்டுள்ளது. இது browser-இல் fetch body handling-ஐ இயக்கும் அதே தரநிலையாகும் (standard). இதை Node-க்குள் கொண்டு வருவதன் மூலம், நீங்கள் ஒருமுறை streaming logic-ஐ எழுதி அதை எந்தச் சூழலிலும் (environment) இயக்க முடியும். இந்த API, ஒரு சீரான interface மூலம் chunks-களைப் Pass செய்யும் ReadableStream, WritableStream, மற்றும் TransformStream objects-களைக் கையாள்கிறது. Version 26.5.0 அந்த interface-ஐ மீண்டும் எழுதவில்லை, ஆனால் இரண்டு முக்கியமான விஷயங்களைச் சீரமைக்கிறது.
releaseLock-ஐச் சரிசெய்தல் மற்றும் BYOB Readers-ஐச் சீரமைத்தல்
இந்த release-இல் உள்ள ஒரு முக்கியமான மாற்றம், WritableStreamDefaultWriter-இல் உள்ள releaseLock method-க்கான திருத்தம் ஆகும். Web Streams மாதிரியில், ஒரு writer lock ஒரே நேரத்தில் பல consumers ஒரே stream-ஐப் பயன்படுத்துவதைத் தடுக்கிறது. நீங்கள் releaseLock()-ஐ அழைக்கும்போது, உங்கள் writer வேலையை முடித்துவிட்டதாகவும், அடுத்த செயல்பாட்டிற்காக அந்த stream தயாராக உள்ளது என்றும் சமிக்ஞை செய்கிறீர்கள். இங்கு தவறான செயல்படுத்தல் (implementation) இருந்தால், writer மறைந்த பின்னரும் stream இன்னும் பிடித்துள்ளதாகவே கருதி ஒரு குழப்பமான நிலையில் (limbo) இருக்கலாம். uploads-களை parse செய்யும் அல்லது storage-க்கு தரவுகளைப் பாய்ச்சும் (piping) ஒரு பிஸியான server-இல், இத்தகைய stale lock ஒரு pipeline-ஐத் தடுத்து நிறுத்தலாம் அல்லது கண்டறிய கடினமான பிழைகளை (errors) உருவாக்கலாம். 26.5.0-இல் உள்ள திருத்தம் இந்த handoff செயல்முறையை மீண்டும் கணிக்கக்கூடியதாக (predictable) மாற்றுகிறது.
இரண்டாவது Web Streams மாற்றம், ReadableStream மற்றும் TransformStream ஆகியவை BYOB readers-உடன் எவ்வாறு செயல்படுகின்றன என்பதை மேம்படுத்துகிறது. BYOB என்பது Bring Your Own Buffer என்பதைக் குறிக்கிறது. Stream ஒவ்வொரு முறையும் தரவை வழங்கும் போது புதிய memory chunk-ஐ ஒதுக்குவதற்குப் பதிலாக, நீங்கள் ஏற்கனவே ஒதுக்கி வைத்திருக்கும் ஒரு buffer-ஐ அதற்கு வழங்கலாம். Stream அந்த buffer-ஐ நிரப்பும், நீங்கள் bytes-களைச் செயலாக்கிவிட்டு, மீண்டும் பயன்படுத்த அதே buffer-ஐத் திருப்பித் தரலாம். நீங்கள் அதிக அளவிலான தரவுகளைக் கையாளும் போது, இந்தச் சிறிய இயந்திரவியல் மாற்றம் மிகப்பெரிய பலனைத் தரும்.
Node-இல் BYOB ஆதரவு சில காலமாக இருந்தாலும், ReadableStream மற்றும் TransformStream-இல் BYOB reader இணைக்கப்படும்போது சில விளிம்புநிலைச் சூழல்களில் (edge cases) பிழைகள் ஏற்படக்கூடும். திருத்தத்தின் நுணுக்கங்களை விட அதன் நடைமுறைப் பயன் முக்கியமானது: explicit buffers-களைப் பயன்படுத்தும் streams இப்போது reading மற்றும் transformation ஆகிய இரண்டு நிலைகளிலும் அதிக நம்பகத்தன்மை கொண்டவை. backpressure நிகழ்வுகளின் போது ஏற்படும் விசித்திரமான பிழைகளால் நீங்கள் BYOB readers-ஐத் தவிர்த்திருந்தால், இந்த release அதிலிருந்து விலகி இருக்க வேண்டிய ஒரு காரணத்தைக் குறைக்கிறது.
BYOB உண்மையில் எங்கு பயன்படுகிறது?
buffer reuse பற்றித் தத்துவார்த்தமாகப் பேசுவது எளிது. ஆனால் அது எங்கு முக்கியத்துவம் பெறுகிறது என்று சிந்திப்பதே பயனுள்ளது.
telemetry uploads-களைப் பெறும் ஒரு service-ஐ நீங்கள் எழுதுகிறீர்கள் என்று கற்பனை செய்து கொள்ளுங்கள். அந்த uploads அழுத்தப்பட்ட logs அல்லது raw sensor dumps ஆக இருக்கலாம், ஒவ்வொன்றும் பல நூறு megabytes இருக்கலாம். Stream ஒவ்வொரு தரவுத் துண்டிற்கும் (slice) ஒரு புதிய Node Buffer-ஐ ஒதுக்கினால், garbage collector அதிக வேலை செய்ய வேண்டியிருக்கும் மற்றும் memory spikes வேகமாக உயரும். BYOB reader மூலம், நீங்கள் தொடக்கத்திலேயே ஒரு சிறிய அளவிலான buffers-களை ஒதுக்கிவிடலாம். Stream அவற்றை நிரப்பும், உங்கள் parser அவற்றைச் செயலாக்கும், பின்னர் அவை மீண்டும் பயன்படுத்தப்படும். இதனால் memory நிலையாக இருக்கும். இரண்டு sockets-களுக்கு இடையே network traffic-ஐ proxy செய்யும் போதோ அல்லது முழு CSV கோப்பையும் RAM-இல் ஏற்றாமல் வரி வரியாகப் parsing செய்யும் போதோ இதே முறை பொருந்தும்.
இங்கு Transform streams சமமான முக்கியத்துவம் வாய்ந்தவை. ஒரு TransformStream என்பது ஒரு pipeline-இன் நடுவில் அமர்ந்து, ஒரு gzip stream-ஐ decompression செய்யவோ அல்லது தரவுத் துண்டுகளை (chunks) உடனுக்குடன் encrypt செய்யவோ பயன்படும். ஒருவேளை transform நிலையில் BYOB buffers தவறாகக் கையாளப்பட்டால், சிதைந்த வெளியீடு (corrupted output), விடுபட்ட துண்டுகள் (dropped chunks) அல்லது அதிகப்படியான சுமையின் போது செயல்பாடு முடங்குதல் (stalls) போன்றவற்றை நீங்கள் காணலாம். 26.5.0 பதிப்பானது சரியாக இத்தகைய pipeline சிக்கல்களைத் தீர்க்கிறது, எனவே அதிகப்படியான I/O (high-throughput I/O) கையாளும் எவரும் இதைக் கவனிக்க வேண்டும்.
அமைதியான வெற்றிகள்: File System மற்றும் பிழைத் தெளிவு
26.5.0-இல் அனைத்தும் streaming பற்றியது மட்டுமல்ல. recursive விருப்பம் (option) false என அமைக்கப்பட்டிருக்கும் போது, fs.rm மற்றும் fs.rmSync-இன் செயல்பாட்டில் உள்ள பிழைகளையும் இந்த வெளியீடு சரிசெய்கிறது. இதற்கு முன்பு, ஒரு directory path-உடன் recursive: false என்று குறிப்பிடுவது, cleanup செய்யும் போது எதிர்பாராத முடிவுகளைத் தரக்கூடும். இந்த முறை (method), அழைப்பவரின் (caller) தெளிவான நோக்கத்திற்குப் பொருந்தாத வகையில் செயல்படலாம்; அதாவது எதிர்பார்த்ததை விட அதிகமாக நீக்கலாம் அல்லது தளத்தைப் (platform) பொறுத்து மாறுபட்ட முறைகளில் தோல்வியடையலாம். கோப்புகளைச் சுத்தம் செய்வது என்பது சலிப்பூட்டும் மற்றும் கணிக்கக்கூடிய (predictable) ஒரு செயல்பாடாக இருக்க வேண்டும். சலிப்பு என்பது நல்லது. இந்தத் திருத்தம் அந்தத் துல்லியத்தன்மையை மீட்டெடுக்கிறது, இதனால் உங்கள் தற்காலிக டைரக்டரி கிளீனப் ஸ்கிரிப்ட்கள் அல்லது deployment teardown logic ஆகியவை குறியீடு (code) குறிப்பிடுவது போலவே சரியாகச் செயல்படும்.
URL.canParse எவ்வாறு தோல்வியைத் தெரிவிக்கிறது என்பதில் ஒரு தரமான முன்னேற்றம் (quality-of-life improvement) செய்யப்பட்டுள்ளது. இந்த முறை, தவறான உள்ளீடுகள் (malformed input) வரும்போது பிழையைத் தூண்டாமல் (throwing), ஒரு string சரியான URL தானா என்பதைச் சரிபார்க்கிறது. 26.5.0-இல், ஏதேனும் தவறு நடக்கும்போது, இது இப்போது சிறந்த Error.cause தகவல்களை வழங்குகிறது. மூலக் காரணத்தை மறைப்பதற்குப் பதிலாக, error object ஒரு காரணச் சங்கிலியை (causal chain) அப்படியே பாதுகாக்கிறது. இதன் பொருள் என்னவென்றால், ஒரு validation helper-இன் ஆழமான பகுதியில் URL parse தோல்வியடையும் போது, நீங்கள் பதிவு செய்யும் stack trace, அந்தப் பிரச்சனை தவறான protocol-ஆ, விடுபட்ட hostname-ஆ அல்லது வேறு ஏதேனும் கட்டமைப்புப் பிரச்சனையா (structural problem) என்பதைத் தெளிவாகக் கூறும். இதனால் ஒவ்வொரு இடத்திலும் மேனுவலாக debug logs-களைச் சேர்க்க வேண்டிய அவசியமின்றி, உங்கள் நேரத்தைச் சேமிக்கலாம்.
நீங்கள் மேம்படுத்த வேண்டுமா (Upgrade)?
இதற்கான பதில் நீங்கள் எதைப் பயன்படுத்துகிறீர்கள் என்பதைப் பொறுத்தது.
உங்கள் production workloads v20.x போன்ற LTS பதிப்பில் இருந்தால், அங்கேயே தொடரவும். இந்தத் திருத்தங்கள் இறுதியில் backport செய்யப்படும் அல்லது அடுத்த active LTS பதிப்பில் வரும். ஏற்கனவே சிறப்பாகச் செயல்படும் ஒரு சர்வரில், சற்று மென்மையான stream lock அல்லது தெளிவான URL error ஆகியவற்றின் பலனை விட, நிலைத்தன்மை (stability) மற்றும் கணிக்கக்கூடிய ஆதரவு காலக்கெடுவே (predictable support timelines) முக்கியமானது.
நீங்கள் ஒரு புதிய சேவையை உருவாக்குகிறீர்கள் என்றால், ஒரு real-time data pipeline-ஐ உருவாக்குகிறீர்கள் என்றால், அல்லது செயல்திறன் சார்ந்த I/O-க்காக Web Streams API-ஐப் பயன்படுத்துகிறீர்கள் என்றால், 26.5.0-க்கு மாறுவது பயனுள்ளதாக இருக்கும். Node streams மற்றும் browser Web Streams ஆகியவற்றிற்கு இடையிலான இந்த படிப்படியான சீரமைப்பு (incremental alignment) வெறும் இணக்கத்தன்மை (compatibility) சார்ந்த வெற்றி மட்டுமல்ல. இது ஒரு ஒருங்கிணைந்த JavaScript runtime-க்கான ஒரு முயற்சி; இதில் ஒரே தரவுத் தள்ளும் தர்க்கம் (data-pushing logic), மொழிபெயர்ப்பு அடுக்குகள் (translation layers) இன்றி சர்வர் மற்றும் கிளையன்ட் இடையே பயணிக்க முடியும். இது உங்கள் குழு இரு சூழல்களுக்கும் (environments) குறியீட்டை அனுப்பும்போது, அறிவுசார் சுமையைக் (cognitive load) குறைப்பதோடு பிழைகள் ஏற்படக்கூடிய வாய்ப்புகளையும் (surface area for bugs) குறைக்கிறது.
இந்த வெளியீடு சிறியதுதான், ஆனால் அதன் திசை தெளிவானது. JavaScript இயங்கும் இடமெல்லாம் வேலை செய்யும் தரநிலை அடிப்படையிலான (standards-based) APIs-இல் Node தொடர்ந்து முதலீடு செய்து வருகிறது. Web Streams முன்னேற்றங்கள் தலைப்புச் செய்திகளில் வரும் அம்சங்கள் அல்ல, ஆனால் அவை பல ஆண்டுகளாகச் சவாலாக இருந்த ஒரு பாதையைச் சீரமைக்கின்றன. நீங்கள் Current line-இல் இருந்தால் 26.5.0-ஐப் பயன்படுத்தவும், மேலும் சரியான நேரம் வரும்போது இந்தத் திருத்தங்கள் உங்கள் LTS உலகிற்கு வரும் என்பதைக் கவனிக்கவும்.
Source: Dev.to – Node.js 26.5.0: What's New for Web Streams and Error Handling
விவாதத்தில் இணையுங்கள் மற்றும் GyaanSetu community on Telegram-உடன் தொடர்ந்து கற்றுக்கொள்ளுங்கள்.
