Node.js 17.0 серверлік JavaScript платформасының шығарылымы

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' ішінен оқу сызығы ретінде; «процесс» ішінен { 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 сұранысының контрабандасы» (HRS) шабуылдарын жүзеге асыруға мүмкіндік береді. бізге фронт пен сервер арасындағы бірдей ағында өңделген басқа пайдаланушылардың сұрауларының мазмұнына кіруге мүмкіндік береді (мысалы, зиянды JavaScript кодын басқа пайдаланушының сеансына енгізуге болады). Мәліметтер кейінірек ашылады, бірақ әзірге біз тек HTTP тақырыбы аты мен қос нүкте арасындағы бос орындарды дұрыс өңдеуден, сондай-ақ тасымалдау кезінде пайдаланылатын параметр блогындағы каретканы қайтару және жолды беру таңбаларын әртүрлі өңдеуден туындағанын білеміз. сұрау мәтінін бөліктерге «бөлінген» режимінде «

Еске салайық, 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 және таңдау болып табылады. Қосылымды мультиплекстеу үшін Unix жүйелерінде libev және Windows жүйесінде IOCP үшін қосымша болып табылатын libuv кітапханасы пайдаланылады. 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("select..", функция (нәтиже) {нәтижені өңдеу}); түрлендіріледі, онда басқару бірден келесі кодқа өтеді, ал сұрау нәтижесі деректер келген сайын өңделеді.

Ақпарат көзі: opennet.ru

пікір қалдыру