Що таке Node.js?

Node.js - це середовище виконання JavaScript. Звучить чудово, але що це означає? Як це працює?

Середовище виконання Node.js включає все необхідне для запуску програми, написаної на JavaScript.

Node.js виник, коли оригінальні розробники JavaScript розширили його з того, що ви могли запускати лише у браузері, на те, що ви могли запускати на своїй машині як окремий додаток.

Тепер ви можете зробити набагато більше за допомогою JavaScript, ніж просто зробити веб-сайти інтерактивними.

JavaScript тепер має можливість робити те, що можуть робити інші мови сценаріїв, такі як Python.

І JavaScript браузера, і Node.js працюють на механізмі виконання V8 JavaScript. Цей механізм бере ваш код JavaScript і перетворює його в швидший машинний код. Машинний код - це низькорівневий код, який комп’ютер може запустити без необхідності його попередньої інтерпретації.

Чому Node.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.

Введення / виведення вимагає часу і, отже, блокує інші функції.

Розглянемо сценарій, коли ми запитуємо внутрішню базу даних для деталей user1 та user2, а потім роздруковуємо їх на екрані / консолі. Відповідь на цей запит вимагає часу, але обидва запити на дані користувача можуть виконуватися незалежно і одночасно.

Блокування вводу-виводу

У методі блокування запит даних user2 не ініціюється, поки дані user1 не будуть надруковані на екрані.

Якби це був веб-сервер, нам довелося б розпочати новий потік для кожного нового користувача. Але JavaScript є однопотоковим (не дуже, але він має однопотоковий цикл подій, про який ми поговоримо трохи пізніше). Отже, це зробило б JavaScript не дуже придатним для багатопотокових завдань.

Ось тут і з’являється неблокуюча частина.

Неблокуючий ввід / вивід

З іншого боку, використовуючи неблокуючий запит, ви можете ініціювати запит даних для користувача2, не чекаючи відповіді на запит для користувача1. Ви можете ініціювати обидва запити паралельно.

Цей неблокуючий введення-виведення усуває необхідність багатопоточності, оскільки сервер може обробляти кілька запитів одночасно.

Цикл подій JavaScript

Якщо у вас є 26 хвилин, перегляньте це чудове відео пояснення циклу подій вузла:

В іншому випадку, ось коротке покрокове пояснення того, як працює цикл подій JavaScript.

  1. Натисніть main()на стек дзвінків.
  2. Натисніть console.log()на стек дзвінків. Потім це запускається відразу і потрапляє.
  3. Натисніть setTimeout(2000)на стопку. setTimeout(2000)є Node API. Коли ми викликаємо це, ми реєструємо пару подія-зворотний виклик. Подія буде чекати 2000 мілісекунд, тоді функцією є зворотний виклик.
  4. Після реєстрації в API, setTimeout(2000)він вискакує зі стеку викликів.
  5. Тепер другий setTimeout(0)реєструється таким же чином. Тепер у нас є два Node API, які чекають на виконання.
  6. Зачекавши 0 секунд, setTimeout(0)він переходить до черги зворотного виклику, і те саме відбувається з setTimeout(2000).
  7. У черзі зворотного виклику функції чекають, поки стек викликів буде порожнім, оскільки лише один оператор може виконати час. Про це дбає цикл подій.
  8. Останній console.log()запускається, і main()отримується зі стеку викликів.
  9. Цикл подій бачить, що стек викликів порожній, а черга зворотного виклику не порожня. Таким чином, він переміщує зворотні виклики (у порядку першого-першого виходу) до стеку викликів для виконання.

нм

Це бібліотеки, створені чудовою спільнотою, яка вирішить більшість ваших загальних проблем. npm (менеджер пакунків вузлів) містить пакети, які ви можете використовувати у своїх програмах, щоб зробити вашу розробку швидшою та ефективною.

Вимагати

Вимагає робить три речі:

  • Він завантажує модулі, що постачаються в комплекті з Node.js, наприклад, файловою системою та HTTP від ​​Node.js API.
  • Він завантажує сторонні бібліотеки, такі як Express і Mongoose, які ви встановлюєте з npm.
  • Це дозволяє вам вимагати власні файли та модулювати проект.

Require - це функція, яка приймає параметр “path” і повертається module.exports.

Вузольні модулі

Модуль Node - це багаторазовий блок коду, існування якого випадково не впливає на інший код.

Ви можете писати власні модулі та використовувати їх у різних додатках. Node.js має набір вбудованих модулів, якими ви можете користуватися без подальшої установки.

V8 з турбонаддувом JavaScript, використовуючи C ++

V8 - це механізм виконання з відкритим кодом, написаний на C ++.

JavaScript -> V8 (C ++) -> Машинний код

V8 реалізує сценарій під назвою ECMAScript, як зазначено в ECMA-262. ECMAScript був створений Ecma International для стандартизації JavaScript.

V8 може працювати автономно або може бути вбудований в будь-яку програму C ++. Він має хуки, що дозволяють писати власний код C ++, який можна зробити доступним для JavaScript.

Це, по суті, дозволяє вам додавати функції до JavaScript, вбудовуючи V8 у ваш код С ++, щоб ваш код С ++ розумів більше, ніж те, що вказує стандарт ECMAScript.

Редагувати: Як до мене звернув увагу Грег Булмаш, існує безліч різних механізмів виконання JavaScript, окрім V8 від Chrome, як SpiderMonkey від Mozilla, Чакра від Microsoft тощо. Детальніше про це можна знайти на цій сторінці.

Події

Щось, що сталося в нашому додатку, на що ми можемо відповісти. У Node є два типи подій.

  • Системні події: Ядро C ++ з бібліотеки під назвою libuv. (Наприклад, закінчив читати файл).
  • Спеціальні події: ядро ​​JavaScript.

Написання Hello World у Node.js

Ми повинні це робити, чи не так?

Створіть файл app.js і додайте до нього наступне.

console.log("Hello World!");

Відкрийте термінал вузла, змініть каталог на папку, де файл зберігається та запускається node app.js.

Бам - ти щойно написав Hello World у Node.js.

Слідуйте @ Priyesh_p18

Існує маса ресурсів, якими ви можете скористатися, щоб дізнатися більше про Node.js, включаючи freeCodeCamp.org.