Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «З чого складається рантайм Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Рантайм Node.js** складається з рушія **V8** (виконує JS), бібліотеки **libuv** (event loop, thread pool, асинхронний I/O), C++ bindings між ними, вбудованих core-модулів (`fs`, `http`, `net`...) і CLI/REPL-оболонки, що все це запускає. **Ключове:** V8 виконує код, libuv забезпечує асинхронність і I/O, а bindings з'єднують JS-світ із нативним.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняMore details in the official Node.js docs - [About Node.js](https://nodejs.org/en/about) ### 1. V8 Engine (рушій JavaScript) - Це той самий рушій, що використовується в Google Chrome. - Він компілює JavaScript у машинний код (JIT - Just-In-Time compilation). - Відповідає за: - інтерпретацію й виконання JS-коду; - керування пам'яттю (garbage collection); - оптимізацію коду під час виконання. Саме завдяки V8 Node.js може виконувати JavaScript напряму, без браузера. ### 2. libuv (асинхронність та I/O) - Це бібліотека на C, яка забезпечує: - **Event Loop** - головний цикл подій; - **Thread Pool** - пул потоків для фонових задач; - неблокуюче введення-виведення (I/O); - роботу з файловою системою, мережевими сокетами й таймерами. - Завдяки libuv Node.js може обробляти безліч запитів одночасно без блокувань. ### 3. Bindings (C++ Bindings) - Це "міст" між JS-світом (V8) і нативним кодом (libuv, системні бібліотеки). - Node.js використовує **Node bindings** для виклику функцій, написаних на C/C++, з JavaScript. - Наприклад, коли ти викликаєш `fs.readFile()`, під капотом вона через bindings звертається до системних викликів операційної системи. ### 4. Core Modules (вбудовані модулі Node.js) - Реалізовані поверх V8 і libuv, і включають: - `fs` (файлова система); - `http`, `https`; - `net`, `dns`; - `path`, `url`, `stream`, `events` та ін. - Ці модулі - частина Node.js API, написана на C++ і JavaScript, щоб розробник міг працювати на високому рівні. ### 5. Event Loop - Серце асинхронної моделі Node.js. - Це нескінченний цикл, який: 1. отримує задачі з черг (таймери, I/O, callback-и тощо); 2. розподіляє їх по фазах; 3. виконує їх у порядку пріоритету. - Event Loop керується бібліотекою libuv. ### 6. Thread Pool (пул потоків) - Усередині libuv є пул із 4 потоків (за замовчуванням). - Він використовується для виконання важких операцій, не залежних від основного потоку Event Loop - наприклад, операцій із файлами, DNS, криптографією. ### 7. C/C++ Core та Node API - Низькорівневі частини Node.js, написані на C/C++, відповідають за: - ініціалізацію середовища; - керування пам'яттю; - взаємодію з ОС; - підтримку `process`, `Buffer`, `streams` та ін. ### 8. Node.js CLI та REPL - Оболонка, через яку запускається код (`node script.js`). - Підтримує REPL (інтерактивне виконання команд). - Ініціалізує рантайм, підключає V8, libuv і модулі ядра. ### Коротка структура: ```javascript ┌────────────────────────┐ │ Node.js CLI / REPL │ └────────────┬───────────┘ ▼ ┌────────────────────────┐ │ Node.js Core (C++) │ │ (Bindings, Buffer, API) │ └────────────┬───────────┘ ▼ ┌────────────────────────┐ │ libuv (I/O) │ │ Event Loop, Threads │ └────────────┬───────────┘ ▼ ┌────────────────────────┐ │ V8 Engine (JS) │ └────────────────────────┘ ```Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.