Սերվերի կողմից 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 թվականի ապրիլ, իսկ նախկին 12.0 LTS մասնաճյուղը մինչև 2022 թվականի ապրիլ:

Հիմնական բարելավումներ.

  • V8 շարժիչը թարմացվել է 9.5 տարբերակին:
  • Շարունակվել է Promise ասինխրոն հաշվողական ինտերֆեյսի օգտագործման վրա հիմնված բազային API-ի տարբերակների ներդրումը: Ի լրումն նախկինում առաջարկված Timers Promises և Streams Promises API-ների, Node.js 17.0-ը ներկայացնում է Readline Promise API-ը՝ կարդալու տվյալները տող առ տող՝ օգտագործելով readline մոդուլը: ներմուծել * որպես ընթերցման տող «հանգույց:կարդալու/խոստումներից»; ներմուծում { stdin որպես մուտքագրում, stdout որպես ելք } «գործընթացից»; const rl = readline.createInterface({մուտք, ելք }); const answer = await rl.question('Ինչ եք կարծում Node.js-ի մասին'); console.log('Շնորհակալություն ձեր արժեքավոր արձագանքի համար. ${answer}'); rl.close();
  • Մատակարարված OpenSSL գրադարանը թարմացվել է 3.0 տարբերակի (օգտագործելով quictls/openssl պատառաքաղը՝ QUIC արձանագրության աջակցությամբ միացված):
  • Համոզվեք, որ Node.js-ի տարբերակը ցուցադրվում է կույտի հետքերով ճակատագրական սխալների համար, որոնք հանգեցնում են հավելվածի դադարեցմանը:

Բացի այդ, կարելի է նշել երկու խոցելիության վերացումը Node.js-ի ներկայիս մասնաճյուղերում (CVE-2021-22959, CVE-2021-22960), որոնք հնարավորություն են տալիս իրականացնել HTTP Request Smuggling (HRS) դասի գրոհներ, որոնք թույլ տալ, ուղարկելով հատուկ մշակված հաճախորդների հարցումներ, սեպ ներթափանցել այլ օգտվողների հարցումների բովանդակության մեջ, որոնք մշակվում են նույն շղթայում ճակատի և հետնամասի միջև (օրինակ, դուք կարող եք հասնել վնասաբեր JavaScript կոդի փոխարինմանը մեկ այլ օգտվողի նիստում): Մանրամասները կբացահայտվեն ավելի ուշ, բայց առայժմ հայտնի է միայն, որ խնդիրները պայմանավորված են HTTP վերնագրի անվան և երկու կետի միջև բացատների սխալ մշակմամբ, ինչպես նաև փոխանցման ժամանակ օգտագործվող պարամետրային բլոկում փոխադրման վերադարձի և գծի նիշերի տարբեր մշակմամբ: հարցումի մարմինը կտորներով «հատված» ռեժիմում»:

Հիշեցնենք, որ 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 և 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-ում իրադարձությունների հանգույցը թաքնված է մշակողից և հիշեցնում է իրադարձությունների մշակումը գործող վեբ հավելվածում: բրաուզերում: Node.js-ի համար հավելվածներ գրելիս պետք է հաշվի առնել իրադարձությունների վրա հիմնված ծրագրավորման առանձնահատկությունները, օրինակ՝ «var result = db.query(«select..»);» անելու փոխարեն: աշխատանքի ավարտին սպասելով և արդյունքների հետագա մշակմամբ, Node.js-ն օգտագործում է ասինխրոն կատարման սկզբունքը, այսինքն. կոդը փոխակերպվում է «db.query(«ընտրել..», ֆունկցիա (արդյունք) {արդյունքների մշակում});», որի դեպքում հսկողությունն անմիջապես կանցնի հետագա կոդի, և հարցման արդյունքը կմշակվի տվյալների ժամանումին:

Source: opennet.ru

Добавить комментарий