ΠΠ΅ΡΠ΅ ΠΏΡΡΠ½Π°Ρ Node.js 21.0, ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² JavaScript. ΠΠ»ΠΎΠ½ΡΡ Node.js 21.0 ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π·Π° 6 ΠΌΠ΅ΡΠ΅ΡΠ°. Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π΄Π½ΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°Π²ΡΡΡΠ΅Π½Π° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΠΎΠ½Π° Node.js 20, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ LTS ΡΡΠ°ΡΡΡ ΠΈ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄ΠΎ Π°ΠΏΡΠΈΠ» 2026 Π³. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ LTS ΠΊΠ»ΠΎΠ½ Π½Π° Node.js 18.0 ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄ΠΎ ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ 2025 Π³., Π° ΠΏΡΠ΅Π΄Ρ ΠΎΠ΄Π½Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π° LTS ΠΊΠ»ΠΎΠ½ 16.0 Π΄ΠΎ Π°ΠΏΡΠΈΠ» 2024 Π³.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ:
- Fetch API Π΅ ΠΎΠ±ΡΠ²Π΅Π½ Π·Π° ΡΡΠ°Π±ΠΈΠ»Π΅Π½, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΏΡΠ΅Π· ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΈ ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ JavaScript ΠΊΠΎΠ΄, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΊΠΎΠ΄ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° HTTP/1.1 undici ΠΈ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈΡ API, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ Π² Π±ΡΠ°ΡΠ·ΡΡΠΈΡΠ΅. API Π²ΠΊΠ»ΡΡΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° fetch() ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Headers. ΠΠ°ΡΠ²ΠΊΠ° ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°ΡΠΈ HTTP Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅, Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(Π΄Π°Π½Π½ΠΈ); }
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° API WebStreams, ΠΊΠΎΡΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΏΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π΅ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½Π°. API ΠΏΡΠ°Π²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π²Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ Ρ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° ΠΏΡΠΈΡΡΠΈΠ³Π° ΠΏΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ°ΠΊΠ°ΡΠ΅ ΡΠ΅Π»ΠΈΡ ΡΠ°ΠΉΠ» Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½. ΠΠ±Π΅ΠΊΡΠΈΡΠ΅, Π½Π°Π»ΠΈΡΠ½ΠΈ Π² Node.js, Π²ΠΊΠ»ΡΡΠ²Π°Ρ ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream ΠΈ DecompressionStream.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° WebSocket ΠΊΠ»ΠΈΠ΅Π½Ρ, ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π±ΡΠ°ΡΠ·ΡΡΠΈ. ΠΠ° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° WebSocket, Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ ΡΠ»Π°Π³ΡΡ β--experimental-websocketβ.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° JavaScript ESM (ECMAScript ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π° Π±ΡΠ°ΡΠ·ΡΡΠΈ) Π²ΠΌΠ΅ΡΡΠΎ CommonJS (ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎ Π·Π° Node.js). ΠΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π΅ Π·Π°ΡΡΠ³Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠΈΠΉΡΠΎ ΡΠΎΡΠΌΠ°Ρ Π΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ ΡΡΠ΅Π· ΠΏΠΎΠ»Π΅ΡΠΎ βΡΠΈΠΏβ Π² package.json, ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΡΠ΅Π· ΡΠ»Π°Π³Π° β--input-typeβ ΠΈΠ»ΠΈ Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ (.mjs Π·Π° ESM, .cjs Π·Π° CommonJS). ΠΠΎΠ΄ΡΠ»ΠΈ ΠΎΠ±Π°ΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΈΠ·ΡΠΈΡΠ½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΡΠΎ CommonJS (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠ°Ρ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ β.jsβ), ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΡΠΎ ESM ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½. ΠΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ ΡΠ»Π°Π³ΡΡ β--experimental-default-typeβ.
- ΠΠ²ΠΈΠ³Π°ΡΠ΅Π»ΡΡ V8 Π΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π΄ΠΎ Π²Π΅ΡΡΠΈΡ 11.8, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² Chromium 118, ΠΊΠΎΡΡΠΎ ΡΠ΅Π³Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΌΠ΅ΡΠΎΠ΄Π° ArrayBuffer.prototype.transfer, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ²ΠΈ (ΠΌΠ΅ΡΠΎΠ΄ groupBy) ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π° WebAssembly Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ (i32.add, i32.sub, i32.mul, i64 .add, i64.sub ΠΈ i64.mul).
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΠ° globalPreload Π΅ ΠΏΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° Π² ΠΏΠΎΠ»Π·Π° Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ.
- ΠΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΡΠ° fs.writeFile Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΎΠΏΡΠΈΡ βΠΏΡΠΎΠΌΠΈΠ²Π°Π½Π΅β, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΡΡ Π΄Π°Π½Π½ΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠΈΡΡΠ²Π°Ρ Π² ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΠ»Π΅Π΄ Π²ΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° Π·Π°ΠΏΠΈΡ.
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΠΊΠΎΠ΄Π°, ΡΠ²ΡΡΠ·Π°Π½ Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° URL Π°Π΄ΡΠ΅ΡΠΈ, API Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅, ΠΏΠΎΡΠΎΡΠΈ, node:fs ΠΈ HTTP.
- ΠΠΎΠ±Π°Π²Π΅Π½ ΠΎΠ±Π΅ΠΊΡ Π·Π° Π³Π»ΠΎΠ±Π°Π»Π΅Π½ Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° Π±ΡΠΎΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ ΡΠ΄ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ navigator.hardwareConcurrency.
- Π ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° ββtestβ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΌΠ°ΡΠΊΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ββtest **/*.test.js.β).
- ΠΠ°ΠΊΠ΅ΡΠ½ΠΈΡΡ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ npm 10.2.0 ΠΈ ΠΏΠ°ΡΡΠ΅ΡΡΡ llhttp 9.1.2 ΡΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° Visual Studio 2019 ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° macOS, ΠΏΠΎ-ΡΡΠ°ΡΠΈ ΠΎΡ 11.0, Π΅ ΠΏΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°.
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° 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