Skip to main content

З чого складається рантайм Node.js?

More details in the official Node.js docs - About Node.js

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)└────────────────────────┘

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.