Server-side JavaScript Node.js 17.0 නිකුතුව

Node.js 17.0, JavaScript හි ජාල යෙදුම් ධාවනය සඳහා වේදිකාවක් නිකුත් කරන ලදී. Node.js 17.0 යනු 2022 ජූනි දක්වා යාවත්කාලීන ලබනු ඇති නිත්‍ය ආධාරක ශාඛාවකි. ඉදිරි දිනවලදී, Node.js 16 ශාඛාවේ ස්ථායීකරණය අවසන් වනු ඇත, එය LTS තත්ත්වය ලබා ගන්නා අතර 2024 අප්‍රේල් දක්වා සහය දක්වයි. Node.js 14.0 හි පෙර LTS ශාඛාවේ නඩත්තුව 2023 අප්‍රේල් දක්වාත්, අවසාන LTS ශාඛාව 12.0ට පෙර වසර 2022 අප්‍රේල් දක්වාත් පවතිනු ඇත.

ප්රධාන වැඩිදියුණු කිරීම්:

  • V8 එන්ජිම 9.5 අනුවාදයට යාවත්කාලීන කර ඇත.
  • Promise අසමමුහුර්ත පරිගණක අතුරුමුහුණත භාවිතය මත පදනම් වූ මූලික API හි ප්‍රභේද ක්‍රියාත්මක කිරීම අඛණ්ඩව සිදු කර ඇත. කලින් ලබා දුන් Timers Promises සහ Streams Promises API වලට අමතරව, Node.js 17.0 විසින් රීඩ්ලයින් ප්‍රොමිස් ඒපීඅයි, රීඩ්ලයින් මොඩියුලය භාවිතයෙන් පේළියෙන් දත්ත කියවීම සඳහා හඳුන්වා දෙයි. 'node:readline/promises' වෙතින් කියවීම් රේඛාව ලෙස * ආනයනය කරන්න; 'ක්‍රියාවලිය' වෙතින් {stdin ආදානය ලෙස, stdout ප්‍රතිදානය ලෙස } ආයාත කරන්න; const rl = readline.createInterface({input, output }); const answer = rl.question බලාපොරොත්තු වන්න('Node.js ගැන ඔබ සිතන්නේ කුමක්ද?'); console.log('ඔබේ වටිනා ප්‍රතිපෝෂණයට ස්තූතියි: ${පිළිතුර}'); rl.close();
  • සපයන ලද OpenSSL පුස්තකාලය 3.0 අනුවාදයට යාවත්කාලීන කර ඇත (QUIC ප්‍රොටෝකෝල සහය සක්‍රීය කර ඇති quictls/openssl දෙබලක භාවිතා වේ).
  • යෙදුම අවසන් වීමට හේතු වන මාරාන්තික දෝෂ වලදී ප්‍රතිදානය වන අට්ටි හෝඩුවාවන් තුළ සංදර්ශන කිරීමට Node.js අනුවාදය සබල කර ඇත.

මීට අමතරව, Node.js හි වත්මන් ශාඛා (CVE-2021-22959, CVE-2021-22960) හි ඇති දුර්වලතා දෙකක් ඉවත් කිරීම ගැන අපට සඳහන් කළ හැකිය, එමඟින් “HTTP ඉල්ලීම් ජාවාරම්” (HRS) ප්‍රහාර සිදු කිරීමට හැකි වේ. ඉදිරිපස සහ පසුපෙළ අතර එකම නූලෙහි සැකසූ අනෙකුත් පරිශීලකයන්ගේ ඉල්ලීම්වල අන්තර්ගතය වෙත සම්බන්ධ වීමට අපට ඉඩ දෙන්න (උදාහරණයක් ලෙස, අනිෂ්ට JavaScript කේතය වෙනත් පරිශීලකයෙකුගේ සැසියකට ඇතුළු කළ හැක). විස්තර පසුව හෙළිදරව් වනු ඇත, නමුත් දැනට අපි දන්නේ HTTP ශීර්ෂ නාමය සහ මහා බඩවැල අතර හිස් අවකාශයන් වැරදි ලෙස හැසිරවීම මෙන්ම සම්ප්‍රේෂණය කිරීමේදී භාවිතා කරන පරාමිති බ්ලොක් එකේ carriage return සහ line feed අක්ෂර වෙනස් ලෙස හැසිරවීම නිසා ගැටලු ඇති වන බවයි. ඉල්ලීම් ශරීරය කොටස් වශයෙන් "කුට්ටි" ආකාරයෙන් "

Node.js වේදිකාව වෙබ් යෙදුම්වල සේවාදායක නඩත්තුව සඳහා සහ සාමාන්‍ය සේවාදායක සහ සේවාදායක ජාල වැඩසටහන් නිර්මාණය කිරීම සඳහා භාවිතා කළ හැකි බව මතක තබා ගන්න. Node.js සඳහා වන යෙදුම්වල ක්‍රියාකාරිත්වය පුළුල් කිරීම සඳහා, විශාල මොඩියුල එකතුවක් සකස් කර ඇති අතර, ඔබට HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 සේවාදායකයන් සහ සේවාදායකයින්, ඒකාබද්ධ කිරීම සඳහා මොඩියුල ක්‍රියාත්මක කිරීම සමඟ මොඩියුල සොයාගත හැකිය. විවිධ වෙබ් රාමු, WebSocket සහ Ajax හසුරුවන්නන්, DBMS සම්බන්ධක (MySQL, PostgreSQL, SQLite, MongoDB), සැකිලි එන්ජින්, CSS එන්ජින්, ක්‍රිප්ටෝ ඇල්ගොරිතම සහ අවසර පද්ධති ක්‍රියාත්මක කිරීම (OAuth), XML විග්‍රහ කරන්නන් සමඟ.

සමාන්තර ඉල්ලීම් විශාල සංඛ්‍යාවක් සැකසීම සහතික කිරීම සඳහා, Node.js අවහිර නොවන සිදුවීම් හැසිරවීම සහ ආපසු ඇමතුම් හසුරුවන්නන්ගේ නිර්වචනය මත පදනම් වූ අසමමුහුර්ත කේත ක්‍රියාත්මක කිරීමේ ආකෘතියක් භාවිතා කරයි. බහුවිධ සම්බන්ධතා සඳහා සහය දක්වන ක්‍රම වන්නේ epoll, kqueue, /dev/poll, සහ තේරීමයි. සම්බන්ධතා මල්ටිප්ලෙක්සින් සඳහා, Libuv පුස්තකාලය භාවිතා කරනු ලැබේ, එය Unix පද්ධති මත libev සහ Windows මත IOCP සඳහා ඇඩෝනයක් වේ. නූල් සංචිතයක් සෑදීමට libeio පුස්තකාලය භාවිතා කරන අතර, අවහිර නොවන ආකාරයෙන් DNS විමසුම් සිදු කිරීමට c-ares ඒකාබද්ධ වේ. අවහිර වීමට හේතු වන සියලුම පද්ධති ඇමතුම් නූල් තටාකය තුළ ක්‍රියාත්මක වන අතර පසුව, සංඥා හසුරුවන්නා මෙන්, ඔවුන්ගේ කාර්යයේ ප්‍රති result ලය නම් නොකළ පයිප්පයක් (නල) හරහා ආපසු මාරු කරනු ලැබේ. ජාවාස්ක්‍රිප්ට් කේතය ක්‍රියාත්මක කිරීම ගූගල් විසින් සංවර්ධනය කරන ලද V8 එන්ජිම භාවිතයෙන් සපයනු ලැබේ (මීට අමතරව, Microsoft විසින් Chakra-Core එන්ජිම සමඟ Node.js අනුවාදයක් සංවර්ධනය කරයි).

එහි හරය තුළ, Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks සහ Tcl සිදුවීම් ක්‍රියාවට නැංවීමට සමාන වේ, නමුත් Node.js හි සිදුවීම් ලූපය සංවර්ධකයාගෙන් සඟවා ඇති අතර ක්‍රියාත්මක වන වෙබ් යෙදුමක සිදුවීම් හැසිරවීමට සමාන වේ. බ්රවුසරයේ. node.js සඳහා යෙදුම් ලිවීමේදී, ඔබ "var result = db.query("select..");" කිරීම වෙනුවට, සිදුවීම් මත පදනම් වූ වැඩසටහන්කරණයේ විශේෂතා සලකා බැලිය යුතුය. වැඩ නිම කිරීම සහ පසුව ප්රතිඵල සැකසීම සඳහා බලා සිටීමත් සමග, Node.js අසමමුහුර්ත ක්රියාත්මක කිරීමේ මූලධර්මය භාවිතා කරයි, i.e. කේතය "db.query("තෝරන්න..", ශ්‍රිතය (ප්‍රතිඵලය) {ප්‍රතිඵල සැකසීම});" බවට පරිවර්තනය කර ඇත, එහිදී පාලනය ක්‍ෂණිකව වැඩිදුර කේතය වෙත ගමන් කරනු ඇති අතර, දත්ත ලැබෙන විට විමසුම් ප්‍රතිඵලය සැකසෙනු ඇත.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න