Π”ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π΅ ΡΡŠΡ€Π²ΡŠΡ€Π½Π°Ρ‚Π° JavaScript ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js 20.0

ИзлСзС 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).
  • Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° Π΅ ΠΎΡ‚Π΄Π΅Π»Π½Π° разработчичСска Π΅ΠΊΠΈΠΏ, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° оптимизацията Π½Π° производитСлността, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° новия ΠΊΠ»ΠΎΠ½ Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠ» Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° ускоряванС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π½Π° Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ парсинг Π½Π° 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 Π΅ скрит ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ напомня Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ Π² ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€. ΠŸΡ€ΠΈ написванСто Π½Π° прилоТСния Π·Π° node.js Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π²Π·Π΅ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ спСцификата Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠΉΠ½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вмСсто Π΄Π° сС изпълнява 'var result = db.query("select..);",' с ΠΎΡ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΈ послСдваща ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅, Π² Node.js сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° асинхронно изпълнСниС, Ρ‚.Π΅. ΠΊΠΎΠ΄ΡŠΡ‚ сС трансформира Π² 'db.query("select..", function (result) {ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°});', ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π²Π΅Π΄Π½Π°Π³Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° към слСдващия ΠΊΠΎΠ΄, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Ρ‰Π΅ бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΠΎ мярка Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster