ΠΡΡΠ½Π° ΡΠ΅ Node.js 21.0, ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ JavaScript. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡ 21.0 Π½Π° Node.js ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ 6 ΠΌΠ΅ΡΠ΅ΡΠ°. ΠΡΠ΅Π· ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π΄Π½ΠΈ ΡΠ΅ ΠΏΡΠΈΠΊΠ»ΡΡΠΈ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΡΡΠΈΡ 20 Π½Π° Node.js, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΡΡΠ°ΡΡΡ LTS ΠΈ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄ΠΎ Π°ΠΏΡΠΈΠ» 2026 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° LTS Π²Π΅ΡΡΠΈΡ Node.js 18.0 ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄ΠΎ ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ 2025 Π³ΠΎΠ΄ΠΈΠ½Π°, Π° Π½Π° ΠΏΠΎ-ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° LTS Π²Π΅ΡΡΠΈΡ 16.0 Π΄ΠΎ Π°ΠΏΡΠΈΠ» 2024 Π³ΠΎΠ΄ΠΈΠ½Π°.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ:
- ΠΠ±ΡΠ²Π΅Π½ Π΅ ΡΡΠ°Π±ΠΈΠ»Π΅Π½ API Fetch, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΎΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΈ ΡΠ»Π΅ΡΠ½ΡΠ²Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ JavaScript ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΠΈ Π½Π° ΡΡΡΠ²ΡΡΠ°, ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π΅ Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° ΠΊΠΎΠ΄Π° ΠΎΡ HTTP/1.1 ΠΊΠ»ΠΈΠ΅Π½ΡΠ° undici ΠΈ Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ Π±Π»ΠΈΠ·ΠΊΠ° Π΄ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈΡ API, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½ ΠΎΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΈΡΠ΅. API Π²ΠΊΠ»ΡΡΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ fetch() ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Headers, Request ΠΈ Response, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°ΡΠΈ HTTP Π·Π°Π³Π»Π°Π²ΠΈΡΡΠ°, Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅. const res = await fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = await res.json(); console.log(data); }
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° API WebStreams, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΎΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ°. API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Ρ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ΡΠΎ ΠΈΠΌ ΠΎΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ°ΠΊΠ°Ρ ΡΡΠ»ΠΎΡΠΎ ΡΠ°ΠΉΠ» Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΡΠ΅Π΄Π΅Π½ΠΎ. Π Node.js ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream ΠΈ DecompressionStream.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° WebSocket, ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠΈΡΠ΅. ΠΠ° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° WebSocket Π΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½ ΡΠ»Π°Π³ "--experimental-websocket".
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° JavaScript ΠΌΠΎΠ΄ΡΠ»ΠΈ ESM (ECMAScript ΠΠΎΠ΄ΡΠ»ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π° Π±ΡΠ°ΡΠ·Π΅ΡΠΈ) Π²ΠΌΠ΅ΡΡΠΎ CommonJS (ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π·Π° Node.js). ΠΡΠΎΠΌΡΠ½Π°ΡΠ° Π½Π΅ Π·Π°ΡΡΠ³Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠΈΠΉΡΠΎ ΡΠΎΡΠΌΠ°Ρ Π΅ ΡΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΡΠ΅Π· ΠΏΠΎΠ»Π΅ΡΠΎ "type" Π² 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 Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½Π°; Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° register ΠΈ initialize.
- Π ΡΡΠ½ΠΊΡΠΈΡΡΠ° fs.writeFile Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΎΠΏΡΠΈΡ βflushβ Π·Π° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΡΠ»Π°ΡΠΊΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΠ»Π΅Π΄ Π²ΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΏΠΈΡ.
- ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ΄Π°, ΡΠ²ΡΡΠ·Π°Π½ Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° URL, API fetch, ΠΏΠΎΡΠΎΡΠΈ, node:fs ΠΈ HTTP.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΎΠ±Π΅ΠΊΡ navigator. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° Π±ΡΠΎΡ Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° CPU ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ navigator.hardwareConcurrency.
- Π ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° ββtestβ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° glob-ΠΌΠ°ΡΠΊΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ββ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. ΠΠ° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ» ΠΎΡ Π½ΠΈΡΠΊΠΈ (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 Π΅ ΡΠΊΡΠΈΡ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΡΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΡ Π² ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡ. ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° Node.js Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΠΉΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ βvar result = db.query(βselect..β);β Ρ ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ Π·Π° Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅, Π² Node.js ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΡΡ Π½Π° Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Ρ.Π΅. ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ° Π² βdb.query(βselect..β, function (result) {ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°});β, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π±ΡΡΠ·ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΊΡΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΠΊΠΎΠ΄, Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΠΎ ΠΌΡΡΠΊΠ° Π½Π° ΠΏΠΎΡΡΡΠΏΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
