Հասանելի է սերվերի կողմից JavaScript հարթակ Node.js 20.0

Տեղի է ունեցել Node.js 20.0-ի՝ JavaScript-ով ցանցային հավելվածների կատարման հարթակի թողարկումը։ Node.js 20.0-ը նշանակվել է երկար սպասարկման մասնաճյուղին, սակայն այս կարգավիճակը չի նշանակվի մինչև հոկտեմբեր՝ կայունացումից հետո: Node.js 20.x-ը կաջակցվի մինչև 30 թվականի ապրիլի 2026-ը: Նախորդ Node.js 18.x LTS մասնաճյուղի սպասարկումը կտևի մինչև 2025 թվականի ապրիլ, իսկ նախկին 16.x LTS մասնաճյուղը մինչև 2023 թվականի սեպտեմբեր: 14.x LTS մասնաճյուղը կկանգնեցվի ապրիլի 30-ին, իսկ Node.js 19.x միջանկյալ մասնաճյուղը՝ հունիսի 1-ին:

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

  • V8 շարժիչը թարմացվել է 11.3 տարբերակին, որն օգտագործվում է Chromium 113-ում: Փոփոխություններից՝ համեմատած Node.js 19 ճյուղի հետ, որն օգտագործում էր Chromium 107 շարժիչը, String.prototype.isWellFormed և toWellFormed ֆունկցիաները, Array.prototype-ը: և TypedArray.prototype մեթոդներ՝ Array և TypedArray օբյեկտների փոփոխության պատճենի հետ աշխատելու համար, «v» դրոշը RegExp-ում, ArrayBuffer-ի չափափոխման աջակցություն և SharedArrayBuffer-ի չափի մեծացում, tail-call WebAssembly-ում:
  • Առաջարկվում է փորձարարական թույլտվության մոդելի մեխանիզմ, որը թույլ է տալիս սահմանափակել մուտքը որոշակի ռեսուրսների կատարման ընթացքում: Թույլտվության մոդելի աջակցությունը միացված է գործարկման ժամանակ նշելով «--experimental-permission» դրոշը: Նախնական ներդրման ժամանակ առաջարկվել են տարբերակներ՝ սահմանափակելու գրելու (--allow-fs-write) և կարդալու (--allow-fs-read) մուտքը FS-ի որոշ մասերին, երեխայի գործընթացներին (--allow-child-process) , հավելումներ (--no-addons ) և threads (--allow-worker): Օրինակ՝ թույլ տալու համար գրել /tmp գրացուցակում և կարդալ /home/index.js ֆայլը, կարող եք նշել՝ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    Մուտքը ստուգելու համար առաջարկվում է օգտագործել process.permission.has() մեթոդը, օրինակ՝ «process.permission.has('fs.write',"/tmp/test"):

  • «--experimental-loader» տարբերակի միջոցով բեռնված ECMAScript արտաքին մոդուլների (ESM) կարգավորիչները այժմ գործարկվում են առանձին թեմայում, մեկուսացված հիմնական շղթայից, որը վերացնում է հավելվածի կոդի և բեռնված ESM մոդուլների խաչմերուկը: Բրաուզերների նման, import.meta.resolve() մեթոդն այժմ գործում է համաժամանակյա, երբ կանչվում է հավելվածից: Node.js-ի հաջորդ մասնաճյուղերից մեկում ESM բեռնման աջակցությունը նախատեսվում է տեղափոխել կայուն հատկանիշների կատեգորիա։
  • Node:test (test_runner) մոդուլը, որը նախատեսված է JavaScript թեստեր ստեղծելու և գործարկելու համար, որոնք արդյունքներ են տալիս TAP (Test Anything Protocol) ձևաչափով, տեղափոխվել է կայուն:
  • Ձևավորվել է կատարողականի առանձին թիմ, որը, նախապատրաստվելով նոր մասնաճյուղին, աշխատել է արագացնելու գործարկման ժամանակի տարբեր բաղադրիչներ, այդ թվում՝ URL վերլուծություն, fetch() և EventTarget: Օրինակ, EventTarget-ի սկզբնավորման ծախսը կրկնակի կրճատվել է, URL.canParse() մեթոդի կատարումը զգալիորեն բարելավվել է, իսկ ժամանակաչափերի արդյունավետությունը բարելավվել է։ Բացի այդ, կոմպոզիցիայի մեջ ներառված է բարձր արդյունավետությամբ URL վերլուծիչի՝ Ada 2.0-ի թողարկումը, որը գրված է C ++-ով:
  • Շարունակվել է մեկ գործարկվող ֆայլի (SEA, Single Executable Applications) տեսքով հավելվածների առաքման փորձարարական ֆունկցիայի մշակումը։ Այժմ գործարկվող նյութ ստեղծելու համար պահանջվում է փոխարինել JSON կազմաձևման ֆայլից առաջացած բլբը (JavaScript ֆայլը փոխարինելու փոխարեն):
  • Բարելավված Web Crypto API-ի համատեղելիությունը այլ նախագծերի իրականացման հետ:
  • Ավելացվեց Windows-ի պաշտոնական աջակցություն ARM64 համակարգերում:
  • Շարունակական աջակցություն WASI (WebAssembly System Interface) ընդլայնումներին՝ ինքնուրույն WebAssembly հավելվածներ ստեղծելու համար: Հեռացվեց հատուկ հրամանի տողի դրոշակ նշելու անհրաժեշտությունը՝ WASI աջակցությունը միացնելու համար:

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

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