исходный ΠΊΠΎΠ΄ node js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Node JS. Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ΒΆ

Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Node.js являСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, исходники ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° github.com.

Установка¢

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт https://nodejs.org/en/. На Π³Π»Π°Π²Π½ΠΎΠΉ страницС ΠΌΡ‹ сразу ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: самая послСдняя вСрсия NodeJS ΠΈ LTS-вСрсия.

исходный ΠΊΠΎΠ΄ node js. 1.1. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-1.1. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1.1. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

исходный ΠΊΠΎΠ΄ node js. 1.2. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-1.2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1.2. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ВСрсии node.js для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм наряду с исходниками ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсу https://nodejs.org/en/download/

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΒΆ

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄ Node JS достаточно ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π² частности, Notepad++. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠ° Atom, Sublime, Visual Studio Code, Π»ΠΈΠ±ΠΎ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Node.JS, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Visual Studio ΠΈΠ»ΠΈ WebStorm.

ПослС установки NodeJS Π½Π°ΠΌ становится доступным Ρ‚Π°ΠΊΠΎΠΉ инструмСнт ΠΊΠ°ΠΊ REPL. REPL (Read Eval Print Loop) прСдставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΈΠ»ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅.

Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ JS:

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΈΡ… Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ числа Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚:

Если ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ REPL ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ ΠΎΠ± ошибкС:

исходный ΠΊΠΎΠ΄ node js. 1.5. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-1.5. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 1.5. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°ΒΆ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Руководство ΠΏΠΎ Node.js, Ρ‡Π°ΡΡ‚ΡŒ 1: ΠΎΠ±Ρ‰ΠΈΠ΅ свСдСния ΠΈ Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ сСрии ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой поэтапный ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ руководства ΠΏΠΎ Node.js для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Β«Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΒ» β€” это Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ познаниями Π² области Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ³ΠΎ JavaScript. Он ΡΠ»Ρ‹ΡˆΠ°Π» ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сущСствуСт сСрвСрная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΈΡˆΡƒΡ‚ Π½Π° JS, ΠΈ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ эту ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для сСбя ΠΈ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Node.js.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρƒ Ρƒ нас Π±Ρ‹Π» ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ ΠΏΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, посвящённый bash-скриптам. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹, послС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ всСх Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², собрали ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ PDF-Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊ ΠΆΠ΅ планируСтся ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΈ Π² этот Ρ€Π°Π·.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

БСгодня ΠΌΡ‹ обсудим особСнности Node.js, Π½Π°Ρ‡Π½Ρ‘ΠΌ знакомство с экосистСмой этой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ напишСм сСрвСрный Β«Hello WorldΒ».

ΠžΠ±Π·ΠΎΡ€ Node.js

Node.js β€” это опСнсорсная кроссплатформСнная срСда выполнСния для JavaScript, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° сСрвСрах. Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выпуска этой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π² 2009 Π³ΠΎΠ΄Ρƒ ΠΎΠ½Π° стала Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ популярной ΠΈ Π² наши Π΄Π½ΠΈ ΠΈΠ³Ρ€Π°Π΅Ρ‚ вСсьма Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² области Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Если ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ популярности число Π·Π²Ρ‘Π·Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ собрал Π½Π΅ΠΊΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° GitHub, Ρ‚ΠΎ Node.js, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ 50000 Π·Π²Ρ‘Π·Π΄, это ΠΎΡ‡Π΅Π½ΡŒ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ популярный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js построСна Π½Π° Π±Π°Π·Π΅ JavaScript Π΄Π²ΠΈΠΆΠΊΠ° V8 ΠΎΡ‚ Google, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Google Chrome. Данная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, Π² основном, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π²Π΅Π±-сСрвСров, ΠΎΠ΄Π½Π°ΠΊΠΎ сфСра Π΅Ρ‘ примСнСния этим Π½Π΅ ограничиваСтся.

Рассмотрим основныС особСнности Node.js.

β–Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ

Одной ΠΈΠ· основных ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… особСнностСй Node.js являСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. JavaScript-ΠΊΠΎΠ΄, выполняСмый Π² срСдС Node.js, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² Π΄Π²Π° Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ ΠΊΠΎΠ΄, написанный Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языках, Π²Ρ€ΠΎΠ΄Π΅ C ΠΈΠ»ΠΈ Java, ΠΈ Π½Π° порядки быстрСС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Python ΠΈΠ»ΠΈ Ruby. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ являСтся Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ зависят ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… тСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ, Π² Ρ†Π΅Π»ΠΎΠΌ, Node.js β€” это ΠΎΡ‡Π΅Π½ΡŒ быстрая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°.

β–ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π°

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js проста Π² освоСнии ΠΈ использовании. На самом Π΄Π΅Π»Π΅, ΠΎΠ½Π° прямо-Ρ‚Π°ΠΊΠΈ ΠΎΡ‡Π΅Π½ΡŒ проста, особСнно это Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π² сравнСнии с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сСрвСрными ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ.

▍JavaScript

Π’ срСдС Node.js выполняСтся ΠΊΠΎΠ΄, написанный Π½Π° JavaScript. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ JavaScript Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ сСрвСрный, ΠΈ клиСнтский ΠΊΠΎΠ΄ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ языкС программирования Π±Π΅Π· нСобходимости ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ инструмСнт для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ сСрвСрной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

Π’ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ Π½Π° сСрвСрС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ языка. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Node.js ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° использованиС Π½ΠΎΠ²Ρ‹Ρ… стандартов ECMAScript ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Для этого Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ обновят Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Node.js β€” это сСрвСрная срСда, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½ΠΎΠ²Ρ‹Π΅ возмоТности языка ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ доступными ΠΏΡ€ΠΈ установкС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΈΡ… вСрсии Node.js.

▍ДвиТок V8

Π’ основС Node.js, ΠΏΠΎΠΌΠΈΠΌΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π»Π΅ΠΆΠΈΡ‚ опСнсорсный JavaScript-Π΄Π²ΠΈΠΆΠΎΠΊ V8 ΠΎΡ‚ Google, примСняСмый Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Google Chrome ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Node.js ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ тысяч ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сдСлали срСду выполнСния JavaScript Chrome нСвСроятно быстрой ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ V8.

β–ΠΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ

Π’ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… языках программирования (C, Java, Python, PHP) всС инструкции, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ позаботится ΠΎΠ± асинхронном Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ссли, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Π°ΠΊΠΎΠΉ срСдС, произвСсти сСтСвой запрос для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ JSON-ΠΊΠΎΠ΄Π°, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сдСлан запрос, Π±ΡƒΠ΄Π΅Ρ‚ приостановлСно Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚Π°.

JavaScript Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ написаниС асинхронного ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° с использованиСм СдинствСнного ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° (коллбэков) ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, основанной Π½Π° событиях. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚ΡΠΆΡ‘Π»ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ коллбэк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ сразу послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΆΠ΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС ΠΆΠ΄Π°Ρ‚ΡŒ, скаТСм, окончания выполнСния AJAX-запроса, Π½Π΅ имСя ΠΏΡ€ΠΈ этом возмоТности Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Ρ‰Π΅Π»Ρ‡ΠΊΠΈ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π²Π΅Π±-страницами, всё, ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· сСти, ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Если Π²Ρ‹ создавали ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ пользовались ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ°ΠΌΠΈ асинхронного программирования.

АсинхронныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ СдинствСнному Node.js-сСрвСру ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ тысячи ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½Π΅ нагруТая ΠΏΡ€ΠΈ этом программиста Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΊΠΎΠ΄Π°. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ источниками ошибок.

Node.js прСдоставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π²Π²ΠΎΠ΄Π° Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΈ, Π² Ρ†Π΅Π»ΠΎΠΌ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π² срСдС Node.js, написаны с использованиСм Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° скорСС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Π΅ΠΌ Π½ΠΎΡ€ΠΌΠΎΠΉ.

Когда Node.js Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, Π²Ρ€ΠΎΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· сСти, доступа ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Node.js ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Ρ‘ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π΄Π΅Π»Π°ΠΌΠΈ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выполнСния этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹.

▍БиблиотСки

Благодаря простотС ΠΈ удобству Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для Node.js, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся npm, экосистСма Node.js прямо-Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΡ†Π²Π΅Ρ‚Π°Π΅Ρ‚. БСйчас Π² рССстрС npm имССтся Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»ΡƒΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° опСнсорсных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ свободно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Node.js-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.
РассмотрСв Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основныС особСнности ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js, ΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‘ Π² дСйствии. Начнём с установки.

Установка Node.js

Node.js ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ сСйчас рассмотрим.
Π’Π°ΠΊ, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ установочныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для всСх основных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

БущСствуСт Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ вСсьма ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ установки Node.js, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. НапримСр, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² macOS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся фактичСским стандартом Π² этой области, называСтся Homebrew. Если ΠΎΠ½ Π² вашСй систСмС Π΅ΡΡ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Node.js, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

Бписок ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, Π² Ρ‚ΠΎΠΌ числС β€” для Linux ΠΈ Windows, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь.

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ вСрсий Node.js являСтся nvm. Π­Ρ‚ΠΎ срСдство позволяСт ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ вСрсиями Node.js, с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Node.js, послС Ρ‡Π΅Π³ΠΎ, ΠΏΡ€ΠΈ нСобходимости, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π° ΡΡ‚Π°Ρ€ΡƒΡŽ. Nvm пригодится ΠΈ Π² ситуации, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠΎΠ΄ Π½Π° старой вСрсии Node.js.

Π― посовСтовал Π±Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ установщиками Node.js. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ macOS я ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π±Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Node.js с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Homebrew. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ установили Node.js, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Β«Hello WorldΒ».

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Node.js-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π‘Π°ΠΌΡ‹ΠΌ распространённым ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния для Node.js ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ простой Π²Π΅Π±-сСрвСр. Π’ΠΎΡ‚ Π΅Π³ΠΎ ΠΊΠΎΠ΄:

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, сохранитС Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ server.js ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Для Π½Π°Ρ‡Π°Π»Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ модуля http.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js являСтся ΠΎΠ±Π»Π°Π΄Π°Ρ‚Π΅Π»Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ стандартного Π½Π°Π±ΠΎΡ€Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ входят ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΠ΅Ρ‚ΡŒΡŽ.

ΠœΠ΅Ρ‚ΠΎΠ΄ createServer() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° http создаёт Π½ΠΎΠ²Ρ‹ΠΉ HTTP-сСрвСр ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ.

Π‘Π΅Ρ€Π²Π΅Ρ€ настроСн Π½Π° ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ хостС. Когда сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ², вызываСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ коллбэк, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π½Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сСрвСр Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ прСдоставляСт Π² нашС распоряТСниС свСдСния ΠΎ запросС. Π’ нашСм простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ, Π½ΠΎ, ΠΏΡ€ΠΈ нСобходимости, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° req ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ запроса ΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² Π½Ρ‘ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ΅Π½ для формирования ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° запрос.

Π”Π°Π»Π΅Π΅, ΠΌΡ‹ устанавливаСм Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Content-Type :

ПослС этого ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ ΠΎΡ‚Π²Π΅Ρ‚Π°, добавляя Π΅Π³ΠΎ содСрТимоС Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° end() :

ΠœΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ мощная экосистСма. ΠžΠ±ΡΡƒΠ΄ΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ популярныС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты для Node.js.

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты для Node.js

Node.js β€” это низкоуровнСвая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ для Π½Π΅Ρ‘ ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь программистам, Π±Ρ‹Π»ΠΎ создано ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ стали вСсьма популярными. Π’ΠΎΡ‚ нСбольшой список Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ сдСланными ΠΈ достойными изучСния:

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ история Node.js

Π’ этом Π³ΠΎΠ΄Ρƒ Node.js исполнилось ΡƒΠΆΠ΅ 9 Π»Π΅Ρ‚. Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ, Ссли ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ этот возраст с возрастом JavaScript, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΡƒΠΆΠ΅ 23 Π³ΠΎΠ΄Π°, ΠΈΠ»ΠΈ с 25-Π»Π΅Ρ‚Π½ΠΈΠΌ возрастом Π²Π΅Π±Π°, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π΅Π³ΠΎ Π·Π½Π°Π΅ΠΌ, Ссли ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚ появлСния Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Mosaic.

9 Π»Π΅Ρ‚ β€” это малСнький срок для Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ сСйчас Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js сущСствовала всСгда.

Π― Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ с Node.js с Ρ€Π°Π½Π½ΠΈΡ… вСрсий ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° Π΅ΠΉ Π±Ρ‹Π»ΠΎ Π΅Ρ‰Ρ‘ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2 Π³ΠΎΠ΄Π°. Π”Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Node.js Π±Ρ‹Π»ΠΎ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ, ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Node.js β€” это ΠΎΡ‡Π΅Π½ΡŒ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ тСхнологиях, Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² основС Node.js ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрим основныС события, связанныС с этой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ.

Π˜Ρ‚Π°ΠΊ, JavaScript β€” это язык программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан Π² Netscape ΠΊΠ°ΠΊ скриптовый язык, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для управлСния Π²Π΅Π±-страницами Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Netscape Navigator.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Всё Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ Node.js

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ «Everything you need to know about Node.js» Π°Π²Ρ‚ΠΎΡ€Π° Jorge RamΓ³n.

исходный ΠΊΠΎΠ΄ node js. . исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ наши Π΄Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Node.js являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых популярных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ для построСния эффСктивных ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… REST API’s. Она Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для построСния Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Ρ… ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, дСсктопных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Π΄Π°ΠΆΠ΅ для IoT.

Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ Node.js Π±ΠΎΠ»Π΅Π΅ 6 Π»Π΅Ρ‚ ΠΈ я Π½Π° самом Π΄Π΅Π»Π΅ люблю Π΅Ρ‘. Π­Ρ‚ΠΎΡ‚ пост Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ пытаСтся Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Node.js Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° самом Π΄Π΅Π»Π΅.

О Ρ‡Π΅ΠΌ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Ρ€Π΅Ρ‡ΡŒ:

ΠœΠΈΡ€ Π΄ΠΎ Node.js

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ сСрвСр

Π’Π΅Π±-прилоТСния, написанныС слСдуя ΠΊΠ»ΠΈΠ΅Π½Ρ‚/сСрвСрной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмС β€” ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ рСсурс Ρƒ сСрвСра ΠΈ сСрвСр отправляСт рСсурс Π² ΠΎΡ‚Π²Π΅Ρ‚. Π’ этой схСмС сСрвСр, ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ² Π½Π° запрос, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ соСдинСниС.

Вакая модСль эффСктивна ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΊ сСрвСру потрСбляСт рСсурсы (ΠΏΠ°ΠΌΡΡ‚ΡŒ, процСссорноС врСмя ΠΈ Ρ‚.Π΄.). Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, сСрвСр Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

Π—Π½Π°Ρ‡ΠΈΡ‚ Π»ΠΈ это, Ρ‡Ρ‚ΠΎ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ запрос Π·Π° Ρ€Π°Π·? НС совсСм! Когда сСрвСр ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ запрос ΠΎΠ½ создаёт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΠΎΡ‚ΠΎΠΊ, Ссли простыми словами, это врСмя ΠΈ рСсурсы, Ρ‡Ρ‚ΠΎ CPU выдСляСт Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ нСбольшого Π±Π»ΠΎΠΊΠ° инструкций. Π‘ ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ сказанного, сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько запросов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ. Вакая модСль Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ thread-per-request model.

исходный ΠΊΠΎΠ΄ node js. mmnsgnzvz7aptv62xrbo6zxju w. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-mmnsgnzvz7aptv62xrbo6zxju w. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° mmnsgnzvz7aptv62xrbo6zxju w. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ N запросов сСрвСру Π½ΡƒΠΆΠ½ΠΎ N ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Если сСрвСр ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ N+1 запросов, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π΅ станСт доступным.

На рисункС Π²Ρ‹ΡˆΠ΅, сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎ 4 запросов (ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²) Π΅Π΄ΠΈΠ½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 3 запроса, эти запросы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° любой ΠΈΠ· этих 4 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π΅ станСт доступным.

Один ΠΈΠ· способов ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ большС рСсурсов (памяти, ядСр процСссора ΠΈ Ρ‚. Π΄.) Π½Π° сСрвСр, Π½ΠΎ это Π½Π΅ самоС Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅β€¦.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΎ тСхнологичСских ограничСниях.

Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° сСрвСрС Π½Π΅ СдинствСнная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π’Π°ΠΌ стало интСрСсно ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько запросов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ? всё ΠΈΠ·-Π·Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Допустим, Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΠΈ Π’Π°ΠΌ Π½ΡƒΠΆΠ½Π° страница Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ список всСх Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ².

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ стучится Π½Π° http://yourstore.com/products ΠΈ сСрвСр Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ HTML Ρ„Π°ΠΉΠ» со всСми ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ с Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ‚Π²Π΅Ρ‚. БовсСм Π½Π΅ слоТно, Π΄Π°?

Но, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ происходит Π·Π° кулисами?

На сколько ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°? Ну это зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ. Π”Π°Π²Π°ΠΉΡ‚Π΅ обратимся ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ CPU Ρ‚Π°ΠΊΡ‚ΠΎΠ²
CPU Registers3 Ρ‚Π°ΠΊΡ‚Π°
L1 Cache8 Ρ‚Π°ΠΊΡ‚ΠΎΠ²
L2 Cache12 Ρ‚Π°ΠΊΡ‚ΠΎΠ²
RAM150 Ρ‚Π°ΠΊΡ‚ΠΎΠ²
Disk30,000,000 Ρ‚Π°ΠΊΡ‚ΠΎΠ²
Network250,000,000 Ρ‚Π°ΠΊΡ‚ΠΎΠ²

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сСти ΠΈ чтСния с диска слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сколько запросов ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ внСшним API ваша систСма ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π·Π° это врСмя.

Подбивая ΠΈΡ‚ΠΎΠ³ΠΈ: ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΈ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ рСсурсы Π²ΠΏΡƒΡΡ‚ΡƒΡŽ.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° C10K

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

C10k (Π°Π½Π³Π». C10k; 10k connections β€” ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° 10 тысяч соСдинСний)

Π’ Ρ€Π°Π½Π½ΠΈΠ΅ 2000-Π΅, сСрвСрныС ΠΈ клиСнтскиС ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»Π° ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ 10 000 клиСнтских соСдинСний ΠΊ ΠΎΠ΄Π½ΠΎΠΉ машинС.

Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ традиционная модСль thread-per-request (ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° запрос) Π½Π΅ ΠΌΠΎΠ³Π»Π° Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? Π§Ρ‚ΠΎ ΠΆ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ.

Нативная рСализация ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² выдСляСт большС 1 Мб памяти Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ, выходя ΠΈΠ· этого – для 10 тысяч ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² трСбуСтся 10 Π“Π± ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для стСка ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π”Π°, ΠΈ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, ΠΌΡ‹ Π² Π½Π°Ρ‡Π°Π»Π΅ 2000-Ρ…!!

исходный ΠΊΠΎΠ΄ node js. af99xcxnykot0wq zv20o 6cvps. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-af99xcxnykot0wq zv20o 6cvps. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° af99xcxnykot0wq zv20o 6cvps. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ наши Π΄Π½ΠΈ сСрвСрныС ΠΈ клиСнтскиС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСС ΠΈ эффСктивнСй ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ любой язык программирования ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Но фактичСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ исчСрпана. Для 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² клиСнтских соСдинСний ΠΊ ΠΎΠ΄Π½ΠΎΠΉ машинС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° возвращаСтся вновь (Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½Π° C10M Problem).

JavaScript спасСниС?

ΠžΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎ, спойлСрыисходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ..
Node.js Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ C10K… Π½ΠΎ ΠΊΠ°ΠΊ?!

Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹ΠΉ JavaScript Π½Π΅ Π±Ρ‹Π» Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ ΠΈ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π² Π½Π°Ρ‡Π°Π»Π΅ 2000-Ρ…, Π½Π° Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ сущСствовали Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ… JVM (java virtual machine) – RingoJS ΠΈ AppEngineJS, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ thread-per-request.

Но Ссли ΠΎΠ½ΠΈ Π½Π΅ смогли Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Node.js смог?! Всё ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ JavaScript ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Node.js ΠΈ Ρ†ΠΈΠΊΠ» событий

Node.js

Node.js это сСрвСрная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π΄Π²ΠΈΠΆΠΊΠ΅ Google Chrome – V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ JavaScript ΠΊΠΎΠ΄ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Node.js ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ событийно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ модСль ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Π²Π²ΠΎΠ΄ / Π²Ρ‹Π²ΠΎΠ΄ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ лСгковСсным ΠΈ эффСктивным. Π­Ρ‚ΠΎ Π½Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΈ Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, это срСда выполнСния JavaScript.

Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм малСнький ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Non-blocking I/O

Node.js ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Π·Π½Π°Ρ‡ΠΈΡ‚:

Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π° запрос ΠΊ /home сСрвСр Π² ΠΎΡ‚Π²Π΅Ρ‚ ΡˆΠ»Ρ‘Ρ‚ HTML страницу, Π° для всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… запросов β€” ‘Hello World’. Π§Ρ‚ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΎΡΠ»Π°Ρ‚ΡŒ HTML страницу сначала Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² http.createServer ΠΈ fs.readFile ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ β€” колбэки. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ (ΠŸΠ΅Ρ€Π²Π°Ρ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСрвСр ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ запрос, Π° вторая β€” ΠΊΠΎΠ³Π΄Π° Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ с диска ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Ρ‘Π½ Π² Π±ΡƒΡ„Π΅Ρ€).

Пока Ρ„Π°ΠΉΠ» считываСтся с диска, Node.js ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ запросы ΠΈ Π΄Π°ΠΆΠ΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» снова ΠΈ всё это Π² ΠΎΠ΄Π½ΠΎΠΌ потокС… Π½ΠΎ ΠΊΠ°ΠΊ?!

Π¦ΠΈΠΊΠ» событий

Π¦ΠΈΠΊΠ» событий β€” это магия, которая происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ Node.js. Π­Ρ‚ΠΎ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ бСсконСчный Ρ†ΠΈΠΊΠ» ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ.

исходный ΠΊΠΎΠ΄ node js. . исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Libuv β€” C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° которая Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ ΠΈ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ядра Node.js. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ libuv здСсь.

Π¦ΠΈΠΊΠ» событий ΠΈΠΌΠ΅Π΅Ρ‚ 6 Ρ„Π°Π·, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ исполнСниС всСх 6 Ρ„Π°Π· Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ tick-ΠΎΠΌ.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΈ этот ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π΅ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» событий, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΊΡ‚ΠΎ выполняСт всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°?

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ вниманиСисходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ..
Когда Ρ†ΠΈΠΊΠ»Ρƒ событий Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ ОБ с Ρ‚Ρ€Π΅Π΄ΠΏΡƒΠ»Π° (thread pool), Π° ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, коллбэк ставится Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²ΠΎ врСмя Ρ„Π°Π·Ρ‹ pending callbacks.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π Π°Π·Π²Π΅ это Π½Π΅ ΠΊΡ€ΡƒΡ‚ΠΎ?

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° CPU-Ρ‘ΠΌΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡

Node.js каТСтся ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ! Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм API для вычислСний простых чисСл.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ число – это Ρ†Π΅Π»ΠΎΠ΅ (Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅) число большС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΈ Π΄Π΅Π»ΠΈΠΌΠΎΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 1 ΠΈ Π½Π° само сСбя.

исходный ΠΊΠΎΠ΄ node js. nlkn7fwr kxhtktm gt0ci7ask. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-nlkn7fwr kxhtktm gt0ci7ask. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° nlkn7fwr kxhtktm gt0ci7ask. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π”Π°Π½ΠΎ число N, API Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ N простых чисСл Π² список (ΠΈΠ»ΠΈ массив).

prime.js это рСализация Π½ΡƒΠΆΠ½Ρ‹Ρ… вычислСний: функция isPrime провСряСт являСтся Π»ΠΈ число простым, Π° nthPrime Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ N Ρ‚Π°ΠΊΠΈΡ… чисСл.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΊ Π½Π°ΠΌ стучатся 3 ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌΡƒΡΡ Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ API:

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Когда Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΡˆΠ»Ρ‘Ρ‚ запрос – Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ блокируСтся ΠΈ это Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ CPU-Ρ‘ΠΌΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡. Когда Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ занят исполнСниСм «тяТёлой» Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ½ становится нСдоступСн для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡.

Но ΠΊΠ°ΠΊ насчёт libuv? Если Π’Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Node.js ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ОБ избСгая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π’Ρ‹ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΡ€Π°Π²Ρ‹, это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ нашСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ это стало Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ, наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ написан Π½Π° языкС C++, Ρ‡Ρ‚ΠΎ Π±Ρ‹ libuv ΠΌΠΎΠ³Π»Π° с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, начиная с v10.5 Π² Node.js Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Worker Threads.

Π’ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹ ΠΈ ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΈ

Π’ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для выполнСния CPU-Ρ‘ΠΌΠΊΠΈΡ… JavaScript ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ; Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΡƒΠΆΠ΅ встроСнныС Π² Node.js ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ эффСктивно ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, Ρ‡Π΅ΠΌ Worker thread.

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ наш ΠΊΠΎΠ΄:

primes-workerthreads.js ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ. Он ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ workerData (это копия ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… с основного ΠΏΠΎΡ‚ΠΎΠΊΠ°) ΠΈ parentPort Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° пСрСдаётся Π½Π°Π·Π°Π΄ Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ испробуСм наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ снова ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ:

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Основной ΠΏΠΎΡ‚ΠΎΠΊ большС Π½Π΅ блокируСтся исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ..

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ, Π½ΠΎ ΠΏΠ»ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΎΡ€ΠΊΠ΅Ρ€Ρ‹ Π±Π΅Π· всяких Π½Π° Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ всС ΠΆΠ΅ Π½Π΅ Π»ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ Π΄Π΅ΡˆΡ‘Π²ΠΎΠ΅ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ создайтС ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ этим.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Node.js мощная тСхнология, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ стоит ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ возмоТности.
Моя личная рСкомСндация – всСгда Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌΠΈ! Если Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ, Π’Ρ‹ смоТСтС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этим Π±ΠΎΠ»Π΅Π΅ эффСктивно.

Π­Ρ‚ΠΎ всё Π½Π° сСгодня, рСбята. Π― надСюсь этот пост Π±Ρ‹Π» ΠΏΠΎΠ»Π΅Π·Π΅Π½ для Вас ΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎ Node.js.

Бпасибо Π·Π° ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎ встрСчи Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… постахисходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ..

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Π΅ΠΌ Π½Π° самом Π΄Π΅Π»Π΅ являСтся Node.js?

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Node.js это β€” срСда выполнСния JavaScript. Π§Ρ‚ΠΎ ΠΆΠ΅ это Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?
ΠžΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Node.js Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ для выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π½Π° JavaScript.
исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
РаньшС Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ JavaScript Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Π½ΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»ΠΈ Π΅Π³ΠΎ, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ JS Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π² качСствС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния. Π’Π°ΠΊ появился Node.js.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС с JavaScript, Ρ‡Π΅ΠΌ просто ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π²Π΅Π±-сайты.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ JavaScript Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ скриптовыС языки программирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Python.

Оба β€” Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹ΠΉ JavaScript ΠΈ Node.js Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² срСдС выполнСния V8. Π­Ρ‚ΠΎΡ‚ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ваш JS ΠΊΠΎΠ΄, ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² Π±ΠΎΠ»Π΅Π΅ быстрый ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ – Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±Π΅Π· нСобходимости сначала Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Node.js?

β€” Node.js β€” срСда выполнСния JavaScript, основанная Π½Π° JavaScript Π΄Π²ΠΈΠΆΠΊΠ΅ V8 ΠΈΠ· Chrome.
β€” Node.js ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ событиями, Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ модСль Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, которая Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π΅ Π»Π΅Π³ΠΊΠΎΠΉ ΠΈ эффСктивной.
β€” ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ экосистСма Node.js, npm, являСтся самой большой экосистСмой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ Π² ΠΌΠΈΡ€Π΅.

ΠœΡ‹ ΡƒΠΆΠ΅ обсуТдали ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку этого опрСдСлСния: Β«Node.js β€” срСда выполнСния JavaScript, основанная Π½Π° JavaScript Π΄Π²ΠΈΠΆΠΊΠ΅ V8 ΠΈΠ· ChromeΒ». Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… строках, Ρ‚Π°ΠΊ ΠΌΡ‹ смоТСм ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Node.js Ρ‚Π°ΠΊ популярСн.

I/O ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ: ΠΎΡ‚ чтСния/записи Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎ HTTP-запроса Π² API. I/O Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ врСмя ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Рассмотрим сцСнарий, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ user1 ΠΈ user2 ΠΈΠ· Π±Π΅ΠΊΠ΅Π½Π΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ ΠΈΡ… Π½Π° экранС / Π² консоли. ΠžΡ‚Π²Π΅Ρ‚ Π½Π° этот запрос Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ ΠΎΠ±Π° запроса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСзависимо ΠΈ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°

Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ запрос Π΄Π°Π½Π½Ρ‹Ρ… user2 Π½Π΅ запускаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ user1 Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Ρ‹ Π½Π° экранС.

Если это Π±Ρ‹Π» Π²Π΅Π±-сСрвСр, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Но JavaScript ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π΅Π½ (Π½ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» событий, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это сдСлаСт JavaScript Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ подходящим для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ запрос, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запрос Π΄Π°Π½Π½Ρ‹Ρ… для user2, Π½Π΅ доТидаясь ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° запрос user1. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° запроса ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ многопоточности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько запросов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π¦ΠΈΠΊΠ» событий JavaScript

Если Ρƒ вас Π΅ΡΡ‚ΡŒ 26 ΠΌΠΈΠ½ΡƒΡ‚, посмотритС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ-объяснСниС Node Event Loop:

Если Π½Π΅Ρ‚Ρƒ, Π²ΠΎΡ‚ пошаговоС объяснСниС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Event Loop Π² JavaScript:

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

1. ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚Π΅ main() Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

2. ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚Π΅ console.log() Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Он запускаСтся сразу ΠΈ появляСтся.

3. ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚Π΅ setTimeout(2000) Π² стСк. setTimeout(2000) это β€” Node API. Когда ΠΌΡ‹ Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ, ΠΌΡ‹ рСгистрируСм ΠΏΠ°Ρ€Ρƒ событиС-ΠΊΠΎΠ»Π»Π±Π΅ΠΊ. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ 2000 миллисСкунд, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΊΠΎΠ»Π»Π±Π΅ΠΊ.

4. ПослС рСгистрации, setTimeout(2000) появляСтся Π² стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

5. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ setTimeout(0) рСгистрируСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° API-интСрфСйса Node, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… выполнСния.

6. ПослС оТидания 0 сСкунд setTimeout(0) пСрСмСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ выполнСния ΠΊΠΎΠ»Π»Π±Π΅ΠΊΠΎΠ² (callback queue), ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС происходит с setTimeout(2000).

7. Π’ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ выполнСния ΠΊΠΎΠ»Π»Π±Π΅ΠΊΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΆΠ΄ΡƒΡ‚, ΠΊΠΎΠ³Π΄Π° стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ пустым, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π­Ρ‚ΠΎ обСспСчиваСт event loop.

8. ВызываСтся послСдняя console.log(), Π° main() вызываСтся ΠΈΠ· стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

9. Π¦ΠΈΠΊΠ» событий Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² пуст, Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° β€” Π½Π΅Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ (ΠΏΠΎ порядку) Π² стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для выполнСния.

исходный ΠΊΠΎΠ΄ node js. image loader. исходный ΠΊΠΎΠ΄ node js Ρ„ΠΎΡ‚ΠΎ. исходный ΠΊΠΎΠ΄ node js-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° исходный ΠΊΠΎΠ΄ node js. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Node.js прСдставляСт срСду выполнСния ΠΊΠΎΠ΄Π° Π½Π° JavaScript, которая построСна Π½Π° основС Π΄Π²ΠΈΠΆΠΊΠ° JavaScript Chrome V8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° языкС JavaScript Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Node.js ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для создания сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС JavaScript. Π₯отя Ρ‚Π°ΠΊΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ написанию дСсктопных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (Electron) ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ созданию ΠΊΠΎΠ΄Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Node.js, ΠΊΠ°ΠΊ ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ для создания Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Π­Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, построСнныС сообщСством. Они Ρ€Π΅ΡˆΠ°Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. npm (ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Node) содСрТит ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих прилоТСниях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ быстрой ΠΈ эффСктивной.

Require

Require исполняСт Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, поставляСмыС Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Node.js, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈΠ»ΠΈ HTTP, ΠΈΠ· API Node.js.
Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Express ΠΈ Mongoose, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ устанавливаСтС ΠΈΠ· npm.
ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.
Require β€” это функция, ΠΈ ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«ΠΏΡƒΡ‚ΡŒΒ» ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ module.exports.

Node ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

Node ΠΌΠΎΠ΄ΡƒΠ»ΠΈ это β€” ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, сущСствованиС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ случайно Π½Π΅ влияСт Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свои собствСнныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прилоТСниях. Node.js ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ встроСнных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ установки.

V8 ускоряСт JavaScript, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ C ++

V8 – Π΄Π²ΠΈΠΆΠΎΠΊ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, написанный Π½Π° C ++.

V8 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ сцСнарий ECMAScript, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ECMA-262. ECMAScript Π±Ρ‹Π» создан Ecma International для стандартизации JavaScript.

V8 ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ встроСн Π² любоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ C ++. Благодаря этому, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный ΠΊΠΎΠ΄ Π½Π° C ++, ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ доступным для JavaScript.

Бобытия

Бобытия – это всС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ.

Π’ Node Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° событий:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *