Π‘ΠΎΡΡΠΎΡΠ»ΡΡ ΡΠ΅Π»ΠΈΠ· Node.js 19.0, ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ JavaScript. Node.js 19 ΠΎΡΠ½Π΅ΡΡΠ½ ΠΊ Π²Π΅ΡΠΊΠ΅ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΡΠΎΠΊΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ Π²ΡΠΏΡΡΠΊΠ°ΡΡΡΡ Π΄ΠΎ ΠΈΡΠ½Ρ 2023 Π³ΠΎΠ΄Π°. Π Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠ΅ Π΄Π½ΠΈ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ Π²Π΅ΡΠΊΠΈ Node.js 18, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΡΠ°ΡΡΡ LTS ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄ΠΎ Π°ΠΏΡΠ΅Π»Ρ 2025 Π³ΠΎΠ΄Π°. Π‘ΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΠΎΠΉ LTS-Π²Π΅ΡΠΊΠΈ Node.js 16.0 ΠΏΡΠΎΠ΄Π»ΠΈΡΡΡ Π΄ΠΎ ΡΠ΅Π½ΡΡΠ±ΡΡ 2023 Π³ΠΎΠ΄Π°, Π° ΠΏΠΎΠ·Π°ΠΏΡΠΎΡΠ»ΠΎΠΉ LTS-Π²Π΅ΡΠΊΠΈ 14.0 Π΄ΠΎ Π°ΠΏΡΠ΅Π»Ρ 2023 Π³ΠΎΠ΄Π°.
ααΆααααααα’ααααΆαααα
- ΠΠ²ΠΈΠΆΠΎΠΊ V8 ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 10.7, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠΉ Π² Chromium 107. ΠΠ· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π²Π΅ΡΠΊΠΎΠΉ Node.js 18 ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ API Intl.NumberFormat, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ formatRange(), formatRangeToParts() ΠΈ selectRange(), Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ², Π½ΠΎΠ²ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠΎΠΊ ΠΊΠ°ΠΊ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΡ ΡΠΈΡΠ΅Π». Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ llhttp 8.1.0 ΠΈ npm 8.19.2.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«node βwatchΒ» Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»ΡΡΠ°Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Β«node βwatch index.jsΒ» ΠΏΡΠΎΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠ΅Π½ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ index.js).
- ΠΠ»Ρ Π²ΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ HTTP/HTTPS-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° HTTP 1.1 Keep-Alive, ΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΊΡΡΡΡΠΌ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ HTTP-Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Keep-Alive ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ°ΡΡ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΎΡΠΊΡΡΡΡΠΌ Π²ΡΡΡΠ°Π²Π»Π΅Π½ Π² 5 ΡΠ΅ΠΊΡΠ½Π΄. Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ HTTP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π±ΠΎΡΠ° HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Keep-Alive Π² ΠΎΡΠ²Π΅ΡΠ°Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π° Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ HTTP-ΡΠ΅ΡΠ²Π΅ΡΠ° Node.js Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Keep-Alive.
- Π ΡΠ°Π·ΡΡΠ΄ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΡΠ½ API WebCrypto, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Ed25519, Ed448, X25519 ΠΈ X448. ΠΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ WebCrypto ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ globalThis.crypto ΠΈΠ»ΠΈ require(βnode:cryptoβ).webcrypto.
- Π£Π΄Π°Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ DTrace, SystemTap ΠΈ ETW (Event Tracing for Windows), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ·Π½Π°Π½ΠΎ Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠΌ ΠΈΠ·-Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π² Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ.
αααα·ααΆ Node.js α’αΆα ααααΌαααΆαααααΎααΆαααααααΆααααΆααααααααΆαααΆαααΈααααααααααα·ααΈαααααΆα αα·ααααααΆαααααααΎααααααα·ααΈαααααΆααααΆαααΈαααααα αα·ααααΆαααΈαααααααααΆα ααΎααααΈαααααΈααα»αααΆααααααααα·ααΈαααααΆαα Node.js ααΆααααααΌααααΌαα»ααααααα½αααααΌαααΆααααα α ααααααα»ααααα’αααα’αΆα ααααααααααΌαα»αααΆαα½αααΉαααΆαα’αα»αααα HTTP, SMTP, XMPP, DNS, FTP, IMAP, αααΆαααΈααα POP3 αα·ααααΆαααΈαααααα αααΌαα»ααααααΆααααΆααα½ααααα αΌα ααΆαα½αααΉαααααααααααα ααααααααααα WebSocket αα·α Ajax handlers α§αααααααααΆαα DBMS (MySQL, PostgreSQL, SQLite, MongoDB), αααΆαααΈαααααΌ, αααΆαααΈα CSS, ααΆαα’αα»αααααααα½ααααααααΆαααααΈαααΌ αα·αααααααααα’αα»ααααΆα (OAuth), α§αααααααα XML α
ααΎααααΈααΆααΆααΆαααΌαααααΎαααΆαααααααΎααααααααΆαα½αα ααα½ααα Node.js ααααΎααααΌααααα·ααααα·ααΌαα’ααααΆααααααα’ααααΎααΆααααααααΆαααααΉαααα·ααΆαααααααα·αααΆααΆαα αα·ααα·ααααααααααααα·ααΈαααααααΆαααΆαα α αααα‘αααααα·αα αα·ααΈααΆααααααααααΆαααααααααΆααααΆααααααΆαααα α»αα»αααΊ epoll, kqueue, /dev/poll αα·αααααΎαααΎαα αααααΆααααΆααααααΆαααα α»αα»α αααααΆααα 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