ืคืœื˜ืคื•ืจืžืช 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, ื•ืกื ื™ืฃ 16.x LTS ื”ืงื•ื“ื ืขื“ ืกืคื˜ืžื‘ืจ 2023. ืกื ื™ืฃ 14.x LTS ื™ื™ืฉืžืจ ื‘-30 ื‘ืืคืจื™ืœ, ื•ืกื ื™ืฃ ื”ื‘ื™ื ื™ื™ื Node.js 19.x ื‘-1 ื‘ื™ื•ื ื™.

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

  • ืžื ื•ืข ื”-V8 ืขื•ื“ื›ืŸ ืœื’ืจืกื” 11.3, ื”ืžืฉืžืฉืช ื‘-Chromium 113. ืžื‘ื™ืŸ ื”ืฉื™ื ื•ื™ื™ื ื‘ื”ืฉื•ื•ืื” ืœืขื ืฃ Node.js 19, ืฉื”ืฉืชืžืฉ ื‘ืžื ื•ืข Chromium 107, ื”ืคื•ื ืงืฆื™ื•ืช String.prototype.isWellFormed ื•-toWellFormed, Array.prototype ื•ืฉื™ื˜ื•ืช TypedArray.prototype ืœืขื‘ื•ื“ื” ืขื ื”ืขืชืงื” ืขืœ ืฉื™ื ื•ื™ ืื•ื‘ื™ื™ืงื˜ื™ Array ื•-TypedArray, ื“ื’ืœ "v" ื‘-RegExp, ืชืžื™ื›ื” ื‘ืฉื™ื ื•ื™ ื’ื•ื“ืœ ArrayBuffer ื•ื”ื’ื“ืœืช ื”ื’ื•ื“ืœ ืฉืœ SharedArrayBuffer, tail-call ื‘-WebAssembly.
  • ืžื•ืฆืข ืžื ื’ื ื•ืŸ ื ื™ืกื™ื•ื ื™ ืฉืœ Permission Model ื”ืžืืคืฉืจ ืœืš ืœื”ื’ื‘ื™ืœ ื’ื™ืฉื” ืœืžืฉืื‘ื™ื ืžืกื•ื™ืžื™ื ื‘ืžื”ืœืš ื”ื‘ื™ืฆื•ืข. ืชืžื™ื›ื” ื‘ืžื•ื“ืœ ื”ื”ืจืฉืื” ืžื•ืคืขืœืช ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ ื”ื“ื’ืœ "--experimental-permission" ื‘ืขืช ื”ืคืขืœื”. ื‘ื™ื™ืฉื•ื ื”ืจืืฉื•ื ื™, ื”ื•ืฆืขื• ืืคืฉืจื•ื™ื•ืช ืœื”ื’ื‘ื™ืœ ื’ื™ืฉืช ื›ืชื™ื‘ื” (--allow-fs-write) ื•ืงืจื™ืื” (--allow-fs-read) ืœื—ืœืงื™ื ืžืกื•ื™ืžื™ื ืฉืœ ื”-FS, ืชื”ืœื™ื›ื™ ืฆืืฆื (--allow-child-process) , ืชื•ืกืคื•ืช (--no-addons ) ื•-threads (--allow-worker). ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœืืคืฉืจ ื›ืชื™ื‘ื” ืœืกืคืจื™ื™ืช /tmp ื•ืงืจื™ืืช ื”ืงื•ื‘ืฅ /home/index.js, ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ: node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js index .js

    ื›ื“ื™ ืœื‘ื“ื•ืง ื’ื™ืฉื”, ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื” process.permission.has(), ืœืžืฉืœ, "process.permission.has('fs.write',"/tmp/test").

  • ืžื˜ืคืœื™ื ืขื‘ื•ืจ ืžื•ื“ื•ืœื™ื ื—ื™ืฆื•ื ื™ื™ื ืฉืœ ECMAScript (ESMs) ื”ื ื˜ืขื ื™ื ื‘ืืžืฆืขื•ืช ืืคืฉืจื•ืช "--experimental-loader" ืžื•ืคืขืœื™ื ื›ืขืช ื‘ืฉืจืฉื•ืจ ื ืคืจื“, ืžื‘ื•ื“ื“ ืžื”ืฉืจืฉื•ืจ ื”ืจืืฉื™, ืžื” ืฉืžื‘ื˜ืœ ืืช ื”ื”ืฆื˜ืœื‘ื•ืช ืฉืœ ืงื•ื“ ื™ื™ืฉื•ื ื•ืžื•ื“ื•ืœ ESM ื˜ืขื•ื ื™ื. ื‘ื“ื•ืžื” ืœื“ืคื“ืคื ื™ื, ื”ืฉื™ื˜ื” import.meta.resolve() ืžื•ืคืขืœืช ื›ืขืช ื‘ืื•ืคืŸ ืกื™ื ื›ืจื•ื ื™ ื›ืืฉืจ ืงื•ืจืื™ื ืžืชื•ืš ื™ื™ืฉื•ื. ื‘ืื—ื“ ืžื”ืขื ืคื™ื ื”ื‘ืื™ื ืฉืœ Node.js, ืชืžื™ื›ื” ื‘ื˜ืขื™ื ืช ESM ืžืชื•ื›ื ื ืช ืœืขื‘ื•ืจ ืœืงื˜ื’ื•ืจื™ื” ืฉืœ ืชื›ื•ื ื•ืช ื™ืฆื™ื‘ื•ืช.
  • ื”ืžื•ื“ื•ืœ node:test (test_runner), ืฉื ื•ืขื“ ืœื™ืฆื•ืจ ื•ืœื”ืจื™ืฅ ื‘ื“ื™ืงื•ืช JavaScript ื”ืžื—ื–ื™ืจื•ืช ืชื•ืฆืื•ืช ื‘ืคื•ืจืžื˜ TAP (Test Anything Protocol), ื”ื•ืขื‘ืจ ืœื™ืฆื™ื‘.
  • ื”ื•ืงื ืฆื•ื•ืช ื‘ื™ืฆื•ืขื™ื ื ืคืจื“, ืืฉืจ ื›ื”ื›ื ื” ืœืกื ื™ืฃ ื”ื—ื“ืฉ, ืคืขืœ ืœื”ืืฆืช ืจื›ื™ื‘ื™ ื–ืžืŸ ืจื™ืฆื” ืฉื•ื ื™ื, ื›ื•ืœืœ ื ื™ืชื•ื— URL, fetch() ื•-EventTarget. ืœื“ื•ื’ืžื”, ื”ืชืงื•ืจื” ืฉืœ ืืชื—ื•ืœ ื”-EventTarget ืฆื•ืžืฆืžื” ื‘ื—ืฆื™, ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืฉื™ื˜ืช URL.canParse() ืฉื•ืคืจื• ืžืฉืžืขื•ืชื™ืช ื•ื™ืขื™ืœื•ืช ื”ื˜ื™ื™ืžืจื™ื ืฉื•ืคืจื”. ื‘ื ื•ืกืฃ, ื”ืฉื—ืจื•ืจ ืฉืœ ืžื ืชื— URL ื‘ืขืœ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื - Ada 2.0, ืฉื ื›ืชื‘ ื‘-C++, ื›ืœื•ืœื” ื‘ื”ืจื›ื‘.
  • ื”ืคื™ืชื•ื— ืฉืœ ืชื›ื•ื ื” ื ื™ืกื™ื•ื ื™ืช ืœืืกืคืงืช ื™ื™ืฉื•ืžื™ื ื‘ืฆื•ืจื” ืฉืœ ืงื•ื‘ืฅ ื”ืคืขืœื” ื™ื—ื™ื“ (SEA, Single Executable Applications) ื ืžืฉืš. ื™ืฆื™ืจืช ืงื•ื‘ืฅ ื”ืคืขืœื” ืžื—ื™ื™ื‘ืช ื›ืขืช ื”ื—ืœืคืช ื›ืชื ืฉื ื•ืฆืจ ืžืงื•ื‘ืฅ ืชืฆื•ืจื” ืฉืœ JSON (ื‘ืžืงื•ื ืœื”ื—ืœื™ืฃ ืงื•ื‘ืฅ JavaScript).
  • ืชืื™ืžื•ืช ืžืฉื•ืคืจืช ืฉืœ Web Crypto API ืขื ื™ื™ืฉื•ืžื™ื ืžืคืจื•ื™ืงื˜ื™ื ืื—ืจื™ื.
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืจืฉืžื™ืช ืขื‘ื•ืจ Windows ื‘ืžืขืจื›ื•ืช ARM64.
  • ื”ืžืฉืš ืชืžื™ื›ื” ื‘ื”ืจื—ื‘ื•ืช WASI (WebAssembly System Interface) ืœื™ืฆื™ืจืช ื™ื™ืฉื•ืžื™ WebAssembly ืขืฆืžืื™ื™ื. ื”ื•ืกืจ ืืช ื”ืฆื•ืจืš ืœืฆื™ื™ืŸ ื“ื’ืœ ืฉื•ืจืช ืคืงื•ื“ื” ืžื™ื•ื—ื“ ื›ื“ื™ ืœืืคืฉืจ ืชืžื™ื›ื” ื‘-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 ื•- 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

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