Π‘ΠΎΡΡΠΎΡΠ»ΡΡ ΡΠ΅Π»ΠΈΠ· Node.js 20.0, ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ JavaScript. Node.js 20.0 ΠΎΡΠ½Π΅ΡΡΠ½ ΠΊ Π²Π΅ΡΠΊΠ°ΠΌ Ρ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠΎΠΊΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, Π½ΠΎ Π΄Π°Π½Π½ΡΠΉ ΡΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠΊΡΡΠ±ΡΠ΅, ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Node.js 20.x Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎ 30 Π°ΠΏΡΠ΅Π»Ρ 2026 Π³ΠΎΠ΄Π°. Π‘ΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΠΎΠΉ LTS-Π²Π΅ΡΠΊΠΈ Node.js 18.x ΠΏΡΠΎΠ΄Π»ΠΈΡΡΡ Π΄ΠΎ Π°ΠΏΡΠ΅Π»Ρ 2025 Π³ΠΎΠ΄Π°, Π° ΠΏΠΎΠ·Π°ΠΏΡΠΎΡΠ»ΠΎΠΉ LTS-Π²Π΅ΡΠΊΠΈ 16.x Π΄ΠΎ ΡΠ΅Π½ΡΡΠ±ΡΡ 2023 Π³ΠΎΠ΄Π°. Π‘ΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ LTS-Π²Π΅ΡΠΊΠΈ 14.x Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΎ 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, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Permission Model Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ»Π°Π³Π° «—experimental-permission». Π Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΈ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° Π½Π° Π·Π°ΠΏΠΈΡΡ (—allow-fs-write) ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ (—allow-fs-read) ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ ΡΠ°ΡΡΡΠΌ Π€Π‘, Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ (—allow-child-process), Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡΠΌ (—no-addons) ΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ (—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 (ESM), Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠΈΡ «—experimental-loader», ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ ESM-ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄ import.meta.resolve() ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. Π ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π΅ΡΠΎΠΊ Node.js ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ESM ΠΏΠ»Π°Π½ΠΈΡΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π² ΡΠ°Π·ΡΡΠ΄ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ.
- Π ΡΠΈΡΠ»ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΡΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ node:test (test_runner), ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ JavaScript, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ TAP (Test Anything Protocol).
- Π‘ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ°Ρ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅Π»Π° ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°Π·Π±ΠΎΡ URL, fetch() ΠΈ EventTarget. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ EventTarget ΡΠ½ΠΈΠΆΠ΅Π½Ρ Π² Π΄Π²Π° ΡΠ°Π·Π°, Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° URL.canParse() ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΡΠΎΡΡΠ°Π² Π²ΠΊΠ»ΡΡΡΠ½ Π²ΡΠΏΡΡΠΊ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ° URL — Ada 2.0, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠ·ΡΠΊΠ΅ C++.
- ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΡΠΎΡΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (SEA, Single Executable Applications). Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠ±Π°, ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON (Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ JavaScript-ΡΠ°ΠΉΠ»Π°).
- Π£Π»ΡΡΡΠ΅Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ API Web Crypto Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Windows Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ARM64.
- ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ WASI (WebAssembly System Interface) Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½ΡΡ WebAssembly-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π£Π±ΡΠ°Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ WASI.
ΠΠ»Π°ΡΡΠΎΡΠΌΠ° Node.js ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Node.js ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π° Π±ΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ web-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ WebSocket ΠΈ Ajax, ΠΊΠΎΠ½Π½Π΅ΠΊΡΠΎΡΡ ΠΊ Π‘Π£ΠΠ (MySQL, PostgreSQL, SQLite, MongoDB), ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΡ, CSS-Π΄Π²ΠΈΠΆΠΊΠΈ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΡΠΈΠΏΡΠΎΠ°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΈ ΡΠΈΡΡΠ΅ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (OAuth), XML-ΠΏΠ°ΡΡΠ΅ΡΡ.
ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Node.js Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ callback-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠ°ΠΊ epoll, kqueue, /dev/poll ΠΈ select. ΠΠ»Ρ ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° libuv, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠΎΠΉ Π½Π°Π΄ libev Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Unix ΠΈ Π½Π°Π΄ IOCP Π² Windows. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² (thread pool) Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° libeio, Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ DNS-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ c-ares. ΠΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Π·Π°ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» (pipe). ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JavaScript-ΠΊΠΎΠ΄Π° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google Π΄Π²ΠΈΠΆΠΊΠ° V8 (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Microsoft ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ Π²Π°ΡΠΈΠ°Π½Ρ Node.js Ρ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Chakra-Core).
ΠΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ Node.js ΠΏΠΎΡ
ΠΎΠΆ Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ Perl AnyEvent, Ruby Event Machine, Python Twisted ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π² Tcl, Π½ΠΎ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ (event loop) Π² Node.js ΡΠΊΡΡΡ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π² web-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅. ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ node.js Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ «var result = db.query(«select..»);» Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², Π² Node.js ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Ρ.Π΅. ΠΊΠΎΠ΄ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Π² «db.query(«select..», function (result) {ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°});», ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΡ ΠΊ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°ΠΏΡΠΎΡΠ° Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru