Сервер тараптагы 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-жылдын апрелине чейин, ал эми акыркы LTS 16.x бутагына чейин 2023-жылдын сентябрына чейин созулат. 14.x LTS бутагы 30-апрелде токтотулат, ал эми Node.js 19.x сахналаштыруу бутагы 1-июнда токтотулат.

Негизги жакшыртуулар:

  • V8 кыймылдаткычы Chromium 11.3'те колдонулган 113 версиясына жаңыртылган. Chromium 19 кыймылдаткычын колдонгон Node.js 107 бутагына салыштырмалуу өзгөрүүлөргө String.prototype.isWellFormed жана toWellFormed функциялары, Array.prototype жана TypedArray кирет. Array жана TypedArray объекттерин өзгөртүүдө көчүрмө менен иштөөнүн прототиби ыкмалары, RegExpдеги “v” желеги, ArrayBufferдин өлчөмүн өзгөртүүнү жана SharedArrayBufferдин өлчөмүн көбөйтүүнү колдоо, WebAssemblyде куйрук рекурсиясы (куйрукту чакыруу).
  • Уруксат моделинин эксперименталдык механизми сунушталды, ал аткаруу учурунда белгилүү бир ресурстарга жетүүнү чектөөгө мүмкүндүк берет. Уруксат моделин колдоо иштеп жатканда “--эксперименталдык-уруксат” желекчесин көрсөтүү менен иштетилет. Баштапкы ишке ашыруу файл тутумунун айрым бөлүктөрүнө, бала процесстерине (--алlow-child-process) жана кошумчалар (--жок-кошумчалар) ) жана жиптер (--алlow-worker). Мисалы, /tmp каталогуна жазууга жана /home/index.js файлын окууга уруксат берүү үчүн, сиз белгилей аласыз: node —experimental-permission —allow-fs-write=/tmp/ —allow-fs-read=/home /index.js индекс .js

    Мүмкүнчүлүктү текшерүү үчүн process.permission.has() ыкмасын колдонуу сунушталат, мисалы, “process.permission.has('fs.write',"/tmp/test").

  • "--эксперименталдык-жүктөөчү" опциясы аркылуу жүктөлгөн ECMAScript тышкы модулунун (ESM) иштеткичтери эми негизги жиптен обочолонгон өзүнчө жипте иштешет, бул колдонмо кодунун жана жүктөлгөн ESM модулдарынын кесилишин жок кылат. Браузерлерге окшоп, import.meta.resolve() ыкмасы эми тиркемеден чакырылганда синхрондуу түрдө аткарылат. Node.js кийинки бутактарынын биринде ESMди жүктөө үчүн колдоону туруктуу функциялар категориясына өткөрүү пландаштырылууда.
  • TAP (Test Anything Protocol) форматында жыйынтыктарды кайтарган JavaScript'те тесттерди түзүү жана иштетүү үчүн иштелип чыккан модул түйүнү:test (test_runner) туруктуу болуп калды.
  • Ишти оптималдаштыруу үчүн жооптуу өзүнчө иштеп чыгуу тобу түзүлдү, ал жаңы бутакты даярдап жатканда, URL талдоо, fetch() жана EventTarget сыяктуу иштөө убактысынын ар кандай компоненттерин тездетүү үчүн иштеген. Мисалы, EventTarget инициализациясынын кошумча чыгымы эки эсеге кыскарды, URL.canParse() методунун иштеши кыйла жакшырды жана таймерлердин эффективдүүлүгү жакшырды. Ал ошондой эле C++ тилинде жазылган жогорку натыйжалуу URL талдоочу Ada 2.0 чыгарууну камтыйт.
  • Бир аткарылуучу файл (SEA, Single Executable Applications) түрүндө тиркемелерди жеткирүү үчүн эксперименталдык мүмкүнчүлүктү өнүктүрүү улантылды. Аткарылуучу файлды түзүү азыр JSON форматындагы конфигурация файлынан түзүлгөн blobду алмаштырууну талап кылат (JavaScript файлын алмаштыруунун ордуна).
  • Web Crypto API'нин башка долбоорлордун ишке ашыруулары менен жакшыртылган шайкештиги.
  • ARM64 системаларында Windows үчүн расмий колдоо кошулду.
  • Өз алдынча WebAssembly тиркемелерин түзүү үчүн WASI (WebAssembly System Interface) кеңейтүүлөрүн колдоону ишке ашыруу улантылды. 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 жана тандоону камтыйт. Туташуу мультиплекси үчүн libuv китепканасы колдонулат, ал Unix системаларында libev жана Windows IOCP үчүн кошумча болуп саналат. Libeio китепканасы жип бассейнин түзүү үчүн колдонулат, ал эми c-ares бөгөттөлбөгөн режимде DNS сурамдарын аткаруу үчүн интеграцияланган. Бөгөттөөгө алып келген бардык системалык чалуулар жип бассейнинин ичинде аткарылат жана андан кийин сигнал иштеткичтер сыяктуу, өз ишинин натыйжасын аты жок түтүк аркылуу кайра өткөрүп беришет. JavaScript кодунун аткарылышы Google тарабынан иштелип чыккан V8 кыймылдаткычын колдонуу аркылуу камсыздалат (мындан тышкары, Microsoft Chakra-Core кыймылдаткычы менен Node.js версиясын иштеп чыгууда).

Негизинен, 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

Комментарий кошуу