ืžื”ื“ื•ืจืช JavaScript ื‘ืฆื“ ื”ืฉืจืช Node.js 17.0

Node.js 17.0, ืคืœื˜ืคื•ืจืžื” ืœื”ืคืขืœืช ื™ื™ืฉื•ืžื™ ืจืฉืช ื‘-JavaScript, ืฉื•ื—ืจืจื”. Node.js 17.0 ื”ื•ื ืกื ื™ืฃ ืชืžื™ื›ื” ืจื’ื™ืœ ืฉื™ืžืฉื™ืš ืœืงื‘ืœ ืขื“ื›ื•ื ื™ื ืขื“ ื™ื•ื ื™ 2022. ื‘ื™ืžื™ื ื”ืงืจื•ื‘ื™ื ืชื•ืฉืœื ื”ืชื™ื™ืฆื‘ื•ืช ืกื ื™ืฃ Node.js 16, ืฉื™ืงื‘ืœ ืกื˜ื˜ื•ืก LTS ื•ื™ื™ืชืžืš ืขื“ ืืคืจื™ืœ 2024. ืชื—ื–ื•ืงื” ืฉืœ ืกื ื™ืฃ LTS ื”ืงื•ื“ื ืฉืœ Node.js 14.0 ืชื™ืžืฉืš ืขื“ ืืคืจื™ืœ 2023, ื•ื‘ืฉื ื” ืฉืœืคื ื™ ืกื ื™ืฃ LTS 12.0 ืขื“ ืืคืจื™ืœ 2022.

ืฉื™ืคื•ืจื™ื ืขื™ืงืจื™ื™ื:

  • ืžื ื•ืข ื”-V8 ืขื•ื“ื›ืŸ ืœื’ืจืกื” 9.5.
  • ื”ื™ื™ืฉื•ื ืฉืœ ื’ืจืกืื•ืช ืฉืœ ื”-API ื”ื‘ืกื™ืกื™ ื”ืžื‘ื•ืกืก ืขืœ ืฉื™ืžื•ืฉ ื‘ืžืžืฉืง ื”ืžื—ืฉื•ื‘ ื”ืืกื™ื ื›ืจื•ื ื™ ืฉืœ Promise ื ืžืฉืš. ื‘ื ื•ืกืฃ ืœืžืžืฉืงื™ API ืฉืœ Timers Promises ื•- Streams Promises ืฉื”ื•ืฆืขื• ื‘ืขื‘ืจ, Node.js 17.0 ืžืฆื™ื’ ืืช ื”-Readline Promise API ืœืงืจื™ืืช ื ืชื•ื ื™ื ืฉื•ืจื” ืื—ืจ ืฉื•ืจื” ื‘ืืžืฆืขื•ืช ืžื•ื“ื•ืœ Readline. ื™ื™ื‘ื•ื โ€‹โ€‹* ื‘ืชื•ืจ readline ืžืชื•ืš 'node:readline/promises'; ื™ื™ื‘ื•ื โ€‹โ€‹{ stdin ื›ืงืœื˜, stdout ื›ืคืœื˜ } ืž'process'; const rl = readline.createInterface({ input, output }); 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" (HRS), ืืฉืจ ืœืืคืฉืจ ืœื ื• ืœื”ืฉืชืœื‘ ื‘ืชื•ื›ืŸ ืฉืœ ื‘ืงืฉื•ืช ืฉืœ ืžืฉืชืžืฉื™ื ืื—ืจื™ื ื”ืžืขื•ื‘ื“ื™ื ื‘ืื•ืชื• ืฉืจืฉื•ืจ ื‘ื™ืŸ ื”-frontend ืœ-backend (ืœื“ื•ื’ืžื”, ื ื™ืชืŸ ืœื”ื›ื ื™ืก ืงื•ื“ JavaScript ื–ื“ื•ื ื™ ืœื”ืคืขืœื” ืฉืœ ืžืฉืชืžืฉ ืื—ืจ). ืคืจื˜ื™ื ื™ื™ื—ืฉืคื• ื‘ื”ืžืฉืš, ืืš ืœืขืช ืขืชื” ืื ื• ื™ื•ื“ืขื™ื ืจืง ืฉื”ื‘ืขื™ื•ืช ื ื’ืจืžื•ืช ืžื˜ื™ืคื•ืœ ืฉื’ื•ื™ ื‘ืจื•ื•ื—ื™ื ื‘ื™ืŸ ืฉื ื›ื•ืชืจืช ื”-HTTP ืœื ืงื•ื“ืชื™ื™ื, ื›ืžื• ื’ื ื˜ื™ืคื•ืœ ืฉื•ื ื” ื‘ืชื•ื•ื™ ื”ื—ื–ืจืช ืขื’ืœื” ื•ื”ื–ื ืช ืฉื•ืจื” ื‘ื‘ืœื•ืง ื”ืคืจืžื˜ืจื™ื ื”ืžืฉืžืฉ ื‘ืขืช ืฉื™ื“ื•ืจ. ื’ื•ืฃ ื”ื‘ืงืฉื” ื‘ื—ืœืงื™ื ื‘ืžืฆื‘ "chunked" "

ื ื–ื›ื™ืจ ื›ื™ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืคืœื˜ืคื•ืจืžืช 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 ืžืกื•ืคืง ื‘ืืžืฆืขื•ืช ืžื ื•ืข V8 ืฉืคื•ืชื— ืขืœ ื™ื“ื™ ื’ื•ื’ืœ (ื‘ื ื•ืกืฃ, ืžื™ืงืจื•ืกื•ืคื˜ ืžืคืชื—ืช ื’ืจืกื” ืฉืœ 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("select..", function (result) {result processing});", ืฉื‘ื• ื”ืฉืœื™ื˜ื” ืชืขื‘ื•ืจ ืžื™ื™ื“ื™ืช ืœืงื•ื“ ื ื•ืกืฃ, ื•ืชื•ืฆืืช ื”ืฉืื™ืœืชื” ืชืขื•ื‘ื“ ืขื ื”ื’ืขืช ื”ื ืชื•ื ื™ื.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”