Թողարկվել է Node.js 22.0-ը, որը JavaScript-ով ցանցային հավելվածներ գործարկելու հարթակ է։ Node.js 22.0-ը դասվել է երկարաժամկետ աջակցության ճյուղերի շարքին, սակայն այս կարգավիճակը կտրամադրվի միայն հոկտեմբերին՝ կայունացումից հետո։ Node.js 22.x տարբերակը կաջակցվի մինչև 30 թվականի ապրիլի 2027-ը։ Նախկին LTS ճյուղը՝ Node.js 20.x-ը, կաջակցվի մինչև 2026 թվականի ապրիլը, իսկ նախորդ LTS ճյուղը՝ 18.x-ը, կաջակցվի մինչև 2025 թվականի ապրիլը։ Node.js 21.x միջանկյալ ճյուղի սպասարկումը կդադարեցվի 1 թվականի հունիսի 2024-ին։
Հիմնական բարելավումներ.
- V8 շարժիչը թարմացվել է Chromium 12.4-ում օգտագործվող 124 տարբերակին: Node.js 21 ճյուղի համեմատ փոփոխությունների շարքում, որն օգտագործում էր V8 11.8 շարժիչը, նշվում է.
- Աջակցություն WasmGC ընդլայնմանը, որը պարզեցնում է աղբի հավաքագրման լեզուներով (Kotlin, PHP, Java և այլն) գրված ծրագրերի WebAssembly տեղափոխումը: WasmGC-ն ավելացնում է կառուցվածքների և զանգվածների նոր տեսակներ, որոնք կարող են օգտագործել ոչ գծային հիշողության բաշխում։
- Աջակցություն Array.fromAsync() մեթոդին, որը ասինխրոն կերպով վերադարձնում է զանգվածի նոր օրինակ, որը պատճենվել է զանգվածանման օբյեկտներից, որոնք կարող են կրկնվել կամ ասինխրոն կրկնվել։
- Աջակցություն կրկնող մեթոդներին, ինչպիսիք են .map, .filter, .find, .take, .drop, .forEach և .reduce:
- Աջակցություն Set օբյեկտի համար, որը սահմանում է արժեքների հավաքածու և առաջարկում է մեթոդներ, որոնք իրականացնում են ընդհանուր հավաքածուի գործողություններ, ինչպիսիք են հատումը, միավորումը, տարբերությունը և ավելացումը:
- Maglev օպտիմիզացնող JIT կոմպիլյատորը լռելյայն միացված է, որի նպատակն է արագորեն գեներացնել բարձր արդյունավետության մեքենայական կոդ շատ օգտագործվող JavaScript կոդի համար: Maglev-ի ակտիվացումը կարող է զգալիորեն արագացնել կարճատև CLI հավելվածները, որոնք չեն կատարում երկարաժամկետ գործողություններ, օրինակ՝ Jetstrea թեստն ավարտելու ժամանակը կրճատվում է 7.5%-ով, իսկ արագաչափի թեստը՝ 5%-ով:
- Հոսքերի հետ աշխատանքը արագացվել է՝ highWaterMark տարբերակի արժեքը 16 KB-ից մինչև 65 KB բարձրացնելով (որոշում է մինչև որի սահմանը կատարվում է ձայնագրման բուֆերացումը): Փոփոխությունը հանգեցնում է հիշողության սպառման աճի, ուստի սահմանափակ RAM-ով աշխատելու համար նախատեսված հավելվածները կարող են ստիպված լինել վերադառնալ հին արժեքին՝ կանչելով setDefaultHighWaterMark() ֆունկցիան։
- Բարելավել է fetch()-ի և թեստային վազող API-ների աշխատանքը՝ ավելի արդյունավետ դարձնելով AortSignal ինստանցիաները: Բարելավվել է ֆայլային համակարգերի հետ համաժամանակյա աշխատանքի հետ կապված API-ների կատարումը:
- Ներդրվել է փորձարարական գործառույթ, որը թույլ է տալիս օգտագործել "require()" կանչը՝ ECMAScript մոդուլների (ESM) JavaScript մոդուլները համաժամանակյա ռեժիմով բեռնելու համար։ ESM մոդուլները օգտագործվում են զննարկիչներում և փոխարինում են Node.js-ի համար նախատեսված CommonJS մոդուլներին։ «require()»-ի միջոցով բեռնվելու համար ESM մոդուլը պետք է գործարկվի սինխրոն ռեժիմով (առանց վերին մակարդակում սպասման): Աջակցությունը միացված է «--experimental-require-module» դրոշի միջոցով։
- Ավելացվել է package.json ֆայլում սահմանված սկրիպտները «--run» հրամանի միջոցով գործարկելու փորձարարական հնարավորություն։ «.
- «Node –watch» հրամանը տեղափոխվել է կայուն կատեգորիա՝ ժամացույցի ռեժիմի ներդրմամբ, որն ապահովում է գործընթացի վերագործարկումը, երբ ներմուծված ֆայլը փոխվում է (օրինակ, եթե «node –watch index.js» գործարկվում է, գործընթացը ինքնաբերաբար կվերսկսվի, երբ index.js-ը փոխվի):
- WebSocket API-ի ներկառուցված իրականացումը կայունացվել է, ինչը թույլ է տալիս WebSocket-ը օգտագործել հաճախորդի ռեժիմում՝ առանց լրացուցիչ կախվածություններ տեղադրելու։
- Ավելացվեց մասնակի աջակցություն Navigator API-ի համար:
- Webstreams API-ն ավելացրել է աջակցություն deflate-raw սեղմման ձևաչափին:
- Node:fsmodule մոդուլը թարմացվել է glob և globSync ֆունկցիաներով՝ նախշերի համապատասխանեցման ֆայլերի ուղիների համար։
- Սխալ կազմաձևված IPv6 կույտերի բարելավված կառավարում: Իրականացված Happy Eyeballs ալգորիթմը՝ IPv6-ի շահագործման հետ կապված խնդիրների դեպքում արագ վերադարձի համար:
- Util API-ն հնացել է:
- Թարմացված կախվածության տարբերակներ՝ npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson to 3.8.0, ada 2.7.7 և undici 6.6.0։
Node.js հարթակը կարող է օգտագործվել ինչպես վեբ հավելվածների սերվերային աջակցության, այնպես էլ ստանդարտ հաճախորդային և սերվերային ցանցային ծրագրեր ստեղծելու համար: Node.js հավելվածների ֆունկցիոնալությունը ընդլայնելու համար պատրաստվել է մոդուլների մեծ հավաքածու, այդ թվում՝ մոդուլներ իրականացնողները: սերվերներ և HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 հաճախորդների համար, տարբեր վեբ շրջանակների հետ ինտեգրման մոդուլներ, WebSocket և Ajax մշակիչներ, տվյալների բազայի կառավարման համակարգերի (MySQL, PostgreSQL, SQLite, MongoDB) միակցիչներ, ձևանմուշային շարժիչներ, CSS շարժիչներ, կրիպտոգրաֆիկ ալգորիթմների և լիազորման համակարգերի (OAuth) իրականացումներ, XML վերլուծիչներ։
Զուգահեռաբար մեծ թվով հարցումներ կարգավորելու համար Node.js-ն օգտագործում է կոդի կատարման ասինխրոն մոդել, որը հիմնված է իրադարձությունների չարգելափակման մշակման և հետադարձ զանգի մշակիչների սահմանման վրա: Միացումների մուլտիպլեքսավորման աջակցվող մեթոդները ներառում են epoll, kqueue, /dev/poll և select: Կապի մուլտիպլեքսավորման համար օգտագործվում է libuv գրադարանը, որը հավելում է libev-ին Unix համակարգերում և IOCP-ին Windows-ում: Libeio գրադարանն օգտագործվում է թելերի լողավազան ստեղծելու համար, իսկ c-ares-ը ինտեգրված է DNS հարցումները ոչ արգելափակող ռեժիմում կատարելու համար: Բոլոր համակարգային զանգերը, որոնք առաջացնում են արգելափակում, կատարվում են թելերի լողավազանի ներսում, այնուհետև, ազդանշանի մշակողների նման, իրենց աշխատանքի արդյունքը հետ են փոխանցում անանուն խողովակի միջով:
JavaScript կոդի կատարումն ապահովվում է Google-ի կողմից մշակված V8 շարժիչի օգտագործման միջոցով (ի լրումն, Microsoft-ը մշակում է Node.js-ի տարբերակը Chakra-Core շարժիչով): Node.js-ն իր հիմքում նման է Perl AnyEvent, Ruby Event Machine, Python Twisted շրջանակներին և իրադարձությունների իրականացմանը Tcl-ում, սակայն Node.js-ում իրադարձությունների հանգույցը թաքնված է մշակողից և հիշեցնում է իրադարձությունների մշակումը վեբ հավելվածում: աշխատում է բրաուզերում:
Source: opennet.ru
