ΠΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° 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, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Permission Model ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΡΠ΅Π· ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠ»Π°Π³Π° β--experimental-permissionβ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°. ΠΡΠΈ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΡ
Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π·Π° Π·Π°ΠΏΠΈΡ (--allow-fs-write) ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ (--allow-fs-read) Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ°ΡΡΠΈ Π½Π° FS, Π΄ΡΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ (--allow-child-process) , Π΄ΠΎΠ±Π°Π²ΠΊΠΈ (--no-addons) ΠΈ Π½ΠΈΡΠΊΠΈ (--allow-worker). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° /tmp ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»Π° /home/index.js, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅: Π²ΡΠ·Π΅Π» --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js ΠΈΠ½Π΄Π΅ΠΊΡ .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), Π΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅Π½ Π² ΡΡΠ°Π±ΠΈΠ»Π΅Π½.
- Π‘ΡΠ·Π΄Π°Π΄Π΅Π½ Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ Π΅ΠΊΠΈΠΏ Π·Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡ, ΠΊΠΎΠΉΡΠΎ Π² ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈΡ ΠΊΠ»ΠΎΠ½ ΡΠ°Π±ΠΎΡΠΈ Π·Π° ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° 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 ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠΈ, Π‘Π£ΠΠ ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΠΈ (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, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΎΡ Google (Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Microsoft ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° Node.js Ρ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Chakra-Core).
Π ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° ΡΠΈ Node.js Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ±ΠΈΡΠΈΡΡΠ° Tcl, Π½ΠΎ ΡΠΈΠΊΡΠ»ΡΡ Π½Π° ΡΡΠ±ΠΈΡΠΈΡΡΠ° Π² Node.js Π΅ ΡΠΊΡΠΈΡ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ ΠΏΡΠΈΠ»ΠΈΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° node.js, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ΠΎΡΠΎ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ "var result = db.query("select..");" Ρ ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ Π·Π° Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅, Node.js ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π½Π° Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Ρ.Π΅. ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ° Π² "db.query("select..", function (result) {result processing});", Π² ΠΊΠΎΠΉΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ ΠΊΡΠΌ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΊΠΎΠ΄ ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΈ ΠΏΡΠΈΡΡΠΈΠ³Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru