Сервер тараптагы 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 readline модулунун жардамы менен маалыматтарды сап боюнча окуу үчүн Readline Promise API киргизет. import * катары 'node:readline/promises'; import { stdin киргизүү катары, stdout чыгаруу катары } "процесстен"; const rl = readline.createInterface({киргизүү, чыгаруу}); const answer = await rl.question('Node.js жөнүндө кандай ойдосуз?'); console.log('Баалуу пикириңиз үчүн рахмат: ${answer}'); rl.close();
  • Берилген OpenSSL китепканасы 3.0 версиясына жаңыртылган (QUIC протоколу колдоого алынган quictls/openssl айры колдонулат).
  • Node.js версиясын тиркеменин токтотулушуна алып келе турган каталар болгон учурда чыгарыла турган стек издеринде көрсөтүү иштетилди.

Кошумчалай кетсек, биз Node.js (CVE-2021-22959, CVE-2021-22960) учурдагы филиалдарындагы эки алсыздыктын жоюлушун белгилей кетсек болот, алар “HTTP Request Smuggling” (HRS) чабуулдарын ишке ашырууга мүмкүндүк берет. бизге башка колдонуучулардын суроо-талаптарынын frontend жана backend ортосунда бир жипте иштетилген мазмунуна кирүү мүмкүнчүлүгүн берет (мисалы, зыяндуу 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 жана тандоону камтыйт. Туташуу мультиплекси үчүн 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

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