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

ื”ืชืจื—ืฉ ืฉื—ืจื•ืจ Node.js 14.0,ืคืœื˜ืคื•ืจืžื•ืช ืœื”ืคืขืœืช ื™ื™ืฉื•ืžื™ ืจืฉืช ื‘-JavaScript. Node.js 14.0 ื”ื•ื ืขื ืฃ ืชืžื™ื›ื” ืœื˜ื•ื•ื— ืืจื•ืš, ืืš ืžืขืžื“ ื–ื” ื™ื•ืงืฆื” ืจืง ื‘ืื•ืงื˜ื•ื‘ืจ, ืœืื—ืจ ื”ืชื™ื™ืฆื‘ื•ืช. ื™ืชืžืš ื‘-Node.js 14.0 ืœื”ืชื‘ืฆืข ืขื“ ืืคืจื™ืœ 2023. ืชื—ื–ื•ืงื” ืฉืœ ืกื ื™ืฃ ื”-LTS ื”ืงื•ื“ื ืฉืœ Node.js 12.0 ืชื™ืžืฉืš ืขื“ ืืคืจื™ืœ 2022, ื•ื‘ืฉื ื” ืฉืœืคื ื™ ืกื ื™ืฃ LTS 10.0 ืขื“ ืืคืจื™ืœ 2021. ื”ืชืžื™ื›ื” ื‘ืกื ื™ืฃ 13.x ืกื˜aging ืชืกืชื™ื™ื ื‘ื™ื•ื ื™ ื”ืฉื ื”.

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

  • ื”ื™ื›ื•ืœืช ืœื™ืฆื•ืจ ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ืื• ืขื ื”ืชืจื—ืฉื•ืช ืฉืœ ืื™ืจื•ืขื™ื ืžืกื•ื™ืžื™ื ื”ืชื™ื™ืฆื‘ื” ื“ื•ื—ื•ืช ืื‘ื—ื•ืŸ, ื”ืžืฆื™ื’ื™ื ืื™ืจื•ืขื™ื ื”ืžืกื™ื™ืขื™ื ื‘ืื‘ื—ื•ืŸ ื‘ืขื™ื•ืช ื›ื’ื•ืŸ ืงืจื™ืกื•ืช, ื™ืจื™ื“ื” ื‘ื‘ื™ืฆื•ืขื™ื, ื“ืœื™ืคื•ืช ื–ื™ื›ืจื•ืŸ, ืขื•ืžืก ืžืขื‘ื“ ื›ื‘ื“, ืคืœื˜ ืฉื’ื™ืื” ื‘ืœืชื™ ืฆืคื•ื™ ื•ื›ื•'.
  • ื ื•ืกืคื” ืชืžื™ื›ืช API ื ื™ืกื™ื•ื ื™ืช ืื—ืกื•ืŸ ืžืงื•ืžื™ ืืกื™ื ื›ืจื•ื ื™ ืขื ื™ื™ืฉื•ื ื”ืžื—ืœืงื” AsyncLocalStorage, ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ืœื™ืฆื™ืจืช ืžืฆื‘ ืืกื™ื ื›ืจื•ื ื™ ืขื ืžื˜ืคืœื™ื ืขืœ ืกืžืš ืงืจื™ืื•ืช ื•ื”ื‘ื˜ื—ื•ืช ืœื”ืชืงืฉืจื•ืช ื—ื•ื–ืจืช. AsyncLocalStorage ืžืืคืฉืจ ืœืš ืœืื—ืกืŸ ื ืชื•ื ื™ื ื‘ื–ืžืŸ ืฉื‘ืงืฉืช ืื™ื ื˜ืจื ื˜ ืžืขื•ื‘ื“ืช, ื”ืžื–ื›ื™ืจ ืื—ืกื•ืŸ ืžืงื•ืžื™ ื‘ืฉืคื•ืช ืื—ืจื•ืช.
  • ื”ื•ื“ืขืช ืื–ื”ืจื” ืขืœ ืชื›ื•ื ื” ื ื™ืกื™ื•ื ื™ืช ื”ื•ืกืจื” ื‘ืขืช ื”ื˜ืขื™ื ื” ืžื•ื“ื•ืœื™ื ECMAScript 6 ืžื—ื•ื‘ืจ ื•ืžื™ื•ืฆื ื‘ืืžืฆืขื•ืช ื”ืฆื”ืจื•ืช ื™ื‘ื•ื ื•ื™ืฆื•ื. ื™ื—ื“ ืขื ื–ืืช, ื”ื™ื™ืฉื•ื ืฉืœ ืžื•ื“ื•ืœื™ ESM ืขืฆืžื• ื ื•ืชืจ ื ื™ืกื™ื•ื ื™.
  • ืžื ื•ืข V8 ืขื•ื“ื›ืŸ ืœื’ืจืกื” 8.1 (1, 2, 3), ื”ื›ื•ืœืœ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื•ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ืฉืœ ื‘ื™ืฆื•ืขื™ื ื›ื’ื•ืŸ ืื•ืคืจื˜ื•ืจ ื”ืฉืจืฉื•ืจ ื”ืœื•ื’ื™ ื”ื—ื“ืฉ "??" (ืžื—ื–ื™ืจ ืืช ื”ืื•ืคืจื ื“ ื”ื™ืžื ื™ ืื ื”ืื•ืคืจื ื“ ื”ืฉืžืืœื™ ื”ื•ื NULL ืื• ืœื ืžื•ื’ื“ืจ, ื•ืœื”ื™ืคืš), ื”ืื•ืคืจื˜ื•ืจ "?." ืœื‘ื“ื™ืงื” ื—ื“ ืคืขืžื™ืช ืฉืœ ื›ืœ ืฉืจืฉืจืช ื”ื ื›ืกื™ื ืื• ื”ืงืจื™ืื•ืช (ืœื“ื•ื’ืžื” "db?.user?.name?.length" ืœืœื ื‘ื“ื™ืงื•ืช ืžืงื“ื™ืžื•ืช), ืฉื™ื˜ืช Intl.DisplayName ืœืงื‘ืœืช ืฉืžื•ืช ืžืงื•ืžื™ื™ื ื•ื›ื•'.
  • ื‘ื•ืฆืขื” ืขื“ื›ื•ืŸ ืฉืœ ื”-API ืฉืœ Streams, ืฉืžื˜ืจืชื• ืœืฉืคืจ ืืช ื”ืขืงื‘ื™ื•ืช ืฉืœ ืžืžืฉืงื™ ื”-API ืฉืœ Streams ื•ืœื‘ื˜ืœ ื”ื‘ื“ืœื™ื ื‘ื”ืชื ื”ื’ื•ืช ืฉืœ ื”ื—ืœืงื™ื ื”ื‘ืกื™ืกื™ื™ื ืฉืœ Node.js. ืœื“ื•ื’ืžื”, ื”ื”ืชื ื”ื’ื•ืช ืฉืœ http.OutgoingMessage ืงืจื•ื‘ื” ืœ-stream.Writable, ื•-net.Socket ื“ื•ืžื” ืœ-stream.Duplex. ื”ืืคืฉืจื•ืช autoDestroy ืžื•ื’ื“ืจืช ืœ"true" ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื›ืœื•ืžืจ ืงืจื™ืื” ืœ-"_destroy" ื‘ืกื™ื•ื.
  • ื ื•ืกืคื” ืชืžื™ื›ืช API ื ื™ืกื™ื•ื ื™ืช WASI (ืžืžืฉืง ืžืขืจื›ืช WebAssembly), ืžืชืŸ ืžืžืฉืงื™ ืชื•ื›ื ื” ืœืื™ื ื˜ืจืืงืฆื™ื” ื™ืฉื™ืจื” ืขื ืžืขืจื›ืช ื”ื”ืคืขืœื” (POSIX API ืœืขื‘ื•ื“ื” ืขื ืงื‘ืฆื™ื, ืฉืงืขื™ื ื•ื›ื•').
  • ื“ืจื™ืฉื•ืช ืžื•ื’ื‘ืจื•ืช ืขื‘ื•ืจ ื’ืจืกืื•ืช ืžื™ื ื™ืžืœื™ื•ืช ืžื”ื“ืจื™ื ื•ืคืœื˜ืคื•ืจืžื•ืช: macOS 10.13 (High Sierra), GCC 6, Windows ื—ื“ืฉ ื™ื•ืชืจ 7/2008R2.

ื ื–ื›ื™ืจ ื›ื™ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืคืœื˜ืคื•ืจืžืช 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. ื”ืกืคืจื™ื™ื” ืžืฉืžืฉืช ืœืจื™ื‘ื•ื™ ื—ื™ื‘ื•ืจื™ื ืœื™ื‘ื•ื‘, ืฉื”ื•ื ืžื‘ื ื” ืขืœ ืžืขืœ ืœื™ื‘ื‘ ื‘ืžืขืจื›ื•ืช Unix ื•ืžืขืœ IOCP ื‘-Windows. ืกืคืจื™ื™ื” ืžืฉืžืฉืช ืœื™ืฆื™ืจืช ืžืื’ืจ ืฉืจืฉื•ืจื™ื ืœื™ื‘ื™ื•, ืœื‘ื™ืฆื•ืข ืฉืื™ืœืชื•ืช DNS ื‘ืžืฆื‘ ืœื ื—ื•ืกื ืžืฉื•ืœื‘ c-ares. ื›ืœ ืงืจื™ืื•ืช ื”ืžืขืจื›ืช ืฉื’ื•ืจืžื•ืช ืœื—ืกื™ืžื” ืžื‘ื•ืฆืขื•ืช ื‘ืชื•ืš ืžืื’ืจ ื”ืฉืจืฉื•ืจื™ื ื•ืื–, ื›ืžื• ืžื˜ืคืœื™ ืื•ืชื•ืช, ืžืขื‘ื™ืจื•ืช ืืช ืชื•ืฆืืช ื”ืขื‘ื•ื“ื” ืฉืœื”ื ื‘ื—ื–ืจื” ื“ืจืš ืฆื™ื ื•ืจ ืœืœื ืฉื. ื‘ื™ืฆื•ืข ืงื•ื“ JavaScript ืžื•ื‘ื˜ื— ื‘ืืžืฆืขื•ืช ืฉื™ืžื•ืฉ ื‘ืžื ื•ืข ืฉืคื•ืชื— ืขืœ ื™ื“ื™ ื’ื•ื’ืœ V8 (ื‘ื ื•ืกืฃ, ืžื™ืงืจื•ืกื•ืคื˜ ืžืคืชื—ืช ื’ืจืกื” ืฉืœ Node.js ืขื ืžื ื•ืข Chakra-Core).

ื‘ื‘ืกื™ืกื•, Node.js ื“ื•ืžื” ืœืžืกื’ืจื•ืช Perl AnyEvent, ืจื•ื‘ื™ ืžื›ื•ื ืช ืื™ืจื•ืขื™ื, Python Twisted ะธ ื™ื™ืฉื•ื ืื™ืจื•ืขื™ื ื‘-Tcl, ืืš ืœื•ืœืืช ื”ืื™ืจื•ืขื™ื ื‘-Node.js ืžื•ืกืชืจืช ืžื”ืžืคืชื— ื•ื“ื•ืžื” ืœื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืขื™ื ื‘ืืคืœื™ืงืฆื™ื™ืช ืื™ื ื˜ืจื ื˜ ื”ืคื•ืขืœืช ื‘ื“ืคื“ืคืŸ. ื‘ืขืช ื›ืชื™ื‘ืช ื™ื™ืฉื•ืžื™ื ืขื‘ื•ืจ node.js, ื™ืฉ ืฆื•ืจืš ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืคืจื˜ื™ื ื”ืกืคืฆื™ืคื™ื™ื ืฉืœ ืชื›ื ื•ืช ืžื•ื ื—ื” ืื™ืจื•ืขื™ื, ืœืžืฉืœ, ื‘ืžืงื•ื ืœืขืฉื•ืช "var result = db.query("select..");" ืขื ื”ืžืชื ื” ืœื”ืฉืœืžืช ื”ืขื‘ื•ื“ื” ื•ืขื™ื‘ื•ื“ ืฉืœืื—ืจ ืžื›ืŸ ืฉืœ ื”ืชื•ืฆืื•ืช, Node.js ืžืฉืชืžืฉ ื‘ืขื™ืงืจื•ืŸ ืฉืœ ื‘ื™ืฆื•ืข ืืกื™ื ื›ืจื•ื ื™, ื›ืœื•ืžืจ. ื”ืงื•ื“ ื”ื•ืคืš ืœ- "db.query("select..", function (result) {Result processing});", ืฉื‘ื• ื”ืฉืœื™ื˜ื” ืชืขื‘ื•ืจ ืžื™ื“ ืœืงื•ื“ ื ื•ืกืฃ, ื•ืชื•ืฆืืช ื”ืฉืื™ืœืชื” ืชืขื•ื‘ื“ ืขื ื”ื’ืขืช ื”ื ืชื•ื ื™ื. .

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

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